@xylabs/base 5.0.82 → 5.0.84

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.
package/README.md CHANGED
@@ -45,6 +45,8 @@ Base functionality used throughout XY Labs TypeScript/JavaScript libraries
45
45
 
46
46
  ***
47
47
 
48
+ Abstract base class providing logging, telemetry, and global instance tracking with WeakRef-based GC.
49
+
48
50
  ## Extended by
49
51
 
50
52
  - [`UniqueBase`](#UniqueBase)
@@ -55,6 +57,8 @@ Base functionality used throughout XY Labs TypeScript/JavaScript libraries
55
57
 
56
58
  `TParams` *extends* [`BaseParams`](#../type-aliases/BaseParams) = [`BaseParams`](#../type-aliases/BaseParams)
57
59
 
60
+ The parameter type, extending BaseParams
61
+
58
62
  ## Constructors
59
63
 
60
64
  ### Constructor
@@ -353,6 +357,8 @@ static stopHistory(): void;
353
357
 
354
358
  ***
355
359
 
360
+ Base class that registers itself as globally unique, preventing duplicate module instances.
361
+
356
362
  ## Extends
357
363
 
358
364
  - [`Base`](#Base)\<`TParams`\>
@@ -763,6 +769,8 @@ static stopHistory(): void;
763
769
  function disableGloballyUnique(): void;
764
770
  ```
765
771
 
772
+ Disables global uniqueness checks, allowing duplicate registrations without throwing.
773
+
766
774
  ## Returns
767
775
 
768
776
  `void`
@@ -780,24 +788,35 @@ function globallyUnique(
780
788
  domain?): string;
781
789
  ```
782
790
 
791
+ Registers a value as globally unique under the given name and domain.
792
+ Throws if a different value is already registered under the same key.
793
+
783
794
  ## Parameters
784
795
 
785
796
  ### name
786
797
 
798
+ The unique name or symbol
799
+
787
800
  `string` | `symbol`
788
801
 
789
802
  ### value
790
803
 
791
804
  `unknown`
792
805
 
806
+ The value to register
807
+
793
808
  ### domain?
794
809
 
795
810
  `string` = `'global'`
796
811
 
812
+ The namespace domain (default 'global')
813
+
797
814
  ## Returns
798
815
 
799
816
  `string`
800
817
 
818
+ The fully qualified unique name
819
+
801
820
  ### type-aliases
802
821
 
803
822
  ### <a id="BaseClassName"></a>BaseClassName
@@ -810,6 +829,8 @@ function globallyUnique(
810
829
  type BaseClassName = string & object;
811
830
  ```
812
831
 
832
+ Branded string type representing a class name used for global instance tracking.
833
+
813
834
  ## Type Declaration
814
835
 
815
836
  ### \_\_baseClassName
@@ -828,6 +849,8 @@ __baseClassName: true;
828
849
  type BaseParams<TAdditionalParams> = TAdditionalParams & BaseParamsFields;
829
850
  ```
830
851
 
852
+ Parameters for constructing a Base instance, combining BaseParamsFields with optional additional params.
853
+
831
854
  ## Type Parameters
832
855
 
833
856
  ### TAdditionalParams
@@ -844,6 +867,8 @@ type BaseParams<TAdditionalParams> = TAdditionalParams & BaseParamsFields;
844
867
  type BaseParamsFields = object;
845
868
  ```
846
869
 
870
+ Common parameter fields available to all Base instances (logger, meter, tracer).
871
+
847
872
  ## Properties
848
873
 
849
874
  ### logger?
@@ -1,15 +1,22 @@
1
1
  import type { Meter, MeterProvider, Tracer, TracerProvider } from '@opentelemetry/api';
2
2
  import type { Logger } from '@xylabs/logger';
3
3
  import type { EmptyObject } from '@xylabs/object';
4
+ /** Branded string type representing a class name used for global instance tracking. */
4
5
  export type BaseClassName = string & {
5
6
  __baseClassName: true;
6
7
  };
8
+ /** Common parameter fields available to all Base instances (logger, meter, tracer). */
7
9
  export type BaseParamsFields = {
8
10
  logger?: Logger;
9
11
  meterProvider?: MeterProvider;
10
12
  traceProvider?: TracerProvider;
11
13
  };
14
+ /** Parameters for constructing a Base instance, combining BaseParamsFields with optional additional params. */
12
15
  export type BaseParams<TAdditionalParams extends EmptyObject = EmptyObject> = TAdditionalParams & BaseParamsFields;
16
+ /**
17
+ * Abstract base class providing logging, telemetry, and global instance tracking with WeakRef-based GC.
18
+ * @typeParam TParams - The parameter type, extending BaseParams
19
+ */
13
20
  export declare abstract class Base<TParams extends BaseParams = BaseParams> {
14
21
  static defaultLogger?: Logger;
15
22
  static readonly globalInstances: Record<BaseClassName, WeakRef<Base>[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"Base.d.ts","sourceRoot":"","sources":["../../src/Base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EAAE,MAAM,EAAE,cAAc,EACtC,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAQjD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,eAAe,EAAE,IAAI,CAAA;CAAE,CAAA;AAE9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,aAAa,CAAC,EAAE,cAAc,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,UAAU,CAAC,iBAAiB,SAAS,WAAW,GAAG,WAAW,IAAI,iBAAiB,GAAG,gBAAgB,CAAA;AAElH,8BAAsB,IAAI,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU;IAChE,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC7B,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAK;IAC5E,MAAM,CAAC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAK;IACjF,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA2B;IAC1D,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAA+B;IAC9D,OAAO,CAAC,MAAM,CAAC,OAAO,CAAI;IAC1B,OAAO,CAAC,MAAM,CAAC,eAAe,CAAmB;IACjD,OAAO,CAAC,OAAO,CAAqB;gBAExB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;IAMvC,MAAM,KAAK,eAAe,IAIQ,MAAM,CAFvC;IAED,MAAM,KAAK,eAAe,CAAC,KAAK,EAAE,MAAM,EAGvC;IAED,MAAM,KAAK,WAAW,IAIQ,MAAM,CAFnC;IAED,MAAM,KAAK,WAAW,CAAC,KAAK,EAAE,MAAM,EAGnC;IAED,MAAM,KAAK,cAAc,IAIQ,MAAM,CAFtC;IAED,MAAM,KAAK,cAAc,CAAC,KAAK,EAAE,MAAM,EAEtC;IAED,MAAM,KAAK,eAAe,WAEzB;IAED,IAAI,MAAM,uBAET;IAED,IAAI,KAAK,IAAI,KAAK,GAAG,SAAS,CAE7B;IAED,IAAI,MAAM,wBAET;IAED,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAChC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAWzC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM;IAItD,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;IAOtD,MAAM,CAAC,YAAY,IAAI,IAAI;IAe3B,MAAM,CAAC,WAAW,IAAI,IAAI;IAO1B,OAAO,CAAC,MAAM,CAAC,YAAY;IAQ3B,OAAO,CAAC,MAAM,CAAC,KAAK;IAMpB,OAAO,CAAC,MAAM,CAAC,OAAO;IAKtB,OAAO,CAAC,cAAc;CAMvB"}
1
+ {"version":3,"file":"Base.d.ts","sourceRoot":"","sources":["../../src/Base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EAAE,MAAM,EAAE,cAAc,EACtC,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAQjD,uFAAuF;AACvF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,eAAe,EAAE,IAAI,CAAA;CAAE,CAAA;AAE9D,uFAAuF;AACvF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,aAAa,CAAC,EAAE,cAAc,CAAA;CAC/B,CAAA;AAED,+GAA+G;AAC/G,MAAM,MAAM,UAAU,CAAC,iBAAiB,SAAS,WAAW,GAAG,WAAW,IAAI,iBAAiB,GAAG,gBAAgB,CAAA;AAElH;;;GAGG;AACH,8BAAsB,IAAI,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU;IAChE,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC7B,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAK;IAC5E,MAAM,CAAC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAK;IACjF,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA2B;IAC1D,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAA+B;IAC9D,OAAO,CAAC,MAAM,CAAC,OAAO,CAAI;IAC1B,OAAO,CAAC,MAAM,CAAC,eAAe,CAAmB;IACjD,OAAO,CAAC,OAAO,CAAqB;gBAExB,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;IAMvC,MAAM,KAAK,eAAe,IAIQ,MAAM,CAFvC;IAED,MAAM,KAAK,eAAe,CAAC,KAAK,EAAE,MAAM,EAGvC;IAED,MAAM,KAAK,WAAW,IAIQ,MAAM,CAFnC;IAED,MAAM,KAAK,WAAW,CAAC,KAAK,EAAE,MAAM,EAGnC;IAED,MAAM,KAAK,cAAc,IAIQ,MAAM,CAFtC;IAED,MAAM,KAAK,cAAc,CAAC,KAAK,EAAE,MAAM,EAEtC;IAED,MAAM,KAAK,eAAe,WAEzB;IAED,IAAI,MAAM,uBAET;IAED,IAAI,KAAK,IAAI,KAAK,GAAG,SAAS,CAE7B;IAED,IAAI,MAAM,wBAET;IAED,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAChC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAWzC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM;IAItD,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;IAOtD,MAAM,CAAC,YAAY,IAAI,IAAI;IAe3B,MAAM,CAAC,WAAW,IAAI,IAAI;IAO1B,OAAO,CAAC,MAAM,CAAC,YAAY;IAQ3B,OAAO,CAAC,MAAM,CAAC,KAAK;IAMpB,OAAO,CAAC,MAAM,CAAC,OAAO;IAKtB,OAAO,CAAC,cAAc;CAMvB"}
@@ -1,5 +1,6 @@
1
1
  import type { BaseParams } from './Base.ts';
2
2
  import { Base } from './Base.ts';
3
+ /** Base class that registers itself as globally unique, preventing duplicate module instances. */
3
4
  export declare abstract class UniqueBase<TParams extends BaseParams = BaseParams> extends Base<TParams> {
4
5
  static readonly uniqueDomain = "xy";
5
6
  static readonly uniqueName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"UniqueBase.d.ts","sourceRoot":"","sources":["../../src/UniqueBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,8BAAsB,UAAU,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,CAAE,SAAQ,IAAI,CAAC,OAAO,CAAC;IAC7F,MAAM,CAAC,QAAQ,CAAC,YAAY,QAAO;IACnC,MAAM,CAAC,QAAQ,CAAC,UAAU,SAAqD;IAE/E,MAAM,CAAC,QAAQ,CAAC,aAAa,SAAyC;gBAC1D,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;CAGxC"}
1
+ {"version":3,"file":"UniqueBase.d.ts","sourceRoot":"","sources":["../../src/UniqueBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,kGAAkG;AAClG,8BAAsB,UAAU,CAAC,OAAO,SAAS,UAAU,GAAG,UAAU,CAAE,SAAQ,IAAI,CAAC,OAAO,CAAC;IAC7F,MAAM,CAAC,QAAQ,CAAC,YAAY,QAAO;IACnC,MAAM,CAAC,QAAQ,CAAC,UAAU,SAAqD;IAE/E,MAAM,CAAC,QAAQ,CAAC,aAAa,SAAyC;gBAC1D,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;CAGxC"}
@@ -4,6 +4,15 @@ declare global {
4
4
  uniqueDisabled?: boolean;
5
5
  };
6
6
  }
7
+ /** Disables global uniqueness checks, allowing duplicate registrations without throwing. */
7
8
  export declare const disableGloballyUnique: () => void;
9
+ /**
10
+ * Registers a value as globally unique under the given name and domain.
11
+ * Throws if a different value is already registered under the same key.
12
+ * @param name - The unique name or symbol
13
+ * @param value - The value to register
14
+ * @param domain - The namespace domain (default 'global')
15
+ * @returns The fully qualified unique name
16
+ */
8
17
  export declare const globallyUnique: (name: string | symbol, value: unknown, domain?: string) => string;
9
18
  //# sourceMappingURL=globallyUnique.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"globallyUnique.d.ts","sourceRoot":"","sources":["../../src/globallyUnique.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,MAAM,EAAE;QACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;CACF;AAOD,eAAO,MAAM,qBAAqB,YAEjC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,OAAO,EAAE,eAAiB,WAgBtF,CAAA"}
1
+ {"version":3,"file":"globallyUnique.d.ts","sourceRoot":"","sources":["../../src/globallyUnique.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,MAAM,EAAE;QACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/B,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;CACF;AAOD,4FAA4F;AAC5F,eAAO,MAAM,qBAAqB,YAEjC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,OAAO,EAAE,eAAiB,WAgBtF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Base.ts","../../src/globallyUnique.ts","../../src/UniqueBase.ts"],"sourcesContent":["import type {\n Meter,\n MeterProvider, Tracer, TracerProvider,\n} from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport type { EmptyObject } from '@xylabs/object'\n\nconst DEFAULT_HISTORY_INTERVAL = 1000 * 5\nconst DEFAULT_HISTORY_TIME = 60 * 60 * 1000\nconst MAX_GC_FREQUENCY = 1000 * 60\nconst MIN_GC_FREQUENCY = 1000\nconst MIN_HISTORY_INTERVAL = 1000\n\nexport type BaseClassName = string & { __baseClassName: true }\n\nexport type BaseParamsFields = {\n logger?: Logger\n meterProvider?: MeterProvider\n traceProvider?: TracerProvider\n}\n\nexport type BaseParams<TAdditionalParams extends EmptyObject = EmptyObject> = TAdditionalParams & BaseParamsFields\n\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n static readonly globalInstances: Record<BaseClassName, WeakRef<Base>[]> = {}\n static readonly globalInstancesCountHistory: Record<BaseClassName, number[]> = {}\n private static _historyInterval = DEFAULT_HISTORY_INTERVAL\n private static _historyTime = DEFAULT_HISTORY_TIME\n private static _historyTimeout?: ReturnType<typeof setTimeout>\n private static _lastGC = 0\n private static _maxGcFrequency = MAX_GC_FREQUENCY\n private _params: BaseParams<TParams>\n\n constructor(params: BaseParams<TParams>) {\n this._params = params\n params?.logger?.debug(`Base constructed [${Object(this).name}]`)\n this.recordInstance()\n }\n\n static get historyInterval() {\n return this._historyInterval\n }\n\n static set historyInterval(value: number) {\n assertEx(value <= this.historyTime, () => `historyInterval [${value}] must be less than or equal to historyTime [${this.historyTime}]`)\n this._historyInterval = Math.max(value, MIN_HISTORY_INTERVAL)\n }\n\n static get historyTime() {\n return this._historyTime\n }\n\n static set historyTime(value: number) {\n assertEx(value >= this.historyInterval, () => `historyTime [${value}] must be greater than or equal to historyInterval [${this.historyInterval}]`)\n this._historyInterval = value\n }\n\n static get maxGcFrequency() {\n return this._maxGcFrequency\n }\n\n static set maxGcFrequency(value: number) {\n this._maxGcFrequency = Math.max(value, MIN_GC_FREQUENCY)\n }\n\n static get maxHistoryDepth() {\n return Math.floor(this.historyTime / this.historyInterval)\n }\n\n get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n\n get meter(): Meter | undefined {\n return this.params?.meterProvider?.getMeter(this.constructor.name)\n }\n\n get params() {\n return this._params\n }\n\n get tracer(): Tracer | undefined {\n return this.params?.traceProvider?.getTracer(this.constructor.name)\n }\n\n static gc(force?: boolean): void\n static gc(className: BaseClassName): void\n static gc(classNameOrForce: BaseClassName | boolean = false): void {\n if (typeof classNameOrForce === 'string') {\n this.gcClass(classNameOrForce)\n } else {\n if (classNameOrForce || Date.now() - this._lastGC > this._maxGcFrequency) {\n this.gcAll()\n }\n }\n }\n\n static instanceCount(className: BaseClassName): number {\n return this.globalInstances[className]?.length ?? 0\n }\n\n static instanceCounts(): Record<BaseClassName, number> {\n this.gc()\n const result: Record<BaseClassName, number> = {}\n for (const [className, instances] of Object.entries(this.globalInstances)) result[className as BaseClassName] = instances.length\n return result\n }\n\n static startHistory(): void {\n if (this._historyTimeout) {\n this.stopHistory()\n }\n\n const timeoutHandler = () => {\n if (this._historyTimeout) {\n this.addToHistory()\n this._historyTimeout = setTimeout(timeoutHandler, this.historyInterval)\n }\n }\n\n this._historyTimeout = setTimeout(timeoutHandler, this.historyInterval)\n }\n\n static stopHistory(): void {\n if (this._historyTimeout) {\n clearTimeout(this._historyTimeout)\n this._historyTimeout = undefined\n }\n }\n\n private static addToHistory() {\n const counts = this.instanceCounts()\n for (const className of Object.keys(this.globalInstances) as BaseClassName[]) {\n this.globalInstancesCountHistory[className] = this.globalInstancesCountHistory[className]?.slice(-this.maxHistoryDepth) ?? []\n this.globalInstancesCountHistory[className].push(counts[className])\n }\n }\n\n private static gcAll() {\n for (const className of Object.keys(this.globalInstances) as BaseClassName[]) {\n this.gcClass(className)\n }\n }\n\n private static gcClass(className: BaseClassName) {\n // remove all the weak refs that are now empty\n this.globalInstances[className] = this.globalInstances[className]?.filter(ref => ref.deref() !== null) ?? []\n }\n\n private recordInstance() {\n const baseClassName = this.constructor.name as BaseClassName\n const instanceArray = Base.globalInstances[baseClassName] ?? []\n instanceArray.push(new WeakRef(this))\n Base.globalInstances[baseClassName] = instanceArray\n }\n}\n","declare global {\n var xylabs: {\n unique: Record<string, unknown>\n uniqueDisabled?: boolean\n }\n}\n\nconst xyoGlobal = () => {\n globalThis.xylabs = globalThis.xylabs ?? {}\n return globalThis.xylabs\n}\n\nexport const disableGloballyUnique = () => {\n xyoGlobal().uniqueDisabled = true\n}\n\nexport const globallyUnique = (name: string | symbol, value: unknown, domain = 'global') => {\n const uniqueName = domain === 'bundle' ? [domain, name].join(':') : [domain, import.meta.url, name].join(':')\n if (!xyoGlobal().uniqueDisabled) {\n const xylabs = globalThis.xylabs = globalThis.xylabs ?? {}\n const unique = (xylabs.unique = xylabs.unique ?? {})\n if (unique[uniqueName] === undefined) {\n unique[uniqueName] = value\n } else {\n if (unique[uniqueName] !== value) {\n throw new Error(\n `Global unique item ${uniqueName} already defined. Make sure you are not importing two versions of the package that contains this item`,\n )\n }\n }\n }\n return uniqueName\n}\n","import type { BaseParams } from './Base.ts'\nimport { Base } from './Base.ts'\nimport { globallyUnique } from './globallyUnique.ts'\n\nexport abstract class UniqueBase<TParams extends BaseParams = BaseParams> extends Base<TParams> {\n static readonly uniqueDomain = 'xy'\n static readonly uniqueName = globallyUnique(this.name, this, this.uniqueDomain)\n // TODO: Remove xyo domain version when old xyo versions are no longer needed\n static readonly uniqueNameXyo = globallyUnique(this.name, this, 'xyo')\n constructor(params: BaseParams<TParams>) {\n super(params)\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Base.ts","../../src/globallyUnique.ts","../../src/UniqueBase.ts"],"sourcesContent":["import type {\n Meter,\n MeterProvider, Tracer, TracerProvider,\n} from '@opentelemetry/api'\nimport { assertEx } from '@xylabs/assert'\nimport type { Logger } from '@xylabs/logger'\nimport type { EmptyObject } from '@xylabs/object'\n\nconst DEFAULT_HISTORY_INTERVAL = 1000 * 5\nconst DEFAULT_HISTORY_TIME = 60 * 60 * 1000\nconst MAX_GC_FREQUENCY = 1000 * 60\nconst MIN_GC_FREQUENCY = 1000\nconst MIN_HISTORY_INTERVAL = 1000\n\n/** Branded string type representing a class name used for global instance tracking. */\nexport type BaseClassName = string & { __baseClassName: true }\n\n/** Common parameter fields available to all Base instances (logger, meter, tracer). */\nexport type BaseParamsFields = {\n logger?: Logger\n meterProvider?: MeterProvider\n traceProvider?: TracerProvider\n}\n\n/** Parameters for constructing a Base instance, combining BaseParamsFields with optional additional params. */\nexport type BaseParams<TAdditionalParams extends EmptyObject = EmptyObject> = TAdditionalParams & BaseParamsFields\n\n/**\n * Abstract base class providing logging, telemetry, and global instance tracking with WeakRef-based GC.\n * @typeParam TParams - The parameter type, extending BaseParams\n */\nexport abstract class Base<TParams extends BaseParams = BaseParams> {\n static defaultLogger?: Logger\n static readonly globalInstances: Record<BaseClassName, WeakRef<Base>[]> = {}\n static readonly globalInstancesCountHistory: Record<BaseClassName, number[]> = {}\n private static _historyInterval = DEFAULT_HISTORY_INTERVAL\n private static _historyTime = DEFAULT_HISTORY_TIME\n private static _historyTimeout?: ReturnType<typeof setTimeout>\n private static _lastGC = 0\n private static _maxGcFrequency = MAX_GC_FREQUENCY\n private _params: BaseParams<TParams>\n\n constructor(params: BaseParams<TParams>) {\n this._params = params\n params?.logger?.debug(`Base constructed [${Object(this).name}]`)\n this.recordInstance()\n }\n\n static get historyInterval() {\n return this._historyInterval\n }\n\n static set historyInterval(value: number) {\n assertEx(value <= this.historyTime, () => `historyInterval [${value}] must be less than or equal to historyTime [${this.historyTime}]`)\n this._historyInterval = Math.max(value, MIN_HISTORY_INTERVAL)\n }\n\n static get historyTime() {\n return this._historyTime\n }\n\n static set historyTime(value: number) {\n assertEx(value >= this.historyInterval, () => `historyTime [${value}] must be greater than or equal to historyInterval [${this.historyInterval}]`)\n this._historyInterval = value\n }\n\n static get maxGcFrequency() {\n return this._maxGcFrequency\n }\n\n static set maxGcFrequency(value: number) {\n this._maxGcFrequency = Math.max(value, MIN_GC_FREQUENCY)\n }\n\n static get maxHistoryDepth() {\n return Math.floor(this.historyTime / this.historyInterval)\n }\n\n get logger() {\n return this.params?.logger ?? Base.defaultLogger\n }\n\n get meter(): Meter | undefined {\n return this.params?.meterProvider?.getMeter(this.constructor.name)\n }\n\n get params() {\n return this._params\n }\n\n get tracer(): Tracer | undefined {\n return this.params?.traceProvider?.getTracer(this.constructor.name)\n }\n\n static gc(force?: boolean): void\n static gc(className: BaseClassName): void\n static gc(classNameOrForce: BaseClassName | boolean = false): void {\n if (typeof classNameOrForce === 'string') {\n this.gcClass(classNameOrForce)\n } else {\n if (classNameOrForce || Date.now() - this._lastGC > this._maxGcFrequency) {\n this.gcAll()\n }\n }\n }\n\n static instanceCount(className: BaseClassName): number {\n return this.globalInstances[className]?.length ?? 0\n }\n\n static instanceCounts(): Record<BaseClassName, number> {\n this.gc()\n const result: Record<BaseClassName, number> = {}\n for (const [className, instances] of Object.entries(this.globalInstances)) result[className as BaseClassName] = instances.length\n return result\n }\n\n static startHistory(): void {\n if (this._historyTimeout) {\n this.stopHistory()\n }\n\n const timeoutHandler = () => {\n if (this._historyTimeout) {\n this.addToHistory()\n this._historyTimeout = setTimeout(timeoutHandler, this.historyInterval)\n }\n }\n\n this._historyTimeout = setTimeout(timeoutHandler, this.historyInterval)\n }\n\n static stopHistory(): void {\n if (this._historyTimeout) {\n clearTimeout(this._historyTimeout)\n this._historyTimeout = undefined\n }\n }\n\n private static addToHistory() {\n const counts = this.instanceCounts()\n for (const className of Object.keys(this.globalInstances) as BaseClassName[]) {\n this.globalInstancesCountHistory[className] = this.globalInstancesCountHistory[className]?.slice(-this.maxHistoryDepth) ?? []\n this.globalInstancesCountHistory[className].push(counts[className])\n }\n }\n\n private static gcAll() {\n for (const className of Object.keys(this.globalInstances) as BaseClassName[]) {\n this.gcClass(className)\n }\n }\n\n private static gcClass(className: BaseClassName) {\n // remove all the weak refs that are now empty\n this.globalInstances[className] = this.globalInstances[className]?.filter(ref => ref.deref() !== null) ?? []\n }\n\n private recordInstance() {\n const baseClassName = this.constructor.name as BaseClassName\n const instanceArray = Base.globalInstances[baseClassName] ?? []\n instanceArray.push(new WeakRef(this))\n Base.globalInstances[baseClassName] = instanceArray\n }\n}\n","declare global {\n var xylabs: {\n unique: Record<string, unknown>\n uniqueDisabled?: boolean\n }\n}\n\nconst xyoGlobal = () => {\n globalThis.xylabs = globalThis.xylabs ?? {}\n return globalThis.xylabs\n}\n\n/** Disables global uniqueness checks, allowing duplicate registrations without throwing. */\nexport const disableGloballyUnique = () => {\n xyoGlobal().uniqueDisabled = true\n}\n\n/**\n * Registers a value as globally unique under the given name and domain.\n * Throws if a different value is already registered under the same key.\n * @param name - The unique name or symbol\n * @param value - The value to register\n * @param domain - The namespace domain (default 'global')\n * @returns The fully qualified unique name\n */\nexport const globallyUnique = (name: string | symbol, value: unknown, domain = 'global') => {\n const uniqueName = domain === 'bundle' ? [domain, name].join(':') : [domain, import.meta.url, name].join(':')\n if (!xyoGlobal().uniqueDisabled) {\n const xylabs = globalThis.xylabs = globalThis.xylabs ?? {}\n const unique = (xylabs.unique = xylabs.unique ?? {})\n if (unique[uniqueName] === undefined) {\n unique[uniqueName] = value\n } else {\n if (unique[uniqueName] !== value) {\n throw new Error(\n `Global unique item ${uniqueName} already defined. Make sure you are not importing two versions of the package that contains this item`,\n )\n }\n }\n }\n return uniqueName\n}\n","import type { BaseParams } from './Base.ts'\nimport { Base } from './Base.ts'\nimport { globallyUnique } from './globallyUnique.ts'\n\n/** Base class that registers itself as globally unique, preventing duplicate module instances. */\nexport abstract class UniqueBase<TParams extends BaseParams = BaseParams> extends Base<TParams> {\n static readonly uniqueDomain = 'xy'\n static readonly uniqueName = globallyUnique(this.name, this, this.uniqueDomain)\n // TODO: Remove xyo domain version when old xyo versions are no longer needed\n static readonly uniqueNameXyo = globallyUnique(this.name, this, 'xyo')\n constructor(params: BaseParams<TParams>) {\n super(params)\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/base",
3
- "version": "5.0.82",
3
+ "version": "5.0.84",
4
4
  "description": "Base functionality used throughout XY Labs TypeScript/JavaScript libraries",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -36,13 +36,13 @@
36
36
  ],
37
37
  "dependencies": {
38
38
  "@opentelemetry/api": "^1.9.0",
39
- "@xylabs/assert": "~5.0.82",
40
- "@xylabs/logger": "~5.0.82",
41
- "@xylabs/object": "~5.0.82"
39
+ "@xylabs/assert": "~5.0.84",
40
+ "@xylabs/logger": "~5.0.84",
41
+ "@xylabs/object": "~5.0.84"
42
42
  },
43
43
  "devDependencies": {
44
- "@xylabs/ts-scripts-yarn3": "~7.4.11",
45
- "@xylabs/tsconfig": "~7.4.11",
44
+ "@xylabs/ts-scripts-yarn3": "~7.4.13",
45
+ "@xylabs/tsconfig": "~7.4.13",
46
46
  "typescript": "~5.9.3",
47
47
  "vitest": "~4.0.18"
48
48
  },