@signalk/path-metadata 1.0.0 → 1.0.2

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/dist/index.d.ts CHANGED
@@ -10,7 +10,9 @@ export { getAISShipTypeName } from './ais-ship-types';
10
10
  export { getAtonTypeName } from './aton-types';
11
11
  export declare class MetadataRegistry {
12
12
  private allMetadata;
13
+ private runtimeClones;
13
14
  private regexEntries;
15
+ private readonly lookupCache;
14
16
  private readonly seedEntries;
15
17
  constructor(entries: Record<string, PathMetadataEntry>);
16
18
  /**
@@ -24,6 +26,8 @@ export declare class MetadataRegistry {
24
26
  * Returns the metadata entry or undefined if no match.
25
27
  */
26
28
  getMetadata(path: string): PathMetadataEntry | undefined;
29
+ private getMetadataForLookupPath;
30
+ private prependRegexEntry;
27
31
  /**
28
32
  * Get or create a metadata entry for a specific context+path combination.
29
33
  * Used internally by FullSignalK to attach metadata to first-seen values.
@@ -42,7 +46,7 @@ export declare class MetadataRegistry {
42
46
  * FRONT of the lookup array so getMetadata() finds it before the
43
47
  * generic spec wildcard.
44
48
  */
45
- addMetaData(context: string, path: string, meta: Record<string, unknown>): void;
49
+ addMetaData(_context: string, path: string, meta: Record<string, unknown>): void;
46
50
  /** Return all registered metadata entries (for the /paths endpoint). */
47
51
  getAllMetadata(): Record<string, PathMetadataEntry>;
48
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAiBhD,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAmF9C,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;gBAEnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAMtD;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAUxD;;;;;OAKG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IA0ChE;;;;;;;;;;OAUG;IACH,WAAW,CACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI;IAgCP,wEAAwE;IACxE,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;CAGpD;AAOD,eAAO,MAAM,gBAAgB,kBAAmC,CAAA;AAEhE,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEvE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAiBhD,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAmI9C,qBAAa,gBAAgB;IAM3B,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,YAAY,CAAc;IAKlC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;IAC1E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;gBAEnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAOtD;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAOb;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAexD,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,iBAAiB;IAKzB;;;;;OAKG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IA2ChE;;;;;;;;;;OAUG;IACH,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI;IAmCP,wEAAwE;IACxE,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;CAGpD;AAOD,eAAO,MAAM,gBAAgB,kBAAmC,CAAA;AAEhE,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEvE"}
package/dist/index.js CHANGED
@@ -58,26 +58,66 @@ function expandContextPrefixes(entries) {
58
58
  }
59
59
  return expanded;
60
60
  }
61
+ // Metadata is a PATH-keyed, context-INDEPENDENT namespace: a path's units /
62
+ // description are identical no matter which context root it appears under
63
+ // (vessels.<id>, meteo.<id>, aircraft.<id>, a bare 'meteo', ...). The four
64
+ // entity families share one data model, so their identity-scoped seed keys
65
+ // (/vessels/*/<path> and the /aircraft|/aton|/sar expansions) reduce to a
66
+ // single path-keyed matcher '/*/<path>'. Non-context keys (/self, /version,
67
+ // the /resources/* tree) are not '/<root>/*/<path>'-shaped and pass through
68
+ // unchanged, so they keep literal matching and cannot leak across roots.
69
+ const CONTEXT_ROOT_PREFIX = /^\/(?:vessels|aircraft|aton|sar)\/\*\//;
70
+ function toMatchKey(key) {
71
+ return key.replace(CONTEXT_ROOT_PREFIX, '/*/');
72
+ }
73
+ // Strip the context root + identity (first two dot segments) so a lookup
74
+ // resolves the same meta under ANY context, yielding the '/*/<tail>' shape
75
+ // the re-keyed matcher expects. This is the FIRST of getMetadata's two
76
+ // lookup stages and assumes a context-prefixed path
77
+ // (vessels.self.<path>, <context>.<identity>.<path>) — the common case.
78
+ // It is not safe for every input: a bare singleton or short-segment path
79
+ // (self, version, meteo.environment.outside.temperature) has no context
80
+ // root + identity to strip, so the two-segment slice produces a '/*/...'
81
+ // form that matches nothing. getMetadata falls back to a literal-path
82
+ // lookup for those, so this strip does not need to handle them.
83
+ function toLookupPath(path) {
84
+ return '/*/' + path.split('.').slice(2).join('/');
85
+ }
61
86
  function buildRegexArray(allEntries) {
62
87
  const result = [];
88
+ const seen = new Set();
63
89
  for (const [key, metadata] of Object.entries(allEntries)) {
64
- // Convert path wildcards to regex: * → [^/]+ and RegExp → [^/]+
65
- const pattern = key
66
- .replace(/\*/g, '[^/]+')
67
- .replace(/RegExp/g, '[^/]+')
68
- .replace(/\(([^)]+)\)/g, '($1)'); // preserve regex groups like (single)|([A-C])
69
90
  // Skip entries whose key ends in a bare wildcard. These are container
70
91
  // shapes (e.g. /vessels/*/electrical/ac/RegExp defines "an AC bus",
71
92
  // not "any child of electrical.ac"). Letting them match would attach
72
93
  // the container description to plugin-invented siblings — matches the
73
- // old @signalk/signalk-schema behaviour.
94
+ // old @signalk/signalk-schema behaviour. Evaluated on the ORIGINAL key,
95
+ // before re-keying.
74
96
  if (key.endsWith('/*') || key.endsWith('/RegExp')) {
75
97
  continue;
76
98
  }
99
+ // Re-key to the path-only matcher. The /aircraft|/aton|/sar expansions
100
+ // collapse onto the same '/*/<tail>' matcher as their /vessels/* source;
101
+ // the seen-Set drops the duplicates so the hot-path .find() stays short.
102
+ // Object.entries preserves insertion order and expandContextPrefixes
103
+ // emits the /vessels/* key before its expansions, so the first (and only
104
+ // retained) entry carries the /vessels/* metadata — identical object,
105
+ // so dropping the rest is harmless.
106
+ const matchKey = toMatchKey(key);
107
+ if (seen.has(matchKey)) {
108
+ continue;
109
+ }
110
+ seen.add(matchKey);
111
+ // Convert path wildcards to regex on the re-keyed matcher:
112
+ // * → [^/]+ and RegExp → [^/]+
113
+ const pattern = matchKey
114
+ .replace(/\*/g, '[^/]+')
115
+ .replace(/RegExp/g, '[^/]+')
116
+ .replace(/\(([^)]+)\)/g, '($1)'); // preserve regex groups like (single)|([A-C])
77
117
  try {
78
118
  result.push({
79
119
  pattern: new RegExp(`^${pattern}$`),
80
- key,
120
+ key: matchKey,
81
121
  metadata
82
122
  });
83
123
  }
@@ -93,13 +133,30 @@ function buildRegexArray(allEntries) {
93
133
  }
94
134
  return result;
95
135
  }
136
+ // Lookup keys are context-free for vessel-style paths, so the memo is
137
+ // bounded by the number of distinct paths in practice. The cap guards
138
+ // against unbounded growth from literal-path fallback lookups, whose keys
139
+ // carry the context identity (e.g. one per passing AIS target).
140
+ const MAX_LOOKUP_CACHE_ENTRIES = 10000;
96
141
  class MetadataRegistry {
142
+ // allMetadata stays keyed by the original on-disk keys (/vessels/*/...,
143
+ // /resources/*, /self, /version) and backs getAllMetadata() -> /paths, so
144
+ // the endpoint and PathReference.tsx (which filters on '/vessels/*/') keep
145
+ // the exact same JSON shape. Runtime per-path clones live in a separate
146
+ // path-only map so they never reshape that /paths view.
97
147
  allMetadata;
148
+ runtimeClones;
98
149
  regexEntries;
150
+ // A lookup is a linear regex scan, and a path with no match scans the
151
+ // whole array twice. Callers such as the staleness sweep look up the same
152
+ // paths every second, so results (misses included, as null) are memoised
153
+ // until regexEntries changes.
154
+ lookupCache = new Map();
99
155
  seedEntries;
100
156
  constructor(entries) {
101
157
  this.seedEntries = entries;
102
158
  this.allMetadata = { ...entries };
159
+ this.runtimeClones = {};
103
160
  this.regexEntries = buildRegexArray(this.allMetadata);
104
161
  }
105
162
  /**
@@ -109,18 +166,44 @@ class MetadataRegistry {
109
166
  */
110
167
  reset() {
111
168
  this.allMetadata = { ...this.seedEntries };
169
+ this.runtimeClones = {};
112
170
  this.regexEntries = buildRegexArray(this.allMetadata);
171
+ this.lookupCache.clear();
113
172
  }
114
173
  /**
115
174
  * Look up metadata for a dot-separated Signal K path.
116
175
  * Returns the metadata entry or undefined if no match.
117
176
  */
118
177
  getMetadata(path) {
119
- const slashPath = '/' + path.replace(/\./g, '/');
178
+ // Context-independent lookup first (strip context root + identity).
179
+ // Fall back to the literal path so non-context root entries — /self,
180
+ // /version — still resolve when looked up bare; those keys are not
181
+ // '/<root>/*/<tail>'-shaped, so they never participate in the
182
+ // path-only matcher.
183
+ return (this.getMetadataForLookupPath(toLookupPath(path)) ??
184
+ this.getMetadataForLookupPath('/' + path.replace(/\./g, '/')));
185
+ }
186
+ // Match an already-normalized '/*/<tail>' lookup path against the regex
187
+ // array. Shared by getMetadata and addMetaData's seed lookup so the
188
+ // path-only normalization lives in exactly one place.
189
+ getMetadataForLookupPath(slashPath) {
190
+ const cached = this.lookupCache.get(slashPath);
191
+ if (cached !== undefined) {
192
+ return cached ?? undefined;
193
+ }
120
194
  const result = this.regexEntries.find((entry) => entry.pattern.test(slashPath));
121
- return result && result.metadata && Object.keys(result.metadata).length > 0
195
+ const metadata = result && result.metadata && Object.keys(result.metadata).length > 0
122
196
  ? result.metadata
123
197
  : undefined;
198
+ if (this.lookupCache.size >= MAX_LOOKUP_CACHE_ENTRIES) {
199
+ this.lookupCache.clear();
200
+ }
201
+ this.lookupCache.set(slashPath, metadata ?? null);
202
+ return metadata;
203
+ }
204
+ prependRegexEntry(entry) {
205
+ this.regexEntries.unshift(entry);
206
+ this.lookupCache.clear();
124
207
  }
125
208
  /**
126
209
  * Get or create a metadata entry for a specific context+path combination.
@@ -129,22 +212,22 @@ class MetadataRegistry {
129
212
  * so runtime metadata additions don't pollute the template.
130
213
  */
131
214
  internalGetMetadata(path) {
132
- const slashPath = '/' + path.replace(/\./g, '/');
133
215
  const parts = path.split('.');
134
216
  // Need at least context root + identity + one path segment to
135
217
  // produce a meaningful per-path key. Anything shorter would yield
136
- // keys like "/vessels/*/" that match nothing.
218
+ // keys like "/*/" that match nothing.
137
219
  if (parts.length < 3) {
138
220
  return undefined;
139
221
  }
140
- // Use wildcard key so all identities share the same cloned entry
141
- const key = `/${parts[0]}/*/${parts.slice(2).join('/')}`;
142
- // Check for existing wildcard entry first
143
- if (this.allMetadata[key]) {
144
- return this.allMetadata[key];
222
+ // Key by PATH alone so a value first seen under any context
223
+ // (vessels.self, meteo.<id>, ...) shares one cloned per-path entry.
224
+ const key = `/*/${parts.slice(2).join('/')}`;
225
+ // Check for an existing per-path clone first
226
+ if (this.runtimeClones[key]) {
227
+ return this.runtimeClones[key];
145
228
  }
146
- // Find via regex against the full path
147
- const result = this.regexEntries.find((entry) => entry.pattern.test(slashPath));
229
+ // Find via regex against the path-only lookup form
230
+ const result = this.regexEntries.find((entry) => entry.pattern.test(key));
148
231
  if (!result || Object.keys(result.metadata).length === 0) {
149
232
  return undefined;
150
233
  }
@@ -154,10 +237,13 @@ class MetadataRegistry {
154
237
  // the template, so a plugin tweaking displayScale on one path would
155
238
  // silently change every other path that matches the same wildcard.
156
239
  const cloned = structuredClone(result.metadata);
157
- this.allMetadata[key] = cloned;
158
- // Escape special chars first, then replace wildcard
240
+ this.runtimeClones[key] = cloned;
241
+ // Escape special chars first, then replace wildcard. Front of the
242
+ // array so this per-path clone wins over the generic spec wildcard —
243
+ // and so a later addMetaData that merges into this same clone (e.g. a
244
+ // PUT meta displayUnits override) is found ahead of the spec entry.
159
245
  const escaped = key.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
160
- this.regexEntries.push({
246
+ this.prependRegexEntry({
161
247
  pattern: new RegExp(`^${escaped.replace(/\*/g, '[^/]+')}$`),
162
248
  key,
163
249
  metadata: cloned
@@ -175,31 +261,34 @@ class MetadataRegistry {
175
261
  * FRONT of the lookup array so getMetadata() finds it before the
176
262
  * generic spec wildcard.
177
263
  */
178
- addMetaData(context, path, meta) {
179
- // An empty path would key the entry at "/vessels/*/" (no tail) and
180
- // mask every per-vessel entry under the same context root.
264
+ addMetaData(_context, path, meta) {
265
+ // An empty path would key the entry at "/*/" (no tail) and mask every
266
+ // per-path entry. The context is intentionally ignored: metadata is a
267
+ // path-keyed, context-independent namespace, so a meta delta under ANY
268
+ // context (including an identity-less 'meteo') populates the path for
269
+ // all contexts.
181
270
  if (!path) {
182
271
  return;
183
272
  }
184
- // Use wildcard key pattern so lookups with any identity match
185
- const root = context.split('.')[0];
186
- const key = `/${root}/*/${path.replace(/\./g, '/')}`;
187
- const existing = this.allMetadata[key];
273
+ const key = `/*/${path.replace(/\./g, '/')}`;
274
+ const existing = this.runtimeClones[key];
188
275
  if (existing) {
189
276
  Object.assign(existing, meta);
190
277
  return;
191
278
  }
192
- // Seed from the matching spec template, if any, so untouched fields
193
- // like units / enum survive when a plugin only updates description.
194
- const seed = this.getMetadata(`${context}.${path}`);
279
+ // Seed from the matching spec template by PATH, if any, so untouched
280
+ // fields like units / enum survive when a plugin only updates
281
+ // description. The key is already the normalized '/*/<tail>' form.
282
+ const seed = this.getMetadataForLookupPath(key);
195
283
  const entry = { description: '' };
196
284
  if (seed)
197
285
  Object.assign(entry, seed);
198
286
  Object.assign(entry, meta);
199
- this.allMetadata[key] = entry;
200
- // Escape special chars first, then replace wildcard
287
+ this.runtimeClones[key] = entry;
288
+ // Escape special chars first, then replace wildcard. The entry fronts
289
+ // the generic spec wildcard for EVERY context, not just one root.
201
290
  const escaped = key.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
202
- this.regexEntries.unshift({
291
+ this.prependRegexEntry({
203
292
  pattern: new RegExp(`^${escaped.replace(/\*/g, '[^/]+')}$`),
204
293
  key,
205
294
  metadata: entry
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signalk/path-metadata",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Signal K path metadata registry — well-known path descriptions, units, and enums",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",