28 lines
635 B
JavaScript
28 lines
635 B
JavaScript
|
|
// Wrap JsFormatMetadata to add getters for format-specific metadata
|
||
|
|
// This works around the limitation that #[napi(getter)] doesn't work on #[napi(object)]
|
||
|
|
|
||
|
|
export function wrapFormatMetadata(fmt) {
|
||
|
|
if (!fmt || typeof fmt !== "object") return fmt;
|
||
|
|
|
||
|
|
const tag = fmt.format_type;
|
||
|
|
const payload = fmt["0"];
|
||
|
|
|
||
|
|
if (!payload) return fmt;
|
||
|
|
|
||
|
|
try {
|
||
|
|
const data = JSON.parse(payload);
|
||
|
|
|
||
|
|
// Add the typed variant property as a non-enumerable property
|
||
|
|
Object.defineProperty(fmt, tag, {
|
||
|
|
value: data,
|
||
|
|
enumerable: false,
|
||
|
|
writable: false,
|
||
|
|
configurable: false,
|
||
|
|
});
|
||
|
|
} catch (e) {
|
||
|
|
// Ignore JSON parse errors
|
||
|
|
}
|
||
|
|
|
||
|
|
return fmt;
|
||
|
|
}
|