@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,682 @@
1
+ 'use strict';
2
+
3
+ var chunkPK6SKIKE_cjs = require('./chunk-PK6SKIKE.cjs');
4
+
5
+ // src/core/events.ts
6
+ var EventEmitter = class {
7
+ static {
8
+ chunkPK6SKIKE_cjs.__name(this, "EventEmitter");
9
+ }
10
+ /**
11
+ * 事件名称到其监听器的映射
12
+ */
13
+ listeners = /* @__PURE__ */ new Map();
14
+ /**
15
+ * 订阅事件。
16
+ *
17
+ * @param event - 要订阅的事件名称
18
+ * @param handler - 事件发射时要调用的处理函数
19
+ * @returns 带有取消订阅方法的订阅对象
20
+ */
21
+ on(event, handler) {
22
+ return this.addListener(event, handler, false);
23
+ }
24
+ /**
25
+ * 仅订阅事件的一次发射。
26
+ * 监听器在被调用一次后自动移除。
27
+ *
28
+ * @param event - 要订阅的事件名称
29
+ * @param handler - 事件发射时要调用的处理函数
30
+ * @returns 带有取消订阅方法的订阅对象
31
+ */
32
+ once(event, handler) {
33
+ return this.addListener(event, handler, true);
34
+ }
35
+ /**
36
+ * 从事件中移除特定监听器。
37
+ *
38
+ * @param event - 事件名称
39
+ * @param handler - 要移除的处理函数
40
+ */
41
+ off(event, handler) {
42
+ const eventListeners = this.listeners.get(event);
43
+ if (eventListeners) {
44
+ const index = eventListeners.findIndex((entry) => entry.handler === handler);
45
+ if (index !== -1) {
46
+ eventListeners.splice(index, 1);
47
+ }
48
+ }
49
+ }
50
+ /**
51
+ * 发射带有给定载荷的事件。
52
+ * 所有订阅的监听器将同步调用。
53
+ *
54
+ * @param event - 要发射的事件名称
55
+ * @param payload - 事件载荷
56
+ */
57
+ emit(event, payload) {
58
+ const eventListeners = this.listeners.get(event);
59
+ if (!eventListeners) return;
60
+ const listenersCopy = [...eventListeners];
61
+ for (const entry of listenersCopy) {
62
+ entry.handler(payload);
63
+ if (entry.once) {
64
+ this.off(event, entry.handler);
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * 移除特定事件的所有监听器,或如果不指定事件则移除所有监听器。
70
+ *
71
+ * @param event - 可选的事件名称,用于清除监听器
72
+ */
73
+ removeAllListeners(event) {
74
+ if (event) {
75
+ this.listeners.delete(event);
76
+ } else {
77
+ this.listeners.clear();
78
+ }
79
+ }
80
+ /**
81
+ * 返回特定事件的监听器数量。
82
+ *
83
+ * @param event - 事件名称
84
+ * @returns 监听器数量
85
+ */
86
+ listenerCount(event) {
87
+ const eventListeners = this.listeners.get(event);
88
+ return eventListeners?.length ?? 0;
89
+ }
90
+ /**
91
+ * 返回所有具有监听器的事件名称。
92
+ *
93
+ * @returns 事件名称数组
94
+ */
95
+ eventNames() {
96
+ return Array.from(this.listeners.keys());
97
+ }
98
+ /**
99
+ * 添加监听器的内部方法。
100
+ */
101
+ addListener(event, handler, once) {
102
+ if (!this.listeners.has(event)) {
103
+ this.listeners.set(event, []);
104
+ }
105
+ const entry = { handler, once };
106
+ this.listeners.get(event).push(entry);
107
+ return {
108
+ unsubscribe: /* @__PURE__ */ chunkPK6SKIKE_cjs.__name(() => this.off(event, handler), "unsubscribe")
109
+ };
110
+ }
111
+ };
112
+
113
+ // src/core/container.ts
114
+ var Lifecycle = /* @__PURE__ */ ((Lifecycle2) => {
115
+ Lifecycle2["Transient"] = "transient";
116
+ Lifecycle2["Singleton"] = "singleton";
117
+ return Lifecycle2;
118
+ })(Lifecycle || {});
119
+ var INJECTABLE_METADATA = /* @__PURE__ */ Symbol("melange:injectable");
120
+ var INJECT_METADATA = /* @__PURE__ */ Symbol("melange:inject");
121
+ var Container = class _Container {
122
+ static {
123
+ chunkPK6SKIKE_cjs.__name(this, "Container");
124
+ }
125
+ /**
126
+ * 已注册依赖项的映射
127
+ */
128
+ registrations = /* @__PURE__ */ new Map();
129
+ /**
130
+ * 用于分层解析的父容器
131
+ */
132
+ parent;
133
+ /**
134
+ * 创建新的容器实例。
135
+ *
136
+ * @param parent - 用于分层解析的可选父容器
137
+ */
138
+ constructor(parent) {
139
+ this.parent = parent;
140
+ }
141
+ /**
142
+ * 使用工厂函数注册依赖项。
143
+ *
144
+ * @template T - 依赖项类型
145
+ * @param token - 用于标识依赖项的令牌
146
+ * @param factory - 创建依赖项的工厂函数
147
+ * @param lifecycle - 依赖项的生命周期(默认:Transient)
148
+ * @returns 容器实例,用于链式调用
149
+ */
150
+ register(token, factory, lifecycle = "transient" /* Transient */) {
151
+ this.registrations.set(token, {
152
+ factory,
153
+ lifecycle
154
+ });
155
+ return this;
156
+ }
157
+ /**
158
+ * 注册单例依赖项。
159
+ * 工厂函数只会被调用一次,之后返回相同的实例。
160
+ *
161
+ * @template T - 依赖项类型
162
+ * @param token - 用于标识依赖项的令牌
163
+ * @param factory - 创建依赖项的工厂函数
164
+ * @returns 容器实例,用于链式调用
165
+ */
166
+ registerSingleton(token, factory) {
167
+ return this.register(token, factory, "singleton" /* Singleton */);
168
+ }
169
+ /**
170
+ * 直接将值注册为单例。
171
+ *
172
+ * @template T - 值类型
173
+ * @param token - 用于标识依赖项的令牌
174
+ * @param value - 要注册的值
175
+ * @returns 容器实例,用于链式调用
176
+ */
177
+ registerValue(token, value) {
178
+ this.registrations.set(token, {
179
+ factory: /* @__PURE__ */ chunkPK6SKIKE_cjs.__name(() => value, "factory"),
180
+ lifecycle: "singleton" /* Singleton */,
181
+ instance: value
182
+ });
183
+ return this;
184
+ }
185
+ /**
186
+ * 将类注册为依赖项。
187
+ * 类的实例化会自动解析其依赖项。
188
+ *
189
+ * @template T - 类类型
190
+ * @param ClassConstructor - 要注册的类构造函数
191
+ * @param lifecycle - 依赖项的生命周期(默认:Transient)
192
+ * @returns 容器实例,用于链式调用
193
+ */
194
+ registerClass(ClassConstructor, lifecycle = "transient" /* Transient */) {
195
+ const factory = /* @__PURE__ */ chunkPK6SKIKE_cjs.__name((container) => {
196
+ const injectTokens = this.getInjectMetadata(ClassConstructor);
197
+ const dependencies = injectTokens.map((token) => container.resolve(token));
198
+ return new ClassConstructor(...dependencies);
199
+ }, "factory");
200
+ return this.register(ClassConstructor, factory, lifecycle);
201
+ }
202
+ /**
203
+ * 通过令牌解析依赖项。
204
+ *
205
+ * @template T - 依赖项类型
206
+ * @param token - 标识依赖项的令牌
207
+ * @returns 已解析的依赖项
208
+ * @throws Error 如果依赖项未注册
209
+ */
210
+ resolve(token) {
211
+ const registration = this.registrations.get(token);
212
+ if (!registration) {
213
+ if (this.parent) {
214
+ return this.parent.resolve(token);
215
+ }
216
+ throw new Error(`Dependency not registered: ${String(token)}`);
217
+ }
218
+ if (registration.lifecycle === "singleton" /* Singleton */) {
219
+ if (registration.instance === void 0) {
220
+ registration.instance = registration.factory(this);
221
+ }
222
+ return registration.instance;
223
+ }
224
+ return registration.factory(this);
225
+ }
226
+ /**
227
+ * 检查依赖项是否已注册。
228
+ *
229
+ * @param token - 要检查的令牌
230
+ * @returns 如果依赖项已注册则返回 true
231
+ */
232
+ has(token) {
233
+ if (this.registrations.has(token)) {
234
+ return true;
235
+ }
236
+ return this.parent?.has(token) ?? false;
237
+ }
238
+ /**
239
+ * 移除依赖项注册。
240
+ *
241
+ * @param token - 要移除的令牌
242
+ * @returns 如果注册已被移除则返回 true
243
+ */
244
+ unregister(token) {
245
+ return this.registrations.delete(token);
246
+ }
247
+ /**
248
+ * 清除所有注册。
249
+ */
250
+ clear() {
251
+ this.registrations.clear();
252
+ }
253
+ /**
254
+ * 创建子容器。
255
+ * 子容器从父容器继承注册。
256
+ *
257
+ * @returns 新的子容器
258
+ */
259
+ createChild() {
260
+ return new _Container(this);
261
+ }
262
+ /**
263
+ * 获取类的注入元数据。
264
+ */
265
+ getInjectMetadata(target) {
266
+ const reflect = Reflect;
267
+ return reflect.getMetadata?.(INJECT_METADATA, target) ?? [];
268
+ }
269
+ };
270
+ var globalContainer = new Container();
271
+ function Injectable() {
272
+ return function(target) {
273
+ const reflect = Reflect;
274
+ reflect.defineMetadata?.(INJECTABLE_METADATA, true, target);
275
+ return target;
276
+ };
277
+ }
278
+ chunkPK6SKIKE_cjs.__name(Injectable, "Injectable");
279
+ function Inject(token) {
280
+ return function(target, _propertyKey, parameterIndex) {
281
+ const reflect = Reflect;
282
+ const existingTokens = reflect.getMetadata?.(INJECT_METADATA, target) ?? [];
283
+ existingTokens[parameterIndex] = token;
284
+ reflect.defineMetadata?.(INJECT_METADATA, existingTokens, target);
285
+ };
286
+ }
287
+ chunkPK6SKIKE_cjs.__name(Inject, "Inject");
288
+ function Singleton() {
289
+ return function(target) {
290
+ const reflect = Reflect;
291
+ reflect.defineMetadata?.(INJECTABLE_METADATA, true, target);
292
+ reflect.defineMetadata?.("melange:singleton", true, target);
293
+ return target;
294
+ };
295
+ }
296
+ chunkPK6SKIKE_cjs.__name(Singleton, "Singleton");
297
+
298
+ // src/core/decorators.ts
299
+ function Memoize(keyFn) {
300
+ return function(_target, _propertyKey, descriptor) {
301
+ const originalMethod = descriptor.value;
302
+ const cache = /* @__PURE__ */ new Map();
303
+ descriptor.value = function(...args) {
304
+ const key = keyFn ? keyFn(...args) : JSON.stringify(args);
305
+ if (cache.has(key)) {
306
+ return cache.get(key);
307
+ }
308
+ const result = originalMethod.apply(this, args);
309
+ cache.set(key, result);
310
+ return result;
311
+ };
312
+ return descriptor;
313
+ };
314
+ }
315
+ chunkPK6SKIKE_cjs.__name(Memoize, "Memoize");
316
+ function Debounce(waitMs) {
317
+ return function(_target, _propertyKey, descriptor) {
318
+ const originalMethod = descriptor.value;
319
+ let timeoutId = null;
320
+ descriptor.value = function(...args) {
321
+ if (timeoutId) {
322
+ clearTimeout(timeoutId);
323
+ }
324
+ timeoutId = setTimeout(() => {
325
+ originalMethod.apply(this, args);
326
+ timeoutId = null;
327
+ }, waitMs);
328
+ };
329
+ return descriptor;
330
+ };
331
+ }
332
+ chunkPK6SKIKE_cjs.__name(Debounce, "Debounce");
333
+ function Throttle(limitMs) {
334
+ return function(_target, _propertyKey, descriptor) {
335
+ const originalMethod = descriptor.value;
336
+ let lastCall = 0;
337
+ descriptor.value = function(...args) {
338
+ const now = Date.now();
339
+ if (now - lastCall >= limitMs) {
340
+ lastCall = now;
341
+ return originalMethod.apply(this, args);
342
+ }
343
+ return void 0;
344
+ };
345
+ return descriptor;
346
+ };
347
+ }
348
+ chunkPK6SKIKE_cjs.__name(Throttle, "Throttle");
349
+ function Log(options = {}) {
350
+ const { logArgs = false, logResult = false, prefix = "" } = options;
351
+ return function(_target, propertyKey, descriptor) {
352
+ const originalMethod = descriptor.value;
353
+ const methodName = String(propertyKey);
354
+ descriptor.value = function(...args) {
355
+ const logPrefix = prefix ? `[${prefix}] ` : "";
356
+ if (logArgs) {
357
+ console.log(`${logPrefix}Entering ${methodName} with args:`, args);
358
+ } else {
359
+ console.log(`${logPrefix}Entering ${methodName}`);
360
+ }
361
+ try {
362
+ const result = originalMethod.apply(this, args);
363
+ if (result instanceof Promise) {
364
+ return result.then((asyncResult) => {
365
+ if (logResult) {
366
+ console.log(`${logPrefix}Exiting ${methodName} with result:`, asyncResult);
367
+ } else {
368
+ console.log(`${logPrefix}Exiting ${methodName}`);
369
+ }
370
+ return asyncResult;
371
+ }).catch((error) => {
372
+ console.error(`${logPrefix}${methodName} threw error:`, error);
373
+ throw error;
374
+ });
375
+ }
376
+ if (logResult) {
377
+ console.log(`${logPrefix}Exiting ${methodName} with result:`, result);
378
+ } else {
379
+ console.log(`${logPrefix}Exiting ${methodName}`);
380
+ }
381
+ return result;
382
+ } catch (error) {
383
+ console.error(`${logPrefix}${methodName} threw error:`, error);
384
+ throw error;
385
+ }
386
+ };
387
+ return descriptor;
388
+ };
389
+ }
390
+ chunkPK6SKIKE_cjs.__name(Log, "Log");
391
+ function Validate(validator) {
392
+ return function(_target, _propertyKey, descriptor) {
393
+ const originalMethod = descriptor.value;
394
+ descriptor.value = function(...args) {
395
+ validator(...args);
396
+ return originalMethod.apply(this, args);
397
+ };
398
+ return descriptor;
399
+ };
400
+ }
401
+ chunkPK6SKIKE_cjs.__name(Validate, "Validate");
402
+ function Deprecated(message) {
403
+ return function(_target, propertyKey, descriptor) {
404
+ const originalMethod = descriptor.value;
405
+ const methodName = String(propertyKey);
406
+ const warningMessage = message ?? `${methodName} is deprecated`;
407
+ descriptor.value = function(...args) {
408
+ console.warn(`[DEPRECATED] ${warningMessage}`);
409
+ return originalMethod.apply(this, args);
410
+ };
411
+ return descriptor;
412
+ };
413
+ }
414
+ chunkPK6SKIKE_cjs.__name(Deprecated, "Deprecated");
415
+ function Sealed() {
416
+ return function(target) {
417
+ Object.seal(target);
418
+ Object.seal(target.prototype);
419
+ return target;
420
+ };
421
+ }
422
+ chunkPK6SKIKE_cjs.__name(Sealed, "Sealed");
423
+ function Frozen() {
424
+ return function(target) {
425
+ Object.freeze(target);
426
+ Object.freeze(target.prototype);
427
+ return target;
428
+ };
429
+ }
430
+ chunkPK6SKIKE_cjs.__name(Frozen, "Frozen");
431
+ function Bind() {
432
+ return function(_target, propertyKey, descriptor) {
433
+ const originalMethod = descriptor.value;
434
+ return {
435
+ configurable: true,
436
+ get() {
437
+ const bound = originalMethod.bind(this);
438
+ Object.defineProperty(this, propertyKey, {
439
+ value: bound,
440
+ configurable: true,
441
+ writable: true
442
+ });
443
+ return bound;
444
+ }
445
+ };
446
+ };
447
+ }
448
+ chunkPK6SKIKE_cjs.__name(Bind, "Bind");
449
+ function Retry(maxRetries, delayMs = 0) {
450
+ return function(_target, _propertyKey, descriptor) {
451
+ const originalMethod = descriptor.value;
452
+ descriptor.value = async function(...args) {
453
+ let lastError;
454
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
455
+ try {
456
+ return await originalMethod.apply(this, args);
457
+ } catch (error) {
458
+ lastError = error;
459
+ if (attempt < maxRetries && delayMs > 0) {
460
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
461
+ }
462
+ }
463
+ }
464
+ throw lastError;
465
+ };
466
+ return descriptor;
467
+ };
468
+ }
469
+ chunkPK6SKIKE_cjs.__name(Retry, "Retry");
470
+ function Timeout(timeoutMs, errorMessage) {
471
+ return function(_target, propertyKey, descriptor) {
472
+ const originalMethod = descriptor.value;
473
+ const methodName = String(propertyKey);
474
+ descriptor.value = async function(...args) {
475
+ const timeoutPromise = new Promise((_, reject) => {
476
+ setTimeout(() => {
477
+ reject(
478
+ new Error(errorMessage ?? `${methodName} timed out after ${timeoutMs}ms`)
479
+ );
480
+ }, timeoutMs);
481
+ });
482
+ return Promise.race([originalMethod.apply(this, args), timeoutPromise]);
483
+ };
484
+ return descriptor;
485
+ };
486
+ }
487
+ chunkPK6SKIKE_cjs.__name(Timeout, "Timeout");
488
+
489
+ // src/core/disposable.ts
490
+ var Disposable = class {
491
+ static {
492
+ chunkPK6SKIKE_cjs.__name(this, "Disposable");
493
+ }
494
+ /**
495
+ * 此对象是否已被释放
496
+ */
497
+ _isDisposed = false;
498
+ /**
499
+ * 待清理的可释放对象列表
500
+ */
501
+ disposables = [];
502
+ /**
503
+ * 获取此对象是否已被释放。
504
+ */
505
+ get isDisposed() {
506
+ return this._isDisposed;
507
+ }
508
+ /**
509
+ * 释放此对象和所有已注册的可释放对象。
510
+ * 多次调用 dispose 是安全的(后续调用无效)。
511
+ */
512
+ dispose() {
513
+ if (this._isDisposed) {
514
+ return;
515
+ }
516
+ this._isDisposed = true;
517
+ for (let i = this.disposables.length - 1; i >= 0; i--) {
518
+ try {
519
+ this.disposables[i]?.dispose();
520
+ } catch (error) {
521
+ console.error("Error during disposal:", error);
522
+ }
523
+ }
524
+ this.disposables.length = 0;
525
+ this.onDispose();
526
+ }
527
+ /**
528
+ * 注册一个可释放对象,在此对象被释放时进行清理。
529
+ *
530
+ * @template T - 可释放对象类型
531
+ * @param disposable - 要注册的可释放对象
532
+ * @returns 相同的可释放对象,用于链式调用
533
+ */
534
+ addDisposable(disposable) {
535
+ if (this._isDisposed) {
536
+ disposable.dispose();
537
+ } else {
538
+ this.disposables.push(disposable);
539
+ }
540
+ return disposable;
541
+ }
542
+ /**
543
+ * 注册一个清理函数,在此对象被释放时调用。
544
+ *
545
+ * @param fn - 清理函数
546
+ */
547
+ addDisposeFn(fn) {
548
+ this.addDisposable({ dispose: fn, isDisposed: false });
549
+ }
550
+ /**
551
+ * 如果此对象已被释放则抛出错误。
552
+ * 在不应在释放后调用的方法开头使用此函数。
553
+ *
554
+ * @throws Error 如果对象已被释放
555
+ */
556
+ ensureNotDisposed() {
557
+ if (this._isDisposed) {
558
+ throw new Error("Object has been disposed");
559
+ }
560
+ }
561
+ /**
562
+ * 在对象被释放时调用。
563
+ * 在子类中重写以执行自定义清理。
564
+ */
565
+ onDispose() {
566
+ }
567
+ };
568
+ var DisposableStore = class {
569
+ static {
570
+ chunkPK6SKIKE_cjs.__name(this, "DisposableStore");
571
+ }
572
+ items = /* @__PURE__ */ new Set();
573
+ _isDisposed = false;
574
+ /**
575
+ * 获取此存储是否已被释放。
576
+ */
577
+ get isDisposed() {
578
+ return this._isDisposed;
579
+ }
580
+ /**
581
+ * 向存储中添加可释放对象。
582
+ *
583
+ * @template T - 可释放对象类型
584
+ * @param disposable - 要添加的可释放对象
585
+ * @returns 相同的可释放对象,用于链式调用
586
+ */
587
+ add(disposable) {
588
+ if (this._isDisposed) {
589
+ disposable.dispose();
590
+ } else {
591
+ this.items.add(disposable);
592
+ }
593
+ return disposable;
594
+ }
595
+ /**
596
+ * 从存储中移除可释放对象而不释放它。
597
+ *
598
+ * @param disposable - 要移除的可释放对象
599
+ */
600
+ delete(disposable) {
601
+ this.items.delete(disposable);
602
+ }
603
+ /**
604
+ * 释放存储中的所有项目并清空存储。
605
+ */
606
+ dispose() {
607
+ if (this._isDisposed) {
608
+ return;
609
+ }
610
+ this._isDisposed = true;
611
+ for (const item of this.items) {
612
+ try {
613
+ item.dispose();
614
+ } catch (error) {
615
+ console.error("Error during disposal:", error);
616
+ }
617
+ }
618
+ this.items.clear();
619
+ }
620
+ /**
621
+ * 释放所有项目但保持存储活跃以接收新项目。
622
+ */
623
+ clear() {
624
+ for (const item of this.items) {
625
+ try {
626
+ item.dispose();
627
+ } catch (error) {
628
+ console.error("Error during disposal:", error);
629
+ }
630
+ }
631
+ this.items.clear();
632
+ }
633
+ /**
634
+ * 获取存储中的项目数量。
635
+ */
636
+ get size() {
637
+ return this.items.size;
638
+ }
639
+ };
640
+ function toDisposable(dispose) {
641
+ return {
642
+ dispose,
643
+ isDisposed: false
644
+ };
645
+ }
646
+ chunkPK6SKIKE_cjs.__name(toDisposable, "toDisposable");
647
+ function combineDisposables(...disposables) {
648
+ return {
649
+ dispose: /* @__PURE__ */ chunkPK6SKIKE_cjs.__name(() => {
650
+ for (const d of disposables) {
651
+ d.dispose();
652
+ }
653
+ }, "dispose"),
654
+ isDisposed: false
655
+ };
656
+ }
657
+ chunkPK6SKIKE_cjs.__name(combineDisposables, "combineDisposables");
658
+
659
+ exports.Bind = Bind;
660
+ exports.Container = Container;
661
+ exports.Debounce = Debounce;
662
+ exports.Deprecated = Deprecated;
663
+ exports.Disposable = Disposable;
664
+ exports.DisposableStore = DisposableStore;
665
+ exports.EventEmitter = EventEmitter;
666
+ exports.Frozen = Frozen;
667
+ exports.Inject = Inject;
668
+ exports.Injectable = Injectable;
669
+ exports.Lifecycle = Lifecycle;
670
+ exports.Log = Log;
671
+ exports.Memoize = Memoize;
672
+ exports.Retry = Retry;
673
+ exports.Sealed = Sealed;
674
+ exports.Singleton = Singleton;
675
+ exports.Throttle = Throttle;
676
+ exports.Timeout = Timeout;
677
+ exports.Validate = Validate;
678
+ exports.combineDisposables = combineDisposables;
679
+ exports.globalContainer = globalContainer;
680
+ exports.toDisposable = toDisposable;
681
+ //# sourceMappingURL=chunk-Q7XG6YN6.cjs.map
682
+ //# sourceMappingURL=chunk-Q7XG6YN6.cjs.map