@lee-zg/melange 1.0.0

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 (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +256 -0
  3. package/dist/chunk-2PXWQDZC.js +659 -0
  4. package/dist/chunk-2PXWQDZC.js.map +1 -0
  5. package/dist/chunk-352XNR3C.js +716 -0
  6. package/dist/chunk-352XNR3C.js.map +1 -0
  7. package/dist/chunk-7QVYU63E.js +6 -0
  8. package/dist/chunk-7QVYU63E.js.map +1 -0
  9. package/dist/chunk-ALBD5XC5.js +285 -0
  10. package/dist/chunk-ALBD5XC5.js.map +1 -0
  11. package/dist/chunk-O7K662J5.cjs +842 -0
  12. package/dist/chunk-O7K662J5.cjs.map +1 -0
  13. package/dist/chunk-PK6SKIKE.cjs +8 -0
  14. package/dist/chunk-PK6SKIKE.cjs.map +1 -0
  15. package/dist/chunk-Q73NOVWX.cjs +789 -0
  16. package/dist/chunk-Q73NOVWX.cjs.map +1 -0
  17. package/dist/chunk-Q7XG6YN6.cjs +682 -0
  18. package/dist/chunk-Q7XG6YN6.cjs.map +1 -0
  19. package/dist/chunk-YGMBCZJQ.js +833 -0
  20. package/dist/chunk-YGMBCZJQ.js.map +1 -0
  21. package/dist/chunk-ZT6HVG4G.cjs +330 -0
  22. package/dist/chunk-ZT6HVG4G.cjs.map +1 -0
  23. package/dist/core/index.cjs +97 -0
  24. package/dist/core/index.cjs.map +1 -0
  25. package/dist/core/index.d.cts +718 -0
  26. package/dist/core/index.d.ts +718 -0
  27. package/dist/core/index.js +4 -0
  28. package/dist/core/index.js.map +1 -0
  29. package/dist/fp/index.cjs +185 -0
  30. package/dist/fp/index.cjs.map +1 -0
  31. package/dist/fp/index.d.cts +913 -0
  32. package/dist/fp/index.d.ts +913 -0
  33. package/dist/fp/index.js +4 -0
  34. package/dist/fp/index.js.map +1 -0
  35. package/dist/index.cjs +608 -0
  36. package/dist/index.cjs.map +1 -0
  37. package/dist/index.d.cts +39 -0
  38. package/dist/index.d.ts +39 -0
  39. package/dist/index.js +33 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/plugins/index.cjs +41 -0
  42. package/dist/plugins/index.cjs.map +1 -0
  43. package/dist/plugins/index.d.cts +643 -0
  44. package/dist/plugins/index.d.ts +643 -0
  45. package/dist/plugins/index.js +4 -0
  46. package/dist/plugins/index.js.map +1 -0
  47. package/dist/types-BtOUCLB-.d.cts +293 -0
  48. package/dist/types-BtOUCLB-.d.ts +293 -0
  49. package/dist/utils/index.cjs +297 -0
  50. package/dist/utils/index.cjs.map +1 -0
  51. package/dist/utils/index.d.cts +1179 -0
  52. package/dist/utils/index.d.ts +1179 -0
  53. package/dist/utils/index.js +4 -0
  54. package/dist/utils/index.js.map +1 -0
  55. package/package.json +132 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/events.ts","../src/core/container.ts","../src/core/decorators.ts","../src/core/disposable.ts"],"names":["__name","Lifecycle"],"mappings":"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","file":"chunk-Q7XG6YN6.cjs","sourcesContent":["/**\r\n * @fileoverview 用于发布/订阅模式的事件发射器类\r\n * @module melange/core/events\r\n * @description 提供一个类型安全的事件发射器实现\r\n * 遵循观察者模式。\r\n */\r\n\r\nimport type { EventHandler, Subscription } from '../types';\r\n\r\n/**\r\n * 类型安全的事件映射接口。\r\n * 扩展此接口以定义您的事件类型。\r\n *\r\n * @example\r\n * ```typescript\r\n * interface MyEvents {\r\n * userLogin: { userId: string; timestamp: Date };\r\n * userLogout: { userId: string };\r\n * error: Error;\r\n * }\r\n *\r\n * const emitter = new EventEmitter<MyEvents>();\r\n * emitter.on('userLogin', event => console.log(event.userId));\r\n * ```\r\n */\r\nexport interface EventMap {\r\n [event: string]: unknown;\r\n}\r\n\r\n/**\r\n * 带有元数据的内部监听器条目。\r\n */\r\ninterface ListenerEntry<T> {\r\n handler: EventHandler<T>;\r\n once: boolean;\r\n}\r\n\r\n/**\r\n * 类型安全的事件发射器类。\r\n * 实现观察者模式以进行解耦的事件驱动编程。\r\n *\r\n * @description\r\n * EventEmitter 提供了一种订阅和发射事件的方式,具有完整的\r\n * TypeScript 类型安全性。它支持一次性监听器、监听器移除\r\n * 和适当的清理。\r\n *\r\n * @template Events - 定义事件名称和载荷类型的事件映射类型\r\n *\r\n * @example\r\n * ```typescript\r\n * interface AppEvents {\r\n * 'user:created': { id: string; name: string };\r\n * 'user:deleted': { id: string };\r\n * 'error': Error;\r\n * }\r\n *\r\n * const events = new EventEmitter<AppEvents>();\r\n *\r\n * // 订阅事件\r\n * events.on('user:created', user => {\r\n * console.log(`创建用户: ${user.name}`);\r\n * });\r\n *\r\n * // 发射事件\r\n * events.emit('user:created', { id: '1', name: 'John' });\r\n *\r\n * // 一次性监听器\r\n * events.once('error', err => console.error(err));\r\n *\r\n * // 取消订阅\r\n * const subscription = events.on('user:deleted', handleDelete);\r\n * subscription.unsubscribe();\r\n * ```\r\n */\r\nexport class EventEmitter<Events extends EventMap = EventMap> {\r\n /**\r\n * 事件名称到其监听器的映射\r\n */\r\n private listeners: Map<keyof Events, ListenerEntry<unknown>[]> = new Map();\r\n\r\n /**\r\n * 订阅事件。\r\n *\r\n * @param event - 要订阅的事件名称\r\n * @param handler - 事件发射时要调用的处理函数\r\n * @returns 带有取消订阅方法的订阅对象\r\n */\r\n public on<K extends keyof Events>(\r\n event: K,\r\n handler: EventHandler<Events[K]>\r\n ): Subscription {\r\n return this.addListener(event, handler, false);\r\n }\r\n\r\n /**\r\n * 仅订阅事件的一次发射。\r\n * 监听器在被调用一次后自动移除。\r\n *\r\n * @param event - 要订阅的事件名称\r\n * @param handler - 事件发射时要调用的处理函数\r\n * @returns 带有取消订阅方法的订阅对象\r\n */\r\n public once<K extends keyof Events>(\r\n event: K,\r\n handler: EventHandler<Events[K]>\r\n ): Subscription {\r\n return this.addListener(event, handler, true);\r\n }\r\n\r\n /**\r\n * 从事件中移除特定监听器。\r\n *\r\n * @param event - 事件名称\r\n * @param handler - 要移除的处理函数\r\n */\r\n public off<K extends keyof Events>(\r\n event: K,\r\n handler: EventHandler<Events[K]>\r\n ): void {\r\n const eventListeners = this.listeners.get(event);\r\n if (eventListeners) {\r\n const index = eventListeners.findIndex(entry => entry.handler === handler);\r\n if (index !== -1) {\r\n eventListeners.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 发射带有给定载荷的事件。\r\n * 所有订阅的监听器将同步调用。\r\n *\r\n * @param event - 要发射的事件名称\r\n * @param payload - 事件载荷\r\n */\r\n public emit<K extends keyof Events>(event: K, payload: Events[K]): void {\r\n const eventListeners = this.listeners.get(event);\r\n if (!eventListeners) return;\r\n\r\n // 创建副本以避免监听器修改数组时出现问题\r\n const listenersCopy = [...eventListeners];\r\n\r\n for (const entry of listenersCopy) {\r\n entry.handler(payload);\r\n\r\n if (entry.once) {\r\n this.off(event, entry.handler as EventHandler<Events[K]>);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 移除特定事件的所有监听器,或如果不指定事件则移除所有监听器。\r\n *\r\n * @param event - 可选的事件名称,用于清除监听器\r\n */\r\n public removeAllListeners<K extends keyof Events>(event?: K): void {\r\n if (event) {\r\n this.listeners.delete(event);\r\n } else {\r\n this.listeners.clear();\r\n }\r\n }\r\n\r\n /**\r\n * 返回特定事件的监听器数量。\r\n *\r\n * @param event - 事件名称\r\n * @returns 监听器数量\r\n */\r\n public listenerCount<K extends keyof Events>(event: K): number {\r\n const eventListeners = this.listeners.get(event);\r\n return eventListeners?.length ?? 0;\r\n }\r\n\r\n /**\r\n * 返回所有具有监听器的事件名称。\r\n *\r\n * @returns 事件名称数组\r\n */\r\n public eventNames(): Array<keyof Events> {\r\n return Array.from(this.listeners.keys());\r\n }\r\n\r\n /**\r\n * 添加监听器的内部方法。\r\n */\r\n private addListener<K extends keyof Events>(\r\n event: K,\r\n handler: EventHandler<Events[K]>,\r\n once: boolean\r\n ): Subscription {\r\n if (!this.listeners.has(event)) {\r\n this.listeners.set(event, []);\r\n }\r\n\r\n const entry: ListenerEntry<Events[K]> = { handler, once };\r\n this.listeners.get(event)!.push(entry as ListenerEntry<unknown>);\r\n\r\n return {\r\n unsubscribe: () => this.off(event, handler),\r\n };\r\n }\r\n}\r\n","/**\r\n * @fileoverview 依赖注入容器\r\n * @module melange/core/container\r\n * @description 提供一个简单而强大的依赖注入容器\r\n * 支持单例、工厂函数和自动解析。\r\n */\r\n\r\nimport type { Constructor } from '../types';\r\n\r\n/**\r\n * 用于标识依赖项的令牌类型。\r\n * 可以是字符串、符号或类构造函数。\r\n */\r\nexport type Token<T = unknown> = string | symbol | Constructor<T>;\r\n\r\n/**\r\n * 创建实例的工厂函数类型。\r\n */\r\nexport type Factory<T> = (container: Container) => T;\r\n\r\n/**\r\n * 依赖注册的生命周期选项。\r\n */\r\nexport enum Lifecycle {\r\n /** 每次都创建新实例 */\r\n Transient = 'transient',\r\n /** 创建单个实例并重复使用 */\r\n Singleton = 'singleton',\r\n}\r\n\r\n/**\r\n * 容器中的注册条目。\r\n */\r\ninterface Registration<T> {\r\n factory: Factory<T>;\r\n lifecycle: Lifecycle;\r\n instance?: T;\r\n}\r\n\r\n/**\r\n * 可注入类的元数据键。\r\n */\r\nconst INJECTABLE_METADATA = Symbol('melange:injectable');\r\nconst INJECT_METADATA = Symbol('melange:inject');\r\n\r\n/**\r\n * 依赖注入容器。\r\n * 管理依赖项的生命周期和解析。\r\n *\r\n * @description\r\n * Container 类提供控制反转 (IoC) 功能,\r\n * 允许您通过在运行时注册和解析依赖项来解耦代码。\r\n *\r\n * @example\r\n * ```typescript\r\n * // 创建容器\r\n * const container = new Container();\r\n *\r\n * // 注册类\r\n * container.register('logger', () => new ConsoleLogger());\r\n *\r\n * // 注册单例\r\n * container.registerSingleton('config', () => loadConfig());\r\n *\r\n * // 解析依赖项\r\n * const logger = container.resolve<Logger>('logger');\r\n *\r\n * // 使用装饰器\r\n * @Injectable()\r\n * class UserService {\r\n * constructor(@Inject('logger') private logger: Logger) {}\r\n * }\r\n * container.registerClass(UserService);\r\n * ```\r\n */\r\nexport class Container {\r\n /**\r\n * 已注册依赖项的映射\r\n */\r\n private registrations: Map<Token, Registration<unknown>> = new Map();\r\n\r\n /**\r\n * 用于分层解析的父容器\r\n */\r\n private parent: Container | undefined;\r\n\r\n /**\r\n * 创建新的容器实例。\r\n *\r\n * @param parent - 用于分层解析的可选父容器\r\n */\r\n constructor(parent?: Container) {\r\n this.parent = parent;\r\n }\r\n\r\n /**\r\n * 使用工厂函数注册依赖项。\r\n *\r\n * @template T - 依赖项类型\r\n * @param token - 用于标识依赖项的令牌\r\n * @param factory - 创建依赖项的工厂函数\r\n * @param lifecycle - 依赖项的生命周期(默认:Transient)\r\n * @returns 容器实例,用于链式调用\r\n */\r\n public register<T>(\r\n token: Token<T>,\r\n factory: Factory<T>,\r\n lifecycle: Lifecycle = Lifecycle.Transient\r\n ): this {\r\n this.registrations.set(token, {\r\n factory: factory as Factory<unknown>,\r\n lifecycle,\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * 注册单例依赖项。\r\n * 工厂函数只会被调用一次,之后返回相同的实例。\r\n *\r\n * @template T - 依赖项类型\r\n * @param token - 用于标识依赖项的令牌\r\n * @param factory - 创建依赖项的工厂函数\r\n * @returns 容器实例,用于链式调用\r\n */\r\n public registerSingleton<T>(token: Token<T>, factory: Factory<T>): this {\r\n return this.register(token, factory, Lifecycle.Singleton);\r\n }\r\n\r\n /**\r\n * 直接将值注册为单例。\r\n *\r\n * @template T - 值类型\r\n * @param token - 用于标识依赖项的令牌\r\n * @param value - 要注册的值\r\n * @returns 容器实例,用于链式调用\r\n */\r\n public registerValue<T>(token: Token<T>, value: T): this {\r\n this.registrations.set(token, {\r\n factory: () => value,\r\n lifecycle: Lifecycle.Singleton,\r\n instance: value,\r\n });\r\n return this;\r\n }\r\n\r\n /**\r\n * 将类注册为依赖项。\r\n * 类的实例化会自动解析其依赖项。\r\n *\r\n * @template T - 类类型\r\n * @param ClassConstructor - 要注册的类构造函数\r\n * @param lifecycle - 依赖项的生命周期(默认:Transient)\r\n * @returns 容器实例,用于链式调用\r\n */\r\n public registerClass<T extends object>(\r\n ClassConstructor: Constructor<T>,\r\n lifecycle: Lifecycle = Lifecycle.Transient\r\n ): this {\r\n const factory: Factory<T> = container => {\r\n const injectTokens = this.getInjectMetadata(ClassConstructor);\r\n const dependencies = injectTokens.map(token => container.resolve(token));\r\n return new ClassConstructor(...dependencies);\r\n };\r\n\r\n return this.register(ClassConstructor, factory, lifecycle);\r\n }\r\n\r\n /**\r\n * 通过令牌解析依赖项。\r\n *\r\n * @template T - 依赖项类型\r\n * @param token - 标识依赖项的令牌\r\n * @returns 已解析的依赖项\r\n * @throws Error 如果依赖项未注册\r\n */\r\n public resolve<T>(token: Token<T>): T {\r\n const registration = this.registrations.get(token) as Registration<T> | undefined;\r\n\r\n if (!registration) {\r\n // 尝试父容器\r\n if (this.parent) {\r\n return this.parent.resolve(token);\r\n }\r\n throw new Error(`Dependency not registered: ${String(token)}`);\r\n }\r\n\r\n if (registration.lifecycle === Lifecycle.Singleton) {\r\n if (registration.instance === undefined) {\r\n registration.instance = registration.factory(this);\r\n }\r\n return registration.instance;\r\n }\r\n\r\n return registration.factory(this);\r\n }\r\n\r\n /**\r\n * 检查依赖项是否已注册。\r\n *\r\n * @param token - 要检查的令牌\r\n * @returns 如果依赖项已注册则返回 true\r\n */\r\n public has(token: Token): boolean {\r\n if (this.registrations.has(token)) {\r\n return true;\r\n }\r\n return this.parent?.has(token) ?? false;\r\n }\r\n\r\n /**\r\n * 移除依赖项注册。\r\n *\r\n * @param token - 要移除的令牌\r\n * @returns 如果注册已被移除则返回 true\r\n */\r\n public unregister(token: Token): boolean {\r\n return this.registrations.delete(token);\r\n }\r\n\r\n /**\r\n * 清除所有注册。\r\n */\r\n public clear(): void {\r\n this.registrations.clear();\r\n }\r\n\r\n /**\r\n * 创建子容器。\r\n * 子容器从父容器继承注册。\r\n *\r\n * @returns 新的子容器\r\n */\r\n public createChild(): Container {\r\n return new Container(this);\r\n }\r\n\r\n /**\r\n * 获取类的注入元数据。\r\n */\r\n private getInjectMetadata(target: Constructor): Token[] {\r\n // 如果可用则使用 reflect-metadata,否则返回空数组\r\n const reflect = Reflect as unknown as {\r\n getMetadata?: (key: symbol, target: unknown) => Token[] | undefined;\r\n };\r\n return reflect.getMetadata?.(INJECT_METADATA, target) ?? [];\r\n }\r\n}\r\n\r\n/**\r\n * 为了方便而提供的全局容器实例。\r\n */\r\nexport const globalContainer = new Container();\r\n\r\n// ============================================================================\r\n// 依赖注入装饰器\r\n// ============================================================================\r\n\r\n/**\r\n * 将类标记为可注入。\r\n * 自动依赖解析所必需。\r\n *\r\n * @example\r\n * ```typescript\r\n * @Injectable()\r\n * class UserService {\r\n * constructor(private userRepo: UserRepository) {}\r\n * }\r\n * ```\r\n *\r\n * @returns 类装饰器\r\n */\r\nexport function Injectable(): ClassDecorator {\r\n return function <TFunction extends Function>(target: TFunction): TFunction {\r\n // 如果可用则使用 reflect-metadata\r\n const reflect = Reflect as unknown as {\r\n defineMetadata?: (key: symbol, value: unknown, target: unknown) => void;\r\n };\r\n reflect.defineMetadata?.(INJECTABLE_METADATA, true, target);\r\n return target;\r\n };\r\n}\r\n\r\n/**\r\n * 标记构造函数参数以进行注入。\r\n *\r\n * @example\r\n * ```typescript\r\n * @Injectable()\r\n * class UserService {\r\n * constructor(@Inject('logger') private logger: Logger) {}\r\n * }\r\n * ```\r\n *\r\n * @param token - 要注入的令牌\r\n * @returns 参数装饰器\r\n */\r\nexport function Inject(token: Token): ParameterDecorator {\r\n return function (\r\n target: object,\r\n _propertyKey: string | symbol | undefined,\r\n parameterIndex: number\r\n ): void {\r\n // 如果可用则使用 reflect-metadata\r\n const reflect = Reflect as unknown as {\r\n getMetadata?: (key: symbol, target: unknown) => Token[] | undefined;\r\n defineMetadata?: (key: symbol, value: unknown, target: unknown) => void;\r\n };\r\n const existingTokens: Token[] = reflect.getMetadata?.(INJECT_METADATA, target) ?? [];\r\n existingTokens[parameterIndex] = token;\r\n reflect.defineMetadata?.(INJECT_METADATA, existingTokens, target);\r\n };\r\n}\r\n\r\n/**\r\n * 将类标记为单例。\r\n * 结合 @Injectable 和单例生命周期。\r\n *\r\n * @example\r\n * ```typescript\r\n * @Singleton()\r\n * class ConfigService {\r\n * // 只会存在一个实例\r\n * }\r\n * ```\r\n *\r\n * @returns 类装饰器\r\n */\r\nexport function Singleton(): ClassDecorator {\r\n return function <TFunction extends Function>(target: TFunction): TFunction {\r\n // 如果可用则使用 reflect-metadata\r\n const reflect = Reflect as unknown as {\r\n defineMetadata?: (key: symbol | string, value: unknown, target: unknown) => void;\r\n };\r\n reflect.defineMetadata?.(INJECTABLE_METADATA, true, target);\r\n reflect.defineMetadata?.('melange:singleton', true, target);\r\n return target;\r\n };\r\n}\r\n","/**\n * @fileoverview 方法和类装饰器\n * @module melange/core/decorators\n * @description 提供一系列有用的装饰器,用于增强\n * 类和方法的横切关注点。\n */\n\n/**\n * 用于缓存方法结果的记忆化装饰器。\n * 根据方法的参数缓存结果。\n *\n * @description\n * 此装饰器根据方法的参数缓存其返回值。\n * 后续使用相同参数的调用将返回缓存的值。\n *\n * @example\n * ```typescript\n * class Calculator {\n * @Memoize()\n * fibonacci(n: number): number {\n * if (n <= 1) return n;\n * return this.fibonacci(n - 1) + this.fibonacci(n - 2);\n * }\n * }\n * ```\n *\n * @param keyFn - 生成缓存键的可选函数\n * @returns 方法装饰器\n */\nexport function Memoize(keyFn?: (...args: unknown[]) => string): MethodDecorator {\n return function (\n _target: object,\n _propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value as (...args: unknown[]) => unknown;\n const cache = new Map<string, unknown>();\n\n descriptor.value = function (this: unknown, ...args: unknown[]): unknown {\n const key = keyFn ? keyFn(...args) : JSON.stringify(args);\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n\n const result = originalMethod.apply(this, args);\n cache.set(key, result);\n return result;\n };\n\n return descriptor;\n };\n}\n\n/**\n * 用于限制方法调用频率的防抖装饰器。\n * 延迟方法执行直到指定的等待时间过后。\n *\n * @example\n * ```typescript\n * class SearchInput {\n * @Debounce(300)\n * onSearch(query: string): void {\n * // 这将在上次调用后300毫秒才被调用\n * console.log('搜索中:', query);\n * }\n * }\n * ```\n *\n * @param waitMs - 等待的毫秒数\n * @returns 方法装饰器\n */\nexport function Debounce(waitMs: number): MethodDecorator {\n return function (\n _target: object,\n _propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value as (...args: unknown[]) => unknown;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n descriptor.value = function (this: unknown, ...args: unknown[]): void {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n originalMethod.apply(this, args);\n timeoutId = null;\n }, waitMs);\n };\n\n return descriptor;\n };\n}\n\n/**\n * 用于限制方法调用频率的节流装饰器。\n * 确保方法在指定的时间段内最多被调用一次。\n *\n * @example\n * ```typescript\n * class ScrollHandler {\n * @Throttle(100)\n * onScroll(event: Event): void {\n * // 这将最多每100毫秒被调用一次\n * console.log('滚动中');\n * }\n * }\n * ```\n *\n * @param limitMs - 调用之间的最小时间间隔(毫秒)\n * @returns 方法装饰器\n */\nexport function Throttle(limitMs: number): MethodDecorator {\n return function (\n _target: object,\n _propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value as (...args: unknown[]) => unknown;\n let lastCall = 0;\n\n descriptor.value = function (this: unknown, ...args: unknown[]): unknown {\n const now = Date.now();\n\n if (now - lastCall >= limitMs) {\n lastCall = now;\n return originalMethod.apply(this, args);\n }\n\n return undefined;\n };\n\n return descriptor;\n };\n}\n\n/**\n * 用于记录方法调用的日志装饰器。\n * 记录方法进入、退出,以及可选的参数和返回值。\n *\n * @example\n * ```typescript\n * class UserService {\n * @Log({ logArgs: true, logResult: true })\n * getUser(id: string): User {\n * return this.userRepository.findById(id);\n * }\n * }\n * // 日志: \"Entering getUser with args: [\"123\"]\"\n * // 日志: \"Exiting getUser with result: { id: \"123\", name: \"John\" }\"\n * ```\n *\n * @param options - 日志选项\n * @returns 方法装饰器\n */\nexport function Log(\n options: {\n logArgs?: boolean;\n logResult?: boolean;\n prefix?: string;\n } = {}\n): MethodDecorator {\n const { logArgs = false, logResult = false, prefix = '' } = options;\n\n return function (\n _target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value as (...args: unknown[]) => unknown;\n const methodName = String(propertyKey);\n\n descriptor.value = function (this: unknown, ...args: unknown[]): unknown {\n const logPrefix = prefix ? `[${prefix}] ` : '';\n\n if (logArgs) {\n // eslint-disable-next-line no-console\n console.log(`${logPrefix}Entering ${methodName} with args:`, args);\n } else {\n // eslint-disable-next-line no-console\n console.log(`${logPrefix}Entering ${methodName}`);\n }\n\n try {\n const result = originalMethod.apply(this, args);\n\n // 处理异步方法\n if (result instanceof Promise) {\n return result\n .then(asyncResult => {\n if (logResult) {\n // eslint-disable-next-line no-console\n console.log(`${logPrefix}Exiting ${methodName} with result:`, asyncResult);\n } else {\n // eslint-disable-next-line no-console\n console.log(`${logPrefix}Exiting ${methodName}`);\n }\n return asyncResult;\n })\n .catch(error => {\n // eslint-disable-next-line no-console\n console.error(`${logPrefix}${methodName} threw error:`, error);\n throw error;\n });\n }\n\n if (logResult) {\n // eslint-disable-next-line no-console\n console.log(`${logPrefix}Exiting ${methodName} with result:`, result);\n } else {\n // eslint-disable-next-line no-console\n console.log(`${logPrefix}Exiting ${methodName}`);\n }\n\n return result;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`${logPrefix}${methodName} threw error:`, error);\n throw error;\n }\n };\n\n return descriptor;\n };\n}\n\n/**\n * 用于验证方法参数的验证装饰器。\n * 在方法执行前运行验证函数。\n *\n * @example\n * ```typescript\n * class UserService {\n * @Validate((id: string) => {\n * if (!id) throw new Error('ID 是必需的');\n * })\n * getUser(id: string): User {\n * return this.userRepository.findById(id);\n * }\n * }\n * ```\n *\n * @param validator - 在输入无效时抛出异常的验证函数\n * @returns 方法装饰器\n */\nexport function Validate(\n validator: (...args: unknown[]) => void\n): MethodDecorator {\n return function (\n _target: object,\n _propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value as (...args: unknown[]) => unknown;\n\n descriptor.value = function (this: unknown, ...args: unknown[]): unknown {\n validator(...args);\n return originalMethod.apply(this, args);\n };\n\n return descriptor;\n };\n}\n\n/**\n * 用于标记方法已弃用的装饰器。\n * 在调用方法时记录警告。\n *\n * @example\n * ```typescript\n * class UserService {\n * @Deprecated('请改用 getUserById')\n * getUser(id: string): User {\n * return this.getUserById(id);\n * }\n * }\n * ```\n *\n * @param message - 弃用消息\n * @returns 方法装饰器\n */\nexport function Deprecated(message?: string): MethodDecorator {\n return function (\n _target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value as (...args: unknown[]) => unknown;\n const methodName = String(propertyKey);\n const warningMessage = message ?? `${methodName} is deprecated`;\n\n descriptor.value = function (this: unknown, ...args: unknown[]): unknown {\n // eslint-disable-next-line no-console\n console.warn(`[DEPRECATED] ${warningMessage}`);\n return originalMethod.apply(this, args);\n };\n\n return descriptor;\n };\n}\n\n/**\n * 用于密封类的装饰器。\n * 防止向实例添加新属性。\n *\n * @example\n * ```typescript\n * @Sealed()\n * class Config {\n * readonly apiUrl: string = 'https://api.example.com';\n * }\n *\n * const config = new Config();\n * config.newProp = 'value'; // 错误: 无法添加属性\n * ```\n *\n * @returns 类装饰器\n */\nexport function Sealed(): ClassDecorator {\n return function <TFunction extends Function>(target: TFunction): TFunction {\n Object.seal(target);\n Object.seal(target.prototype);\n return target;\n };\n}\n\n/**\n * 用于冻结类的装饰器。\n * 防止对实例进行任何修改。\n *\n * @example\n * ```typescript\n * @Frozen()\n * class Constants {\n * static readonly PI = 3.14159;\n * }\n *\n * Constants.PI = 3; // 错误: 无法修改\n * ```\n *\n * @returns 类装饰器\n */\nexport function Frozen(): ClassDecorator {\n return function <TFunction extends Function>(target: TFunction): TFunction {\n Object.freeze(target);\n Object.freeze(target.prototype);\n return target;\n };\n}\n\n/**\n * 用于自动将方法绑定到类实例的装饰器。\n * 对于作为回调函数传递的方法很有用。\n *\n * @example\n * ```typescript\n * class Button {\n * @Bind()\n * onClick() {\n * console.log(this); // 总是指向 Button 实例\n * }\n * }\n *\n * const button = new Button();\n * const handler = button.onClick;\n * handler(); // `this` 仍然是 button 实例\n * ```\n *\n * @returns 方法装饰器\n */\nexport function Bind(): MethodDecorator {\n return function (\n _target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value as (...args: unknown[]) => unknown;\n\n return {\n configurable: true,\n get(this: object) {\n const bound = originalMethod.bind(this);\n Object.defineProperty(this, propertyKey, {\n value: bound,\n configurable: true,\n writable: true,\n });\n return bound;\n },\n };\n };\n}\n\n/**\n * 用于自动重试失败方法调用的装饰器。\n *\n * @example\n * ```typescript\n * class ApiClient {\n * @Retry(3, 1000)\n * async fetchData(): Promise<Data> {\n * const response = await fetch('/api/data');\n * if (!response.ok) throw new Error('请求失败');\n * return response.json();\n * }\n * }\n * ```\n *\n * @param maxRetries - 最大重试次数\n * @param delayMs - 重试之间的延迟(毫秒)\n * @returns 方法装饰器\n */\nexport function Retry(maxRetries: number, delayMs: number = 0): MethodDecorator {\n return function (\n _target: object,\n _propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value as (...args: unknown[]) => unknown;\n\n descriptor.value = async function (\n this: unknown,\n ...args: unknown[]\n ): Promise<unknown> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await originalMethod.apply(this, args);\n } catch (error) {\n lastError = error;\n\n if (attempt < maxRetries && delayMs > 0) {\n await new Promise(resolve => setTimeout(resolve, delayMs));\n }\n }\n }\n\n throw lastError;\n };\n\n return descriptor;\n };\n}\n\n/**\n * 用于为异步方法添加超时的装饰器。\n *\n * @example\n * ```typescript\n * class ApiClient {\n * @Timeout(5000)\n * async fetchData(): Promise<Data> {\n * // 如果这花费超过5秒,将抛出异常\n * return await fetch('/api/data').then(r => r.json());\n * }\n * }\n * ```\n *\n * @param timeoutMs - 超时时间(毫秒)\n * @param errorMessage - 可选的错误消息\n * @returns 方法装饰器\n */\nexport function Timeout(\n timeoutMs: number,\n errorMessage?: string\n): MethodDecorator {\n return function (\n _target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor\n ): PropertyDescriptor {\n const originalMethod = descriptor.value as (...args: unknown[]) => Promise<unknown>;\n const methodName = String(propertyKey);\n\n descriptor.value = async function (\n this: unknown,\n ...args: unknown[]\n ): Promise<unknown> {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(\n new Error(errorMessage ?? `${methodName} timed out after ${timeoutMs}ms`)\n );\n }, timeoutMs);\n });\n\n return Promise.race([originalMethod.apply(this, args), timeoutPromise]);\n };\n\n return descriptor;\n };\n}\n","/**\n * @fileoverview 用于资源管理的可释放基类\n * @module melange/core/disposable\n * @description 提供一个基类用于管理可释放资源\n * 包含适当的清理和生命周期管理。\n */\n\n/**\n * 可释放对象的接口。\n * 实现此接口的对象可以被正确清理。\n */\nexport interface IDisposable {\n /**\n * 释放此对象持有的资源。\n */\n dispose(): void;\n\n /**\n * 此对象是否已被释放。\n */\n readonly isDisposed: boolean;\n}\n\n/**\n * 管理可释放资源的对象的抽象基类。\n *\n * @description\n * Disposable 类提供了一种管理模式,用于管理需要显式清理的资源。\n * 它跟踪释放状态并防止重复释放。\n *\n * @example\n * ```typescript\n * class DatabaseConnection extends Disposable {\n * private connection: Connection;\n *\n * constructor() {\n * super();\n * this.connection = createConnection();\n * // 注册清理\n * this.addDisposable({\n * dispose: () => this.connection.close()\n * });\n * }\n *\n * query(sql: string) {\n * this.ensureNotDisposed();\n * return this.connection.query(sql);\n * }\n * }\n *\n * // 使用\n * const db = new DatabaseConnection();\n * try {\n * await db.query('SELECT * FROM users');\n * } finally {\n * db.dispose();\n * }\n * ```\n */\nexport abstract class Disposable implements IDisposable {\n /**\n * 此对象是否已被释放\n */\n private _isDisposed: boolean = false;\n\n /**\n * 待清理的可释放对象列表\n */\n private readonly disposables: IDisposable[] = [];\n\n /**\n * 获取此对象是否已被释放。\n */\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n /**\n * 释放此对象和所有已注册的可释放对象。\n * 多次调用 dispose 是安全的(后续调用无效)。\n */\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n\n this._isDisposed = true;\n\n // 按相反顺序释放(后进先出)\n for (let i = this.disposables.length - 1; i >= 0; i--) {\n try {\n this.disposables[i]?.dispose();\n } catch (error) {\n // 记录日志但不抛出异常 - 继续释放其他资源\n // eslint-disable-next-line no-console\n console.error('Error during disposal:', error);\n }\n }\n\n this.disposables.length = 0;\n\n // 调用子类清理方法\n this.onDispose();\n }\n\n /**\n * 注册一个可释放对象,在此对象被释放时进行清理。\n *\n * @template T - 可释放对象类型\n * @param disposable - 要注册的可释放对象\n * @returns 相同的可释放对象,用于链式调用\n */\n protected addDisposable<T extends IDisposable>(disposable: T): T {\n if (this._isDisposed) {\n // 如果已经释放,则立即释放新的可释放对象\n disposable.dispose();\n } else {\n this.disposables.push(disposable);\n }\n return disposable;\n }\n\n /**\n * 注册一个清理函数,在此对象被释放时调用。\n *\n * @param fn - 清理函数\n */\n protected addDisposeFn(fn: () => void): void {\n this.addDisposable({ dispose: fn, isDisposed: false });\n }\n\n /**\n * 如果此对象已被释放则抛出错误。\n * 在不应在释放后调用的方法开头使用此函数。\n *\n * @throws Error 如果对象已被释放\n */\n protected ensureNotDisposed(): void {\n if (this._isDisposed) {\n throw new Error('Object has been disposed');\n }\n }\n\n /**\n * 在对象被释放时调用。\n * 在子类中重写以执行自定义清理。\n */\n protected onDispose(): void {\n // 默认实现不执行任何操作\n }\n}\n\n/**\n * 用于管理多个可释放对象的工具类。\n * 适用于收集应一起释放的可释放对象。\n *\n * @example\n * ```typescript\n * const disposables = new DisposableStore();\n *\n * // 添加各种可释放对象\n * disposables.add(eventListener1);\n * disposables.add(eventListener2);\n * disposables.add({ dispose: () => cleanupSomething() });\n *\n * // 一次性释放所有对象\n * disposables.dispose();\n * ```\n */\nexport class DisposableStore implements IDisposable {\n private readonly items: Set<IDisposable> = new Set();\n private _isDisposed: boolean = false;\n\n /**\n * 获取此存储是否已被释放。\n */\n public get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n /**\n * 向存储中添加可释放对象。\n *\n * @template T - 可释放对象类型\n * @param disposable - 要添加的可释放对象\n * @returns 相同的可释放对象,用于链式调用\n */\n public add<T extends IDisposable>(disposable: T): T {\n if (this._isDisposed) {\n disposable.dispose();\n } else {\n this.items.add(disposable);\n }\n return disposable;\n }\n\n /**\n * 从存储中移除可释放对象而不释放它。\n *\n * @param disposable - 要移除的可释放对象\n */\n public delete(disposable: IDisposable): void {\n this.items.delete(disposable);\n }\n\n /**\n * 释放存储中的所有项目并清空存储。\n */\n public dispose(): void {\n if (this._isDisposed) {\n return;\n }\n\n this._isDisposed = true;\n\n for (const item of this.items) {\n try {\n item.dispose();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error during disposal:', error);\n }\n }\n\n this.items.clear();\n }\n\n /**\n * 释放所有项目但保持存储活跃以接收新项目。\n */\n public clear(): void {\n for (const item of this.items) {\n try {\n item.dispose();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error during disposal:', error);\n }\n }\n this.items.clear();\n }\n\n /**\n * 获取存储中的项目数量。\n */\n public get size(): number {\n return this.items.size;\n }\n}\n\n/**\n * 从清理函数创建可释放对象。\n *\n * @param dispose - 清理函数\n * @returns 可释放对象\n */\nexport function toDisposable(dispose: () => void): IDisposable {\n return {\n dispose,\n isDisposed: false,\n };\n}\n\n/**\n * 将多个可释放对象组合成单个可释放对象。\n *\n * @param disposables - 要组合的可释放对象\n * @returns 一次性释放所有对象的单个可释放对象\n */\nexport function combineDisposables(...disposables: IDisposable[]): IDisposable {\n return {\n dispose: () => {\n for (const d of disposables) {\n d.dispose();\n }\n },\n isDisposed: false,\n };\n}\n"]}