@fjell/registry 4.4.30 → 4.4.31

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/build.js CHANGED
@@ -1,4 +1,15 @@
1
1
  import { build } from 'esbuild';
2
+ import { execSync } from 'child_process';
3
+
4
+ // Generate TypeScript declarations first
5
+ console.log('Generating TypeScript declarations...');
6
+ try {
7
+ execSync('npx tsc --emitDeclarationOnly', { stdio: 'inherit' });
8
+ console.log('TypeScript declarations generated successfully!');
9
+ } catch (error) {
10
+ console.error('Failed to generate TypeScript declarations:', error.message);
11
+ process.exit(1);
12
+ }
2
13
 
3
14
  // Build cross-platform version that works in both Node.js and browser
4
15
  console.log('Building cross-platform version...');
@@ -23,4 +34,5 @@ await build({
23
34
 
24
35
  console.log('Build completed successfully!');
25
36
  console.log(`- Cross-platform build: dist/index.js`);
37
+ console.log(`- TypeScript declarations: dist/index.d.ts`);
26
38
  console.log('This build works in both Node.js and browser environments');
@@ -0,0 +1,8 @@
1
+ import { ItemTypeArray } from "@fjell/core";
2
+ export interface Coordinate<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> {
3
+ kta: ItemTypeArray<S, L1, L2, L3, L4, L5>;
4
+ scopes: string[];
5
+ toString: () => string;
6
+ }
7
+ export declare const createCoordinate: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(kta: ItemTypeArray<S, L1, L2, L3, L4, L5> | S, scopes?: string[]) => Coordinate<S, L1, L2, L3, L4, L5>;
8
+ //# sourceMappingURL=Coordinate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Coordinate.d.ts","sourceRoot":"","sources":["../src/Coordinate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAM5C,MAAM,WAAW,UAAU,CACzB,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK;IAEzB,GAAG,EAAE,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,gBAAgB,GAC3B,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,KAAK,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,SAAQ,MAAM,EAAO,KAAG,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAQxG,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { Registry } from "./Registry";
2
+ import { Coordinate } from "./Coordinate";
3
+ /**
4
+ * The Instance interface represents a data model instance that provides access to both its structure
5
+ * and operations. It serves as the main interface for interacting with data models in the system.
6
+ *
7
+ * The interface consists of two main components:
8
+ * 1. definition: Defines the structure, keys, and relationships of the data model
9
+ * 2. operations: Provides methods for interacting with the data model (get, find, all, etc.)
10
+ * 3. registry: Manages the registration and lookup of Library instances
11
+ *
12
+ * The Instance interface is generic and supports up to 5 levels of location hierarchy (L1-L5)
13
+ * for contained instances, allowing for complex nested data structures.
14
+ *
15
+ * @template V - The type of the data model item, extending Item
16
+ * @template S - The string literal type representing the model's key type
17
+ * @template L1-L5 - Optional string literal types for location hierarchy levels
18
+ */
19
+ export interface Instance<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> {
20
+ coordinate: Coordinate<S, L1, L2, L3, L4, L5>;
21
+ /** The registry object that manages the registration and lookup of model instances */
22
+ registry: Registry;
23
+ }
24
+ export declare const createInstance: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(registry: Registry, coordinate: Coordinate<S, L1, L2, L3, L4, L5>) => Instance<S, L1, L2, L3, L4, L5>;
25
+ export declare const isInstance: (instance: any) => instance is Instance<any, any, any, any, any, any>;
26
+ //# sourceMappingURL=Instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../src/Instance.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,QAAQ,CACvB,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK;IAEzB,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE9C,sFAAsF;IACtF,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,GACzB,CAAC,SAAS,MAAM,EAChB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EACzB,EAAE,SAAS,MAAM,GAAG,KAAK,EAEzB,UAAU,QAAQ,EAClB,YAAY,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAC5C,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAGhC,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,UAAU,GAAG,KAAG,QAAQ,IAAI,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAK3F,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Registry, RegistryHub } from './types';
2
+ export type { Registry, RegistryHub, InstanceFactory, RegistryFactory } from './types';
3
+ export declare const createRegistry: (type: string, registryHub?: RegistryHub) => Registry;
4
+ //# sourceMappingURL=Registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Registry.d.ts","sourceRoot":"","sources":["../src/Registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,QAAQ,EACR,WAAW,EAEZ,MAAM,SAAS,CAAC;AAIjB,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAiCvF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,cAAc,WAAW,KAAG,QAoNxE,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { RegistryHub } from './types';
2
+ export type { RegistryHub } from './types';
3
+ export declare const createRegistryHub: () => RegistryHub;
4
+ //# sourceMappingURL=RegistryHub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegistryHub.d.ts","sourceRoot":"","sources":["../src/RegistryHub.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqD,WAAW,EAAE,MAAM,SAAS,CAAC;AAUzF,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQ3C,eAAO,MAAM,iBAAiB,QAAO,WAmHpC,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { AllItemTypeArrays } from '@fjell/core';
2
+ /**
3
+ * Represents a service client (another service making the request)
4
+ */
5
+ export interface ServiceClient {
6
+ /** The type of registry where the calling service is registered */
7
+ registryType: string;
8
+ /** The coordinate of the calling service */
9
+ coordinate: {
10
+ kta: string[];
11
+ scopes: string[];
12
+ };
13
+ }
14
+ /**
15
+ * Represents either a service or application client
16
+ */
17
+ export type ClientIdentifier = ServiceClient | string;
18
+ /**
19
+ * Represents a specific coordinate call with both kta and scopes
20
+ */
21
+ export interface CoordinateCallRecord {
22
+ /** The key type array that was requested */
23
+ kta: string[];
24
+ /** The scopes that were requested (empty array if no scopes) */
25
+ scopes: string[];
26
+ /** Number of times this exact combination was called */
27
+ count: number;
28
+ /** Breakdown of calls by client */
29
+ clientCalls: ClientCallRecord[];
30
+ }
31
+ /**
32
+ * Represents calls from a specific client
33
+ */
34
+ export interface ClientCallRecord {
35
+ /** The client that made the calls */
36
+ client: ClientIdentifier;
37
+ /** Number of calls from this client */
38
+ count: number;
39
+ }
40
+ /**
41
+ * Statistics about Registry get() method calls with detailed coordinate tracking
42
+ */
43
+ export interface RegistryStatistics {
44
+ /** Total number of get() calls made on this registry */
45
+ totalGetCalls: number;
46
+ /** Detailed records of each unique coordinate combination and their call counts */
47
+ coordinateCallRecords: CoordinateCallRecord[];
48
+ /** Summary of calls by client type */
49
+ clientSummary: {
50
+ /** Total calls from services (service-to-service) */
51
+ serviceCalls: number;
52
+ /** Total calls from applications (direct application calls) */
53
+ applicationCalls: number;
54
+ /** Total calls with no client specified */
55
+ unidentifiedCalls: number;
56
+ };
57
+ }
58
+ /**
59
+ * Internal class for tracking Registry statistics with complex coordinate combinations and client tracking
60
+ */
61
+ export declare class RegistryStats {
62
+ private totalCalls;
63
+ private coordinateCalls;
64
+ /**
65
+ * Records a get() call for the specified coordinate and client
66
+ */
67
+ recordGetCall<S extends string = any, L1 extends string = any | never, L2 extends string = any | never, L3 extends string = any | never, L4 extends string = any | never, L5 extends string = any | never>(kta: AllItemTypeArrays<S, L1, L2, L3, L4, L5>, scopes?: string[], client?: ClientIdentifier): void;
68
+ /**
69
+ * Gets the current statistics snapshot
70
+ */
71
+ getStatistics(): RegistryStatistics;
72
+ /**
73
+ * Gets call count for a specific coordinate combination
74
+ */
75
+ getCallCount(kta: string[], scopes?: string[]): number;
76
+ /**
77
+ * Gets call count for a specific coordinate combination from a specific client
78
+ */
79
+ getCallCountByClient(kta: string[], scopes?: string[], client?: ClientIdentifier): number;
80
+ /**
81
+ * Gets total calls for a specific kta (across all scopes)
82
+ */
83
+ getTotalCallsForKta(kta: string[]): number;
84
+ /**
85
+ * Gets all unique kta paths that have been called
86
+ */
87
+ getCalledKtaPaths(): string[][];
88
+ /**
89
+ * Creates a normalized scope key from scopes array
90
+ */
91
+ private createScopeKey;
92
+ /**
93
+ * Parses a scope key back to scopes array
94
+ */
95
+ private parseScopeKey;
96
+ /**
97
+ * Creates a normalized client key from client identifier
98
+ */
99
+ private createClientKey;
100
+ /**
101
+ * Parses a client key back to client identifier
102
+ */
103
+ private parseClientKey;
104
+ }
105
+ //# sourceMappingURL=RegistryStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegistryStats.d.ts","sourceRoot":"","sources":["../src/RegistryStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,UAAU,EAAE;QACV,GAAG,EAAE,MAAM,EAAE,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,MAAM,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,gEAAgE;IAChE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,MAAM,EAAE,gBAAgB,CAAC;IACzB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,sCAAsC;IACtC,aAAa,EAAE;QACb,qDAAqD;QACrD,YAAY,EAAE,MAAM,CAAC;QACrB,+DAA+D;QAC/D,gBAAgB,EAAE,MAAM,CAAC;QACzB,2CAA2C;QAC3C,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAK;IAEvB,OAAO,CAAC,eAAe,CAAuD;IAE9E;;OAEG;IACH,aAAa,CACX,CAAC,SAAS,MAAM,GAAG,GAAG,EACtB,EAAE,SAAS,MAAM,GAAG,GAAG,GAAG,KAAK,EAC/B,EAAE,SAAS,MAAM,GAAG,GAAG,GAAG,KAAK,EAC/B,EAAE,SAAS,MAAM,GAAG,GAAG,GAAG,KAAK,EAC/B,EAAE,SAAS,MAAM,GAAG,GAAG,GAAG,KAAK,EAC/B,EAAE,SAAS,MAAM,GAAG,GAAG,GAAG,KAAK,EAC/B,GAAG,EAAE,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,IAAI;IAqBpG;;OAEG;IACH,aAAa,IAAI,kBAAkB;IAgDnC;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAiBtD;;OAEG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM;IAczF;;OAEG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM;IAc1C;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE,EAAE;IAQ/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,cAAc;CA0BvB"}
@@ -0,0 +1,29 @@
1
+ import { RegistryError } from './RegistryError';
2
+ /**
3
+ * Base class for coordinate-related errors
4
+ */
5
+ export declare abstract class CoordinateError extends RegistryError {
6
+ readonly kta?: any;
7
+ readonly scopes?: string[];
8
+ constructor(message: string, kta?: any, scopes?: string[], context?: Record<string, any>);
9
+ }
10
+ /**
11
+ * Thrown when coordinate creation fails due to invalid parameters
12
+ */
13
+ export declare class InvalidCoordinateError extends CoordinateError {
14
+ constructor(kta: any, scopes: string[], reason: string, context?: Record<string, any>);
15
+ }
16
+ /**
17
+ * Thrown when KTA (Key Type Array) is invalid
18
+ */
19
+ export declare class InvalidKTAError extends CoordinateError {
20
+ constructor(kta: any, reason: string, context?: Record<string, any>);
21
+ }
22
+ /**
23
+ * Thrown when scopes array contains invalid values
24
+ */
25
+ export declare class InvalidScopesError extends CoordinateError {
26
+ readonly invalidScopes: any[];
27
+ constructor(scopes: any[], invalidScopes: any[], reason: string, context?: Record<string, any>);
28
+ }
29
+ //# sourceMappingURL=CoordinateError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoordinateError.d.ts","sourceRoot":"","sources":["../../src/errors/CoordinateError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,8BAAsB,eAAgB,SAAQ,aAAa;IACzD,SAAgB,GAAG,CAAC,EAAE,GAAG,CAAC;IAC1B,SAAgB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAKzF;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,eAAe;gBAC7C,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAStF;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CASpE;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,SAAgB,aAAa,EAAE,GAAG,EAAE,CAAC;gBAEzB,MAAM,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAU/F"}
@@ -0,0 +1,43 @@
1
+ import { RegistryError } from './RegistryError';
2
+ /**
3
+ * Base class for instance-related errors
4
+ */
5
+ export declare abstract class InstanceError extends RegistryError {
6
+ readonly keyPath: string[];
7
+ constructor(message: string, keyPath: string[], registryType?: string, context?: Record<string, any>);
8
+ }
9
+ /**
10
+ * Thrown when an instance cannot be found for a given key path
11
+ */
12
+ export declare class InstanceNotFoundError extends InstanceError {
13
+ readonly missingKey?: string;
14
+ constructor(keyPath: string[], missingKey?: string, registryType?: string, context?: Record<string, any>);
15
+ }
16
+ /**
17
+ * Thrown when no instances are registered for a key path that exists in the tree
18
+ */
19
+ export declare class NoInstancesRegisteredError extends InstanceError {
20
+ constructor(keyPath: string[], registryType?: string, context?: Record<string, any>);
21
+ }
22
+ /**
23
+ * Thrown when no instances are available (empty instances array)
24
+ */
25
+ export declare class NoInstancesAvailableError extends InstanceError {
26
+ constructor(keyPath: string[], registryType?: string, context?: Record<string, any>);
27
+ }
28
+ /**
29
+ * Thrown when no instance matches the requested scopes
30
+ */
31
+ export declare class ScopeNotFoundError extends InstanceError {
32
+ readonly requestedScopes: string[];
33
+ readonly availableScopes: string[][];
34
+ constructor(keyPath: string[], requestedScopes: string[], availableScopes?: string[][], registryType?: string);
35
+ }
36
+ /**
37
+ * Thrown when a key path has no children but children are expected
38
+ */
39
+ export declare class NoChildrenAvailableError extends InstanceError {
40
+ readonly parentKey: string;
41
+ constructor(keyPath: string[], parentKey: string, registryType?: string, context?: Record<string, any>);
42
+ }
43
+ //# sourceMappingURL=InstanceError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceError.d.ts","sourceRoot":"","sources":["../../src/errors/InstanceError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,8BAAsB,aAAc,SAAQ,aAAa;IACvD,SAAgB,OAAO,EAAE,MAAM,EAAE,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAIrG;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAExB,OAAO,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAWzG;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,aAAa;gBAC/C,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAUpF;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,aAAa;gBAC9C,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAUpF;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,SAAgB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1C,SAAgB,eAAe,EAAE,MAAM,EAAE,EAAE,CAAC;gBAG1C,OAAO,EAAE,MAAM,EAAE,EACjB,eAAe,EAAE,MAAM,EAAE,EACzB,eAAe,GAAE,MAAM,EAAE,EAAO,EAChC,YAAY,CAAC,EAAE,MAAM;CAexB;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,aAAa;IACzD,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAWvG"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Base class for all registry-related errors
3
+ */
4
+ export declare abstract class RegistryError extends Error {
5
+ readonly registryType?: string;
6
+ readonly context?: Record<string, any>;
7
+ constructor(message: string, registryType?: string, context?: Record<string, any>);
8
+ getDetails(): string;
9
+ }
10
+ /**
11
+ * Thrown when attempting to create a registry with invalid parameters
12
+ */
13
+ export declare class RegistryCreationError extends RegistryError {
14
+ constructor(type: string, reason: string, context?: Record<string, any>);
15
+ }
16
+ /**
17
+ * Thrown when a factory function returns an invalid instance
18
+ */
19
+ export declare class InvalidFactoryResultError extends RegistryError {
20
+ readonly keyPath: string[];
21
+ readonly factoryResult: any;
22
+ constructor(keyPath: string[], factoryResult: any, registryType?: string);
23
+ }
24
+ /**
25
+ * Thrown when attempting to register a non-instance object
26
+ */
27
+ export declare class InvalidInstanceRegistrationError extends RegistryError {
28
+ readonly keyPath: string[];
29
+ readonly attemptedRegistration: any;
30
+ constructor(keyPath: string[], attemptedRegistration: any, registryType?: string);
31
+ }
32
+ //# sourceMappingURL=RegistryError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegistryError.d.ts","sourceRoot":"","sources":["../../src/errors/RegistryError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,8BAAsB,aAAc,SAAQ,KAAK;IAC/C,SAAgB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtC,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAElC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAa1E,UAAU,IAAI,MAAM;CAa5B;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,aAAa;gBAC1C,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAGxE;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,aAAa;IAC1D,SAAgB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClC,SAAgB,aAAa,EAAE,GAAG,CAAC;gBAEvB,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM;CAWzE;AAED;;GAEG;AACH,qBAAa,gCAAiC,SAAQ,aAAa;IACjE,SAAgB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClC,SAAgB,qBAAqB,EAAE,GAAG,CAAC;gBAE/B,OAAO,EAAE,MAAM,EAAE,EAAE,qBAAqB,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM;CAWjF"}
@@ -0,0 +1,40 @@
1
+ import { RegistryError } from './RegistryError';
2
+ /**
3
+ * Base class for registry hub-related errors
4
+ */
5
+ export declare abstract class RegistryHubError extends RegistryError {
6
+ readonly hubType?: string;
7
+ constructor(message: string, hubType?: string, context?: Record<string, any>);
8
+ }
9
+ /**
10
+ * Thrown when attempting to register a registry with a type that already exists
11
+ */
12
+ export declare class DuplicateRegistryTypeError extends RegistryHubError {
13
+ readonly duplicateType: string;
14
+ constructor(type: string, context?: Record<string, any>);
15
+ }
16
+ /**
17
+ * Thrown when attempting to access a registry type that doesn't exist
18
+ */
19
+ export declare class RegistryTypeNotFoundError extends RegistryHubError {
20
+ readonly requestedType: string;
21
+ readonly availableTypes: string[];
22
+ constructor(requestedType: string, availableTypes?: string[], context?: Record<string, any>);
23
+ }
24
+ /**
25
+ * Thrown when a registry factory function fails to create a valid registry
26
+ */
27
+ export declare class RegistryFactoryError extends RegistryHubError {
28
+ readonly factoryError: Error;
29
+ readonly attemptedType: string;
30
+ constructor(type: string, factoryError: Error, context?: Record<string, any>);
31
+ }
32
+ /**
33
+ * Thrown when a factory returns an invalid registry object
34
+ */
35
+ export declare class InvalidRegistryFactoryResultError extends RegistryHubError {
36
+ readonly factoryResult: any;
37
+ readonly attemptedType: string;
38
+ constructor(type: string, factoryResult: any, context?: Record<string, any>);
39
+ }
40
+ //# sourceMappingURL=RegistryHubError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegistryHubError.d.ts","sourceRoot":"","sources":["../../src/errors/RegistryHubError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,8BAAsB,gBAAiB,SAAQ,aAAa;IAC1D,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAK7E;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,SAAgB,aAAa,EAAE,MAAM,CAAC;gBAE1B,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CASxD;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;IAC7D,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,cAAc,EAAE,MAAM,EAAE,CAAC;gBAE7B,aAAa,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,EAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAUhG;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;IACxD,SAAgB,YAAY,EAAE,KAAK,CAAC;IACpC,SAAgB,aAAa,EAAE,MAAM,CAAC;gBAE1B,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAS7E;AAED;;GAEG;AACH,qBAAa,iCAAkC,SAAQ,gBAAgB;IACrE,SAAgB,aAAa,EAAE,GAAG,CAAC;IACnC,SAAgB,aAAa,EAAE,MAAM,CAAC;gBAE1B,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAW5E"}
@@ -0,0 +1,5 @@
1
+ export * from './RegistryError';
2
+ export * from './InstanceError';
3
+ export * from './CoordinateError';
4
+ export * from './RegistryHubError';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './Coordinate';
2
+ export * from './Instance';
3
+ export * from './Registry';
4
+ export * from './RegistryHub';
5
+ export * from './RegistryStats';
6
+ export * from './types';
7
+ export * from './errors';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const LibLogger: import("@fjell/logging").Logger;
2
+ export default LibLogger;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,SAAS,iCAAuC,CAAC;AAEvD,eAAe,SAAS,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { Instance } from './Instance';
2
+ import { Coordinate } from './Coordinate';
3
+ import { ClientIdentifier, RegistryStatistics } from './RegistryStats';
4
+ import { AllItemTypeArrays } from '@fjell/core';
5
+ /**
6
+ * Represents a coordinate along with information about which registry contains it.
7
+ */
8
+ export interface CoordinateWithRegistry {
9
+ coordinate: Coordinate<any, any | never, any | never, any | never, any | never, any | never>;
10
+ registryType: string;
11
+ }
12
+ /**
13
+ * The RegistryHub interface provides a higher-level registry that manages multiple Registry instances.
14
+ */
15
+ export interface RegistryHub {
16
+ /**
17
+ * Creates a new registry instance using a RegistryFactory and automatically registers it.
18
+ */
19
+ readonly createRegistry: (type: string, factory: RegistryFactory) => Registry;
20
+ /**
21
+ * Registers a registry instance, using the registry's type property as the key.
22
+ */
23
+ readonly registerRegistry: (registry: Registry) => void;
24
+ /**
25
+ * Retrieves an instance by delegating to the appropriate registry.
26
+ */
27
+ readonly get: (type: string, kta: string[], options?: {
28
+ scopes?: string[];
29
+ client?: ClientIdentifier;
30
+ }) => Instance<any, any | never, any | never, any | never, any | never, any | never> | null;
31
+ /**
32
+ * Retrieves a registry instance by its type key.
33
+ */
34
+ readonly getRegistry: (type: string) => Registry | null;
35
+ /**
36
+ * Lists all registered type keys.
37
+ */
38
+ readonly getRegisteredTypes: () => string[];
39
+ /**
40
+ * Retrieves all coordinates from all registered registries along with their registry type information.
41
+ */
42
+ readonly getAllCoordinates: () => CoordinateWithRegistry[];
43
+ /**
44
+ * Removes a registry from the hub.
45
+ */
46
+ readonly unregisterRegistry: (type: string) => boolean;
47
+ }
48
+ /**
49
+ * Factory function for creating instances. This function receives a coordinate and context
50
+ * and returns a fully initialized instance.
51
+ */
52
+ export type InstanceFactory<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = (coordinate: Coordinate<S, L1, L2, L3, L4, L5>, context: {
53
+ registry: Registry;
54
+ registryHub?: RegistryHub;
55
+ }) => Instance<S, L1, L2, L3, L4, L5>;
56
+ /**
57
+ * Factory function for creating a Registry instance. This function receives the type and hub
58
+ * and returns a fully initialized registry.
59
+ */
60
+ export type RegistryFactory = (type: string, registryHub?: RegistryHub) => Registry;
61
+ /**
62
+ * Tree structure representing the hierarchy of instances
63
+ */
64
+ export interface InstanceTree {
65
+ [keyType: string]: InstanceTreeNode;
66
+ }
67
+ export interface InstanceTreeNode {
68
+ instances: ScopedInstance[];
69
+ children: InstanceTree | null;
70
+ }
71
+ export interface ScopedInstance {
72
+ scopes?: string[];
73
+ instance: Instance<any, any | never, any | never, any | never, any | never, any | never>;
74
+ }
75
+ /**
76
+ * The Registry interface provides a central registry for managing and accessing instances of services.
77
+ * It serves as a dependency injection container that allows libraries to reference and access
78
+ * other library instances they depend on.
79
+ */
80
+ export interface Registry {
81
+ /** The type identifier for this registry (e.g., 'services', 'data', 'cache') */
82
+ readonly type: string;
83
+ /** Optional reference to the RegistryHub that created this registry */
84
+ readonly registryHub?: RegistryHub;
85
+ /**
86
+ * Creates and registers a new instance in the registry in one atomic operation.
87
+ */
88
+ createInstance: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(kta: AllItemTypeArrays<S, L1, L2, L3, L4, L5>, scopes: string[], factory: InstanceFactory<S, L1, L2, L3, L4, L5>) => Instance<S, L1, L2, L3, L4, L5>;
89
+ /**
90
+ * Registers an existing instance in the registry (for migration/advanced use cases).
91
+ * @deprecated Use createInstance instead for new code
92
+ */
93
+ register: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(kta: AllItemTypeArrays<S, L1, L2, L3, L4, L5>, instance: Instance<S, L1, L2, L3, L4, L5>, options?: {
94
+ scopes?: string[];
95
+ }) => void;
96
+ /**
97
+ * Retrieves an instance from the registry.
98
+ */
99
+ get: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(kta: AllItemTypeArrays<S, L1, L2, L3, L4, L5>, options?: {
100
+ scopes?: string[];
101
+ client?: ClientIdentifier;
102
+ }) => Instance<S, L1, L2, L3, L4, L5> | null;
103
+ /** The tree structure representing the hierarchy of instances */
104
+ instanceTree: InstanceTree;
105
+ /**
106
+ * Retrieves all coordinates currently registered in the registry.
107
+ */
108
+ getCoordinates: () => Coordinate<any, any | never, any | never, any | never, any | never, any | never>[];
109
+ /**
110
+ * Retrieves statistics about get() method calls, including total calls and per-coordinate call counts.
111
+ */
112
+ getStatistics: () => RegistryStatistics;
113
+ }
114
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -31,18 +31,18 @@
31
31
  <g transform="translate(110,60)">
32
32
 
33
33
  <!-- Grid lines (logarithmic scale) -->
34
- <line x1="0" y1="456.221413765638" x2="1015" y2="456.221413765638" class="grid"/>
35
- <text x="-10" y="460.221413765638" text-anchor="end" class="label">0.10µs</text>
36
- <line x1="0" y1="403.62004390197774" x2="1015" y2="403.62004390197774" class="grid"/>
37
- <text x="-10" y="407.62004390197774" text-anchor="end" class="label">0.20µs</text>
38
- <line x1="0" y1="334.0848152496439" x2="1015" y2="334.0848152496439" class="grid"/>
39
- <text x="-10" y="338.0848152496439" text-anchor="end" class="label">0.50µs</text>
40
- <line x1="0" y1="281.4834453859837" x2="1015" y2="281.4834453859837" class="grid"/>
41
- <text x="-10" y="285.4834453859837" text-anchor="end" class="label">1.0µs</text>
42
- <line x1="0" y1="228.88207552232348" x2="1015" y2="228.88207552232348" class="grid"/>
43
- <text x="-10" y="232.88207552232348" text-anchor="end" class="label">2.0µs</text>
44
- <line x1="0" y1="159.34684686998963" x2="1015" y2="159.34684686998963" class="grid"/>
45
- <text x="-10" y="163.34684686998963" text-anchor="end" class="label">5.0µs</text>
34
+ <line x1="0" y1="458.57870897416086" x2="1015" y2="458.57870897416086" class="grid"/>
35
+ <text x="-10" y="462.57870897416086" text-anchor="end" class="label">0.10µs</text>
36
+ <line x1="0" y1="401.74575051692926" x2="1015" y2="401.74575051692926" class="grid"/>
37
+ <text x="-10" y="405.74575051692926" text-anchor="end" class="label">0.20µs</text>
38
+ <line x1="0" y1="326.6166660167485" x2="1015" y2="326.6166660167485" class="grid"/>
39
+ <text x="-10" y="330.6166660167485" text-anchor="end" class="label">0.50µs</text>
40
+ <line x1="0" y1="269.783707559517" x2="1015" y2="269.783707559517" class="grid"/>
41
+ <text x="-10" y="273.783707559517" text-anchor="end" class="label">1.0µs</text>
42
+ <line x1="0" y1="212.95074910228539" x2="1015" y2="212.95074910228539" class="grid"/>
43
+ <text x="-10" y="216.95074910228539" text-anchor="end" class="label">2.0µs</text>
44
+ <line x1="0" y1="137.82166460210453" x2="1015" y2="137.82166460210453" class="grid"/>
45
+ <text x="-10" y="141.82166460210453" text-anchor="end" class="label">5.0µs</text>
46
46
  <line x1="0" y1="0" x2="0" y2="460" class="grid"/>
47
47
  <text x="0" y="480" text-anchor="middle" class="label">10</text>
48
48
  <line x1="76.38636139973525" y1="0" x2="76.38636139973525" y2="460" class="grid"/>
@@ -78,34 +78,34 @@
78
78
  <!-- Axis labels -->
79
79
  <text x="507.5" y="510" text-anchor="middle" class="axis-title">Tree Size (items) - Log Scale</text>
80
80
  <text transform="rotate(-90,-70,230)" x="-70" y="230" text-anchor="middle" class="axis-title">Execution Time (µs)</text>
81
- <path d="M 0 254.6477516903672 L 76.38636139973525 225.48264422560578 L 177.36363860026475 249.1677004022969 L 253.75 232.7673385789053 L 330.1363613997352 228.9317223374932 L 431.1136386002648 268.19807299324424 L 507.5 164.18059177577595 L 583.8863613997353 259.6233000940839 L 684.8636386002647 254.60550943221176 L 761.25 269.4738888305428 L 837.6363613997353 268.5495557424383 L 938.6136386002647 268.01896822771073 L 1015 268.2837982698911" class="register-mean"/>
82
- <path d="M 0 170.69626153085738 L 76.38636139973525 374.1117791511789 L 177.36363860026475 339.4458733559676 L 253.75 407.3986301363398 L 330.1363613997352 405.9152922010022 L 431.1136386002648 376.28891346933796 L 507.5 52.60136986366024 L 583.8863613997353 342.41977190082775 L 684.8636386002647 355.66623817995855 L 761.25 346.3448347205415 L 837.6363613997353 359.2135008424481 L 938.6136386002647 347.6086492356816 L 1015 344.6014771825719" class="lookup-mean"/>
83
- <circle cx="0" cy="254.6477516903672" r="4" class="register-dot"/>
84
- <circle cx="76.38636139973525" cy="225.48264422560578" r="4" class="register-dot"/>
85
- <circle cx="177.36363860026475" cy="249.1677004022969" r="4" class="register-dot"/>
86
- <circle cx="253.75" cy="232.7673385789053" r="4" class="register-dot"/>
87
- <circle cx="330.1363613997352" cy="228.9317223374932" r="4" class="register-dot"/>
88
- <circle cx="431.1136386002648" cy="268.19807299324424" r="4" class="register-dot"/>
89
- <circle cx="507.5" cy="164.18059177577595" r="4" class="register-dot"/>
90
- <circle cx="583.8863613997353" cy="259.6233000940839" r="4" class="register-dot"/>
91
- <circle cx="684.8636386002647" cy="254.60550943221176" r="4" class="register-dot"/>
92
- <circle cx="761.25" cy="269.4738888305428" r="4" class="register-dot"/>
93
- <circle cx="837.6363613997353" cy="268.5495557424383" r="4" class="register-dot"/>
94
- <circle cx="938.6136386002647" cy="268.01896822771073" r="4" class="register-dot"/>
95
- <circle cx="1015" cy="268.2837982698911" r="4" class="register-dot"/>
96
- <circle cx="0" cy="170.69626153085738" r="4" class="lookup-dot"/>
97
- <circle cx="76.38636139973525" cy="374.1117791511789" r="4" class="lookup-dot"/>
98
- <circle cx="177.36363860026475" cy="339.4458733559676" r="4" class="lookup-dot"/>
99
- <circle cx="253.75" cy="407.3986301363398" r="4" class="lookup-dot"/>
100
- <circle cx="330.1363613997352" cy="405.9152922010022" r="4" class="lookup-dot"/>
101
- <circle cx="431.1136386002648" cy="376.28891346933796" r="4" class="lookup-dot"/>
102
- <circle cx="507.5" cy="52.60136986366024" r="4" class="lookup-dot"/>
103
- <circle cx="583.8863613997353" cy="342.41977190082775" r="4" class="lookup-dot"/>
104
- <circle cx="684.8636386002647" cy="355.66623817995855" r="4" class="lookup-dot"/>
105
- <circle cx="761.25" cy="346.3448347205415" r="4" class="lookup-dot"/>
106
- <circle cx="837.6363613997353" cy="359.2135008424481" r="4" class="lookup-dot"/>
107
- <circle cx="938.6136386002647" cy="347.6086492356816" r="4" class="lookup-dot"/>
108
- <circle cx="1015" cy="344.6014771825719" r="4" class="lookup-dot"/>
81
+ <path d="M 0 239.1535109261035 L 76.38636139973525 241.35010137222713 L 177.36363860026475 211.6579677154121 L 253.75 233.60178771284308 L 330.1363613997352 249.76461645442487 L 431.1136386002648 170.0851215046049 L 507.5 56.8329584572316 L 583.8863613997353 132.00370327144822 L 684.8636386002647 201.65702141898555 L 761.25 244.29969538379217 L 837.6363613997353 176.42359219928989 L 938.6136386002647 201.1355833013193 L 1015 252.52924534742965" class="register-mean"/>
82
+ <path d="M 0 346.3716335219015 L 76.38636139973525 367.51255424262 L 177.36363860026475 381.640154985222 L 253.75 403.1670415427684 L 330.1363613997352 403.0976185394176 L 431.1136386002648 381.66999592400776 L 507.5 391.12205888330266 L 583.8863613997353 359.3936647747462 L 684.8636386002647 356.4680232318624 L 761.25 334.13636249961746 L 837.6363613997353 286.99247411109025 L 938.6136386002647 309.24510010121196 L 1015 331.8590369943432" class="lookup-mean"/>
83
+ <circle cx="0" cy="239.1535109261035" r="4" class="register-dot"/>
84
+ <circle cx="76.38636139973525" cy="241.35010137222713" r="4" class="register-dot"/>
85
+ <circle cx="177.36363860026475" cy="211.6579677154121" r="4" class="register-dot"/>
86
+ <circle cx="253.75" cy="233.60178771284308" r="4" class="register-dot"/>
87
+ <circle cx="330.1363613997352" cy="249.76461645442487" r="4" class="register-dot"/>
88
+ <circle cx="431.1136386002648" cy="170.0851215046049" r="4" class="register-dot"/>
89
+ <circle cx="507.5" cy="56.8329584572316" r="4" class="register-dot"/>
90
+ <circle cx="583.8863613997353" cy="132.00370327144822" r="4" class="register-dot"/>
91
+ <circle cx="684.8636386002647" cy="201.65702141898555" r="4" class="register-dot"/>
92
+ <circle cx="761.25" cy="244.29969538379217" r="4" class="register-dot"/>
93
+ <circle cx="837.6363613997353" cy="176.42359219928989" r="4" class="register-dot"/>
94
+ <circle cx="938.6136386002647" cy="201.1355833013193" r="4" class="register-dot"/>
95
+ <circle cx="1015" cy="252.52924534742965" r="4" class="register-dot"/>
96
+ <circle cx="0" cy="346.3716335219015" r="4" class="lookup-dot"/>
97
+ <circle cx="76.38636139973525" cy="367.51255424262" r="4" class="lookup-dot"/>
98
+ <circle cx="177.36363860026475" cy="381.640154985222" r="4" class="lookup-dot"/>
99
+ <circle cx="253.75" cy="403.1670415427684" r="4" class="lookup-dot"/>
100
+ <circle cx="330.1363613997352" cy="403.0976185394176" r="4" class="lookup-dot"/>
101
+ <circle cx="431.1136386002648" cy="381.66999592400776" r="4" class="lookup-dot"/>
102
+ <circle cx="507.5" cy="391.12205888330266" r="4" class="lookup-dot"/>
103
+ <circle cx="583.8863613997353" cy="359.3936647747462" r="4" class="lookup-dot"/>
104
+ <circle cx="684.8636386002647" cy="356.4680232318624" r="4" class="lookup-dot"/>
105
+ <circle cx="761.25" cy="334.13636249961746" r="4" class="lookup-dot"/>
106
+ <circle cx="837.6363613997353" cy="286.99247411109025" r="4" class="lookup-dot"/>
107
+ <circle cx="938.6136386002647" cy="309.24510010121196" r="4" class="lookup-dot"/>
108
+ <circle cx="1015" cy="331.8590369943432" r="4" class="lookup-dot"/>
109
109
  <!-- Legend -->
110
110
  <g transform="translate(20, 20)">
111
111
  <rect x="0" y="0" width="190" height="80" fill="white" stroke="#ccc" stroke-width="1"/>
@@ -132,7 +132,7 @@
132
132
  <text x="0" y="0" class="metadata-section">System Information</text>
133
133
 
134
134
  <text x="0" y="25" class="metadata-label">Test Date:</text>
135
- <text x="150" y="25" class="metadata-value">2025-08-15</text>
135
+ <text x="150" y="25" class="metadata-value">2025-08-16</text>
136
136
 
137
137
  <text x="0" y="45" class="metadata-label">Package Version:</text>
138
138
  <text x="150" y="45" class="metadata-value">@fjell/registry v4.4.5</text>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fjell/registry",
3
3
  "description": "Dependency injection and service location system for the Fjell ecosystem",
4
- "version": "4.4.30",
4
+ "version": "4.4.31",
5
5
  "keywords": [
6
6
  "registry",
7
7
  "dependency-injection",
@@ -38,8 +38,8 @@
38
38
  "docs:test": "cd docs && npm run test"
39
39
  },
40
40
  "dependencies": {
41
- "@fjell/core": "^4.4.35",
42
- "@fjell/logging": "^4.4.41"
41
+ "@fjell/core": "^4.4.37",
42
+ "@fjell/logging": "^4.4.43"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@eslint/eslintrc": "^3.3.1",