@fjell/registry 4.4.15 → 4.4.17

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.
@@ -2,9 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- /**
6
- * Represents a service client (another service making the request)
7
- */ function _define_property(obj, key, value) {
5
+ function _define_property(obj, key, value) {
8
6
  if (key in obj) {
9
7
  Object.defineProperty(obj, key, {
10
8
  value: value,
@@ -197,4 +195,4 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
197
195
  }
198
196
 
199
197
  exports.RegistryStats = RegistryStats;
200
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaXN0cnlTdGF0cy5janMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsifQ==
198
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaXN0cnlTdGF0cy5janMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
@@ -1,3 +1,4 @@
1
+ import { AllItemTypeArrays } from '@fjell/core';
1
2
  /**
2
3
  * Represents a service client (another service making the request)
3
4
  */
@@ -63,7 +64,7 @@ export declare class RegistryStats {
63
64
  /**
64
65
  * Records a get() call for the specified coordinate and client
65
66
  */
66
- recordGetCall(kta: string[], scopes?: string[], client?: ClientIdentifier): void;
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;
67
68
  /**
68
69
  * Gets the current statistics snapshot
69
70
  */
@@ -1,6 +1,4 @@
1
- /**
2
- * Represents a service client (another service making the request)
3
- */ function _define_property(obj, key, value) {
1
+ function _define_property(obj, key, value) {
4
2
  if (key in obj) {
5
3
  Object.defineProperty(obj, key, {
6
4
  value: value,
@@ -193,4 +191,4 @@
193
191
  }
194
192
 
195
193
  export { RegistryStats };
196
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaXN0cnlTdGF0cy5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
194
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaXN0cnlTdGF0cy5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9
package/dist/index.cjs CHANGED
@@ -45,9 +45,7 @@ const isInstance = (instance)=>{
45
45
  return instance !== null && instance !== undefined && instance.coordinate !== undefined && instance.registry !== undefined;
46
46
  };
47
47
 
48
- /**
49
- * Represents a service client (another service making the request)
50
- */ function _define_property$4(obj, key, value) {
48
+ function _define_property$4(obj, key, value) {
51
49
  if (key in obj) {
52
50
  Object.defineProperty(obj, key, {
53
51
  value: value,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Instance } from './Instance';
2
2
  import { Coordinate } from './Coordinate';
3
3
  import { ClientIdentifier, RegistryStatistics } from './RegistryStats';
4
+ import { AllItemTypeArrays } from '@fjell/core';
4
5
  /**
5
6
  * Represents a coordinate along with information about which registry contains it.
6
7
  */
@@ -84,21 +85,21 @@ export interface Registry {
84
85
  /**
85
86
  * Creates and registers a new instance in the registry in one atomic operation.
86
87
  */
87
- 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: S[], scopes: string[], factory: InstanceFactory<S, L1, L2, L3, L4, L5>) => Instance<S, L1, L2, L3, L4, L5>;
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>;
88
89
  /**
89
90
  * Registers an existing instance in the registry (for migration/advanced use cases).
90
91
  * @deprecated Use createInstance instead for new code
91
92
  */
92
- register: (kta: string[], instance: Instance<any, any | never, any | never, any | never, any | never, any | never>, options?: {
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?: {
93
94
  scopes?: string[];
94
95
  }) => void;
95
96
  /**
96
97
  * Retrieves an instance from the registry.
97
98
  */
98
- get: (kta: string[], options?: {
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?: {
99
100
  scopes?: string[];
100
101
  client?: ClientIdentifier;
101
- }) => Instance<any, any | never, any | never, any | never, any | never, any | never> | null;
102
+ }) => Instance<S, L1, L2, L3, L4, L5> | null;
102
103
  /** The tree structure representing the hierarchy of instances */
103
104
  instanceTree: InstanceTree;
104
105
  /**
package/docs/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "version": "0.0.0",
5
5
  "type": "module",
6
6
  "scripts": {
7
- "copy-docs": "node ../../fjell-docs-template/scripts/copy-docs.js",
7
+ "copy-docs": "node node_modules/@fjell/docs-template/scripts/copy-docs.js",
8
8
  "dev": "npm run copy-docs && vite",
9
9
  "build": "npm run copy-docs && tsc && vite build",
10
10
  "preview": "vite preview",
@@ -0,0 +1,172 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="1200" height="800" xmlns="http://www.w3.org/2000/svg">
3
+ <style>
4
+ .axis { stroke: #333; stroke-width: 1; }
5
+ .grid { stroke: #ddd; stroke-width: 0.5; }
6
+ .label { font-family: Arial, sans-serif; font-size: 14px; fill: #333; }
7
+ .title { font-family: Arial, sans-serif; font-size: 16px; font-weight: bold; fill: #333; }
8
+ .subtitle { font-family: Arial, sans-serif; font-size: 12px; fill: #666; }
9
+ .register-mean { stroke: #e74c3c; stroke-width: 3; fill: none; }
10
+ .lookup-mean { stroke: #3498db; stroke-width: 3; fill: none; }
11
+ .register-band { fill: rgba(231, 76, 60, 0.2); stroke: #e74c3c; stroke-width: 1; }
12
+ .lookup-band { fill: rgba(52, 152, 219, 0.2); stroke: #3498db; stroke-width: 1; }
13
+ .register-dot { fill: #e74c3c; }
14
+ .lookup-dot { fill: #3498db; }
15
+ .legend { font-family: Arial, sans-serif; font-size: 12px; fill: #333; }
16
+ .axis-title { font-family: Arial, sans-serif; font-size: 16px; font-weight: bold; fill: #333; }
17
+ .metadata-title { font-family: Arial, sans-serif; font-size: 14px; font-weight: bold; fill: #333; }
18
+ .metadata-section { font-family: Arial, sans-serif; font-size: 14px; font-weight: bold; fill: #444; }
19
+ .metadata-label { font-family: Arial, sans-serif; font-size: 10px; fill: #666; }
20
+ .metadata-value { font-family: Arial, sans-serif; font-size: 10px; fill: #333; }
21
+ </style>
22
+
23
+ <!-- Background -->
24
+ <rect width="1200" height="800" fill="white"/>
25
+
26
+ <!-- Title -->
27
+ <text x="600" y="25" text-anchor="middle" class="title">Timing of Common Registry Operations</text>
28
+ <text x="600" y="45" text-anchor="middle" class="subtitle">Performance measurements across varying tree sizes</text>
29
+
30
+ <!-- Plot area -->
31
+ <g transform="translate(110,60)">
32
+
33
+ <!-- Grid lines (logarithmic scale) -->
34
+ <line x1="0" y1="420.0849886194532" x2="1015" y2="420.0849886194532" class="grid"/>
35
+ <text x="-10" y="424.0849886194532" text-anchor="end" class="label">0.20µs</text>
36
+ <line x1="0" y1="350.5956953115503" x2="1015" y2="350.5956953115503" class="grid"/>
37
+ <text x="-10" y="354.5956953115503" text-anchor="end" class="label">0.50µs</text>
38
+ <line x1="0" y1="298.029074194519" x2="1015" y2="298.029074194519" class="grid"/>
39
+ <text x="-10" y="302.029074194519" text-anchor="end" class="label">1.0µs</text>
40
+ <line x1="0" y1="245.46245307748777" x2="1015" y2="245.46245307748777" class="grid"/>
41
+ <text x="-10" y="249.46245307748777" text-anchor="end" class="label">2.0µs</text>
42
+ <line x1="0" y1="175.9731597695848" x2="1015" y2="175.9731597695848" class="grid"/>
43
+ <text x="-10" y="179.9731597695848" text-anchor="end" class="label">5.0µs</text>
44
+ <line x1="0" y1="0" x2="0" y2="460" class="grid"/>
45
+ <text x="0" y="480" text-anchor="middle" class="label">10</text>
46
+ <line x1="76.38636139973525" y1="0" x2="76.38636139973525" y2="460" class="grid"/>
47
+ <text x="76.38636139973525" y="480" text-anchor="middle" class="label">20</text>
48
+ <line x1="177.36363860026475" y1="0" x2="177.36363860026475" y2="460" class="grid"/>
49
+ <text x="177.36363860026475" y="480" text-anchor="middle" class="label">50</text>
50
+ <line x1="253.75" y1="0" x2="253.75" y2="460" class="grid"/>
51
+ <text x="253.75" y="480" text-anchor="middle" class="label">100</text>
52
+ <line x1="330.1363613997352" y1="0" x2="330.1363613997352" y2="460" class="grid"/>
53
+ <text x="330.1363613997352" y="480" text-anchor="middle" class="label">200</text>
54
+ <line x1="431.1136386002648" y1="0" x2="431.1136386002648" y2="460" class="grid"/>
55
+ <text x="431.1136386002648" y="480" text-anchor="middle" class="label">500</text>
56
+ <line x1="507.5" y1="0" x2="507.5" y2="460" class="grid"/>
57
+ <text x="507.5" y="480" text-anchor="middle" class="label">1k</text>
58
+ <line x1="583.8863613997353" y1="0" x2="583.8863613997353" y2="460" class="grid"/>
59
+ <text x="583.8863613997353" y="480" text-anchor="middle" class="label">2k</text>
60
+ <line x1="684.8636386002647" y1="0" x2="684.8636386002647" y2="460" class="grid"/>
61
+ <text x="684.8636386002647" y="480" text-anchor="middle" class="label">5k</text>
62
+ <line x1="761.25" y1="0" x2="761.25" y2="460" class="grid"/>
63
+ <text x="761.25" y="480" text-anchor="middle" class="label">10k</text>
64
+ <line x1="837.6363613997353" y1="0" x2="837.6363613997353" y2="460" class="grid"/>
65
+ <text x="837.6363613997353" y="480" text-anchor="middle" class="label">20k</text>
66
+ <line x1="938.6136386002647" y1="0" x2="938.6136386002647" y2="460" class="grid"/>
67
+ <text x="938.6136386002647" y="480" text-anchor="middle" class="label">50k</text>
68
+ <line x1="1015" y1="0" x2="1015" y2="460" class="grid"/>
69
+ <text x="1015" y="480" text-anchor="middle" class="label">100k</text>
70
+ <!-- Y-axis -->
71
+ <line x1="0" y1="0" x2="0" y2="460" class="axis"/>
72
+
73
+ <!-- X-axis -->
74
+ <line x1="0" y1="460" x2="1015" y2="460" class="axis"/>
75
+
76
+ <!-- Axis labels -->
77
+ <text x="507.5" y="510" text-anchor="middle" class="axis-title">Tree Size (items) - Log Scale</text>
78
+ <text transform="rotate(-90,-70,230)" x="-70" y="230" text-anchor="middle" class="axis-title">Execution Time (µs)</text>
79
+ <path d="M 0 184.24323201331856 L 76.38636139973525 52.566621117031275 L 177.36363860026475 281.19916259702654 L 253.75 99.85536010153385 L 330.1363613997352 155.21187981803513 L 431.1136386002648 233.50965785939817 L 507.5 133.2733413312567 L 583.8863613997353 201.83264227911127 L 684.8636386002647 241.38839289106662 L 761.25 208.28968014579195 L 837.6363613997353 230.0452899203906 L 938.6136386002647 250.83160914868958 L 1015 239.21693209610623" class="register-mean"/>
80
+ <path d="M 0 355.7737177734165 L 76.38636139973525 198.38195021909638 L 177.36363860026475 389.2787558924 L 253.75 299.9293231046087 L 330.1363613997352 329.9185992616883 L 431.1136386002648 311.2353680811475 L 507.5 407.4333788829687 L 583.8863613997353 327.2743390082418 L 684.8636386002647 263.6839058972088 L 761.25 68.15862189293904 L 837.6363613997353 319.27642224679016 L 938.6136386002647 290.4087422006638 L 1015 293.63242513417225" class="lookup-mean"/>
81
+ <circle cx="0" cy="184.24323201331856" r="4" class="register-dot"/>
82
+ <circle cx="76.38636139973525" cy="52.566621117031275" r="4" class="register-dot"/>
83
+ <circle cx="177.36363860026475" cy="281.19916259702654" r="4" class="register-dot"/>
84
+ <circle cx="253.75" cy="99.85536010153385" r="4" class="register-dot"/>
85
+ <circle cx="330.1363613997352" cy="155.21187981803513" r="4" class="register-dot"/>
86
+ <circle cx="431.1136386002648" cy="233.50965785939817" r="4" class="register-dot"/>
87
+ <circle cx="507.5" cy="133.2733413312567" r="4" class="register-dot"/>
88
+ <circle cx="583.8863613997353" cy="201.83264227911127" r="4" class="register-dot"/>
89
+ <circle cx="684.8636386002647" cy="241.38839289106662" r="4" class="register-dot"/>
90
+ <circle cx="761.25" cy="208.28968014579195" r="4" class="register-dot"/>
91
+ <circle cx="837.6363613997353" cy="230.0452899203906" r="4" class="register-dot"/>
92
+ <circle cx="938.6136386002647" cy="250.83160914868958" r="4" class="register-dot"/>
93
+ <circle cx="1015" cy="239.21693209610623" r="4" class="register-dot"/>
94
+ <circle cx="0" cy="355.7737177734165" r="4" class="lookup-dot"/>
95
+ <circle cx="76.38636139973525" cy="198.38195021909638" r="4" class="lookup-dot"/>
96
+ <circle cx="177.36363860026475" cy="389.2787558924" r="4" class="lookup-dot"/>
97
+ <circle cx="253.75" cy="299.9293231046087" r="4" class="lookup-dot"/>
98
+ <circle cx="330.1363613997352" cy="329.9185992616883" r="4" class="lookup-dot"/>
99
+ <circle cx="431.1136386002648" cy="311.2353680811475" r="4" class="lookup-dot"/>
100
+ <circle cx="507.5" cy="407.4333788829687" r="4" class="lookup-dot"/>
101
+ <circle cx="583.8863613997353" cy="327.2743390082418" r="4" class="lookup-dot"/>
102
+ <circle cx="684.8636386002647" cy="263.6839058972088" r="4" class="lookup-dot"/>
103
+ <circle cx="761.25" cy="68.15862189293904" r="4" class="lookup-dot"/>
104
+ <circle cx="837.6363613997353" cy="319.27642224679016" r="4" class="lookup-dot"/>
105
+ <circle cx="938.6136386002647" cy="290.4087422006638" r="4" class="lookup-dot"/>
106
+ <circle cx="1015" cy="293.63242513417225" r="4" class="lookup-dot"/>
107
+ <!-- Legend -->
108
+ <g transform="translate(20, 20)">
109
+ <rect x="0" y="0" width="190" height="80" fill="white" stroke="#ccc" stroke-width="1"/>
110
+
111
+ <!-- Register Instance Legend -->
112
+ <text x="10" y="20" class="legend" font-weight="bold">Register Instance</text>
113
+ <line x1="10" y1="30" x2="40" y2="30" class="register-mean"/>
114
+ <circle cx="25" cy="30" r="3" class="register-dot"/>
115
+ <text x="45" y="34" class="legend">Average Timing</text>
116
+
117
+ <!-- Lookup Instance Legend -->
118
+ <text x="10" y="55" class="legend" font-weight="bold">Lookup Instance</text>
119
+ <line x1="10" y1="65" x2="40" y2="65" class="lookup-mean"/>
120
+ <circle cx="25" cy="65" r="3" class="lookup-dot"/>
121
+ <text x="45" y="69" class="legend">Average Timing</text>
122
+ </g>
123
+
124
+ </g>
125
+
126
+ <!-- Test Metadata Section -->
127
+ <g transform="translate(50, 620)">
128
+ <!-- Left Column: System Information -->
129
+ <g transform="translate(20, 20)">
130
+ <text x="0" y="0" class="metadata-section">System Information</text>
131
+
132
+ <text x="0" y="25" class="metadata-label">Test Date:</text>
133
+ <text x="150" y="25" class="metadata-value">2025-07-24</text>
134
+
135
+ <text x="0" y="45" class="metadata-label">Package Version:</text>
136
+ <text x="150" y="45" class="metadata-value">@fjell/registry v4.4.5</text>
137
+
138
+ <text x="0" y="65" class="metadata-label">Node.js Version:</text>
139
+ <text x="150" y="65" class="metadata-value">v22.0.0 (darwin arm64)</text>
140
+
141
+ <text x="0" y="85" class="metadata-label">Platform:</text>
142
+ <text x="150" y="85" class="metadata-value">darwin arm64</text>
143
+
144
+ <text x="0" y="105" class="metadata-label">Compiler:</text>
145
+ <text x="150" y="105" class="metadata-value">TypeScript + Vite</text>
146
+ </g>
147
+
148
+ <!-- Center Column: Test Configuration -->
149
+ <g transform="translate(330, 20)">
150
+ <text x="0" y="0" class="metadata-section">Test Configuration</text>
151
+
152
+ <text x="0" y="25" class="metadata-label">Test Rounds:</text>
153
+ <text x="120" y="25" class="metadata-value">100 per tree size</text>
154
+
155
+ <text x="0" y="45" class="metadata-label">Iterations per Round:</text>
156
+ <text x="120" y="45" class="metadata-value">200 operations</text>
157
+
158
+ <text x="0" y="65" class="metadata-label">Total Measurements:</text>
159
+ <text x="120" y="65" class="metadata-value">20,000 per data point</text>
160
+ </g>
161
+
162
+ <!-- Right Column: Test Notes -->
163
+ <g transform="translate(600, 20)">
164
+ <text x="0" y="0" class="metadata-section">Test Notes</text>
165
+ <text x="0" y="25" class="metadata-label">• Performance measurements use Node.js performance.now() with microsecond precision</text>
166
+ <text x="0" y="42" class="metadata-label">• Each test includes warm-up iterations to minimize JIT compilation effects</text>
167
+ <text x="0" y="59" class="metadata-label">• Logging is mocked during timing tests to eliminate I/O overhead</text>
168
+ <text x="0" y="76" class="metadata-label">• Tests verify both mean performance and consistency (low standard deviation)</text>
169
+ <text x="0" y="93" class="metadata-label">• Statistical analysis ensures reliable performance measurements across all tree sizes</text>
170
+ </g>
171
+ </g>
172
+ </svg>
@@ -14,13 +14,21 @@
14
14
  */
15
15
 
16
16
  // Import the actual registry functionality
17
+ import { AllItemTypeArrays } from '@fjell/core';
17
18
  import { createRegistry } from '../src/Registry';
18
19
  import { createInstance } from '../src/Instance';
19
20
  import type { Registry } from '../src/types';
20
21
 
21
22
  // Helper function to require a service (throw if not found)
22
- function requireService(registry: Registry, keyPath: string[], options?: { scopes?: string[] }): any {
23
- const result = registry.get(keyPath, options);
23
+ function requireService<
24
+ S extends string,
25
+ L1 extends string = never,
26
+ L2 extends string = never,
27
+ L3 extends string = never,
28
+ L4 extends string = never,
29
+ L5 extends string = never,
30
+ >(registry: Registry, keyPath: AllItemTypeArrays<S, L1, L2, L3, L4, L5>, options?: { scopes?: string[] }): any {
31
+ const result = registry.get<S, L1, L2, L3, L4, L5>(keyPath, options);
24
32
  if (!result) {
25
33
  throw new Error(`Required service '${keyPath.join('.')}' not found`);
26
34
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjell/registry",
3
- "version": "4.4.15",
3
+ "version": "4.4.17",
4
4
  "keywords": [
5
5
  "registry",
6
6
  "fjell"
@@ -22,7 +22,7 @@
22
22
  "type": "module",
23
23
  "dependencies": {
24
24
  "@fjell/core": "^4.4.13",
25
- "@fjell/logging": "^4.4.14",
25
+ "@fjell/logging": "^4.4.17",
26
26
  "deepmerge": "^4.3.1"
27
27
  },
28
28
  "devDependencies": {