@signalk/path-metadata 1.0.0 → 1.0.1
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 +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -32
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ 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;
|
|
14
15
|
private readonly seedEntries;
|
|
15
16
|
constructor(entries: Record<string, PathMetadataEntry>);
|
|
@@ -24,6 +25,7 @@ export declare class MetadataRegistry {
|
|
|
24
25
|
* Returns the metadata entry or undefined if no match.
|
|
25
26
|
*/
|
|
26
27
|
getMetadata(path: string): PathMetadataEntry | undefined;
|
|
28
|
+
private getMetadataForLookupPath;
|
|
27
29
|
/**
|
|
28
30
|
* Get or create a metadata entry for a specific context+path combination.
|
|
29
31
|
* Used internally by FullSignalK to attach metadata to first-seen values.
|
|
@@ -42,7 +44,7 @@ export declare class MetadataRegistry {
|
|
|
42
44
|
* FRONT of the lookup array so getMetadata() finds it before the
|
|
43
45
|
* generic spec wildcard.
|
|
44
46
|
*/
|
|
45
|
-
addMetaData(
|
|
47
|
+
addMetaData(_context: string, path: string, meta: Record<string, unknown>): void;
|
|
46
48
|
/** Return all registered metadata entries (for the /paths endpoint). */
|
|
47
49
|
getAllMetadata(): Record<string, PathMetadataEntry>;
|
|
48
50
|
}
|
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;AA6H9C,qBAAa,gBAAgB;IAM3B,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;gBAEnD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAOtD;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAMb;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAexD,OAAO,CAAC,wBAAwB;IAWhC;;;;;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
|
}
|
|
@@ -94,12 +134,19 @@ function buildRegexArray(allEntries) {
|
|
|
94
134
|
return result;
|
|
95
135
|
}
|
|
96
136
|
class MetadataRegistry {
|
|
137
|
+
// allMetadata stays keyed by the original on-disk keys (/vessels/*/...,
|
|
138
|
+
// /resources/*, /self, /version) and backs getAllMetadata() -> /paths, so
|
|
139
|
+
// the endpoint and PathReference.tsx (which filters on '/vessels/*/') keep
|
|
140
|
+
// the exact same JSON shape. Runtime per-path clones live in a separate
|
|
141
|
+
// path-only map so they never reshape that /paths view.
|
|
97
142
|
allMetadata;
|
|
143
|
+
runtimeClones;
|
|
98
144
|
regexEntries;
|
|
99
145
|
seedEntries;
|
|
100
146
|
constructor(entries) {
|
|
101
147
|
this.seedEntries = entries;
|
|
102
148
|
this.allMetadata = { ...entries };
|
|
149
|
+
this.runtimeClones = {};
|
|
103
150
|
this.regexEntries = buildRegexArray(this.allMetadata);
|
|
104
151
|
}
|
|
105
152
|
/**
|
|
@@ -109,6 +156,7 @@ class MetadataRegistry {
|
|
|
109
156
|
*/
|
|
110
157
|
reset() {
|
|
111
158
|
this.allMetadata = { ...this.seedEntries };
|
|
159
|
+
this.runtimeClones = {};
|
|
112
160
|
this.regexEntries = buildRegexArray(this.allMetadata);
|
|
113
161
|
}
|
|
114
162
|
/**
|
|
@@ -116,7 +164,18 @@ class MetadataRegistry {
|
|
|
116
164
|
* Returns the metadata entry or undefined if no match.
|
|
117
165
|
*/
|
|
118
166
|
getMetadata(path) {
|
|
119
|
-
|
|
167
|
+
// Context-independent lookup first (strip context root + identity).
|
|
168
|
+
// Fall back to the literal path so non-context root entries — /self,
|
|
169
|
+
// /version — still resolve when looked up bare; those keys are not
|
|
170
|
+
// '/<root>/*/<tail>'-shaped, so they never participate in the
|
|
171
|
+
// path-only matcher.
|
|
172
|
+
return (this.getMetadataForLookupPath(toLookupPath(path)) ??
|
|
173
|
+
this.getMetadataForLookupPath('/' + path.replace(/\./g, '/')));
|
|
174
|
+
}
|
|
175
|
+
// Match an already-normalized '/*/<tail>' lookup path against the regex
|
|
176
|
+
// array. Shared by getMetadata and addMetaData's seed lookup so the
|
|
177
|
+
// path-only normalization lives in exactly one place.
|
|
178
|
+
getMetadataForLookupPath(slashPath) {
|
|
120
179
|
const result = this.regexEntries.find((entry) => entry.pattern.test(slashPath));
|
|
121
180
|
return result && result.metadata && Object.keys(result.metadata).length > 0
|
|
122
181
|
? result.metadata
|
|
@@ -129,22 +188,22 @@ class MetadataRegistry {
|
|
|
129
188
|
* so runtime metadata additions don't pollute the template.
|
|
130
189
|
*/
|
|
131
190
|
internalGetMetadata(path) {
|
|
132
|
-
const slashPath = '/' + path.replace(/\./g, '/');
|
|
133
191
|
const parts = path.split('.');
|
|
134
192
|
// Need at least context root + identity + one path segment to
|
|
135
193
|
// produce a meaningful per-path key. Anything shorter would yield
|
|
136
|
-
// keys like "
|
|
194
|
+
// keys like "/*/" that match nothing.
|
|
137
195
|
if (parts.length < 3) {
|
|
138
196
|
return undefined;
|
|
139
197
|
}
|
|
140
|
-
//
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
198
|
+
// Key by PATH alone so a value first seen under any context
|
|
199
|
+
// (vessels.self, meteo.<id>, ...) shares one cloned per-path entry.
|
|
200
|
+
const key = `/*/${parts.slice(2).join('/')}`;
|
|
201
|
+
// Check for an existing per-path clone first
|
|
202
|
+
if (this.runtimeClones[key]) {
|
|
203
|
+
return this.runtimeClones[key];
|
|
145
204
|
}
|
|
146
|
-
// Find via regex against the
|
|
147
|
-
const result = this.regexEntries.find((entry) => entry.pattern.test(
|
|
205
|
+
// Find via regex against the path-only lookup form
|
|
206
|
+
const result = this.regexEntries.find((entry) => entry.pattern.test(key));
|
|
148
207
|
if (!result || Object.keys(result.metadata).length === 0) {
|
|
149
208
|
return undefined;
|
|
150
209
|
}
|
|
@@ -154,10 +213,13 @@ class MetadataRegistry {
|
|
|
154
213
|
// the template, so a plugin tweaking displayScale on one path would
|
|
155
214
|
// silently change every other path that matches the same wildcard.
|
|
156
215
|
const cloned = structuredClone(result.metadata);
|
|
157
|
-
this.
|
|
158
|
-
// Escape special chars first, then replace wildcard
|
|
216
|
+
this.runtimeClones[key] = cloned;
|
|
217
|
+
// Escape special chars first, then replace wildcard. Front of the
|
|
218
|
+
// array so this per-path clone wins over the generic spec wildcard —
|
|
219
|
+
// and so a later addMetaData that merges into this same clone (e.g. a
|
|
220
|
+
// PUT meta displayUnits override) is found ahead of the spec entry.
|
|
159
221
|
const escaped = key.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
|
|
160
|
-
this.regexEntries.
|
|
222
|
+
this.regexEntries.unshift({
|
|
161
223
|
pattern: new RegExp(`^${escaped.replace(/\*/g, '[^/]+')}$`),
|
|
162
224
|
key,
|
|
163
225
|
metadata: cloned
|
|
@@ -175,29 +237,32 @@ class MetadataRegistry {
|
|
|
175
237
|
* FRONT of the lookup array so getMetadata() finds it before the
|
|
176
238
|
* generic spec wildcard.
|
|
177
239
|
*/
|
|
178
|
-
addMetaData(
|
|
179
|
-
// An empty path would key the entry at "
|
|
180
|
-
//
|
|
240
|
+
addMetaData(_context, path, meta) {
|
|
241
|
+
// An empty path would key the entry at "/*/" (no tail) and mask every
|
|
242
|
+
// per-path entry. The context is intentionally ignored: metadata is a
|
|
243
|
+
// path-keyed, context-independent namespace, so a meta delta under ANY
|
|
244
|
+
// context (including an identity-less 'meteo') populates the path for
|
|
245
|
+
// all contexts.
|
|
181
246
|
if (!path) {
|
|
182
247
|
return;
|
|
183
248
|
}
|
|
184
|
-
|
|
185
|
-
const
|
|
186
|
-
const key = `/${root}/*/${path.replace(/\./g, '/')}`;
|
|
187
|
-
const existing = this.allMetadata[key];
|
|
249
|
+
const key = `/*/${path.replace(/\./g, '/')}`;
|
|
250
|
+
const existing = this.runtimeClones[key];
|
|
188
251
|
if (existing) {
|
|
189
252
|
Object.assign(existing, meta);
|
|
190
253
|
return;
|
|
191
254
|
}
|
|
192
|
-
// Seed from the matching spec template, if any, so untouched
|
|
193
|
-
// like units / enum survive when a plugin only updates
|
|
194
|
-
|
|
255
|
+
// Seed from the matching spec template by PATH, if any, so untouched
|
|
256
|
+
// fields like units / enum survive when a plugin only updates
|
|
257
|
+
// description. The key is already the normalized '/*/<tail>' form.
|
|
258
|
+
const seed = this.getMetadataForLookupPath(key);
|
|
195
259
|
const entry = { description: '' };
|
|
196
260
|
if (seed)
|
|
197
261
|
Object.assign(entry, seed);
|
|
198
262
|
Object.assign(entry, meta);
|
|
199
|
-
this.
|
|
200
|
-
// Escape special chars first, then replace wildcard
|
|
263
|
+
this.runtimeClones[key] = entry;
|
|
264
|
+
// Escape special chars first, then replace wildcard. The entry fronts
|
|
265
|
+
// the generic spec wildcard for EVERY context, not just one root.
|
|
201
266
|
const escaped = key.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
|
|
202
267
|
this.regexEntries.unshift({
|
|
203
268
|
pattern: new RegExp(`^${escaped.replace(/\*/g, '[^/]+')}$`),
|
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