@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 +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +123 -34
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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(
|
|
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
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|
-
|
|
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 "
|
|
218
|
+
// keys like "/*/" that match nothing.
|
|
137
219
|
if (parts.length < 3) {
|
|
138
220
|
return undefined;
|
|
139
221
|
}
|
|
140
|
-
//
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
|
147
|
-
const result = this.regexEntries.find((entry) => entry.pattern.test(
|
|
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.
|
|
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.
|
|
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(
|
|
179
|
-
// An empty path would key the entry at "
|
|
180
|
-
//
|
|
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
|
-
|
|
185
|
-
const
|
|
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
|
|
193
|
-
// like units / enum survive when a plugin only updates
|
|
194
|
-
|
|
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.
|
|
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.
|
|
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":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED