diff --git a/lib/svg-symbol-metadata.test.ts b/lib/svg-symbol-metadata.test.ts index 5ed1110..3536f4d 100644 --- a/lib/svg-symbol-metadata.test.ts +++ b/lib/svg-symbol-metadata.test.ts @@ -23,8 +23,11 @@ describe("validateSvgSymbolMetadata()", () => { always_be_nested: true, }) ).toEqual({ - always_nest: true, - always_be_nested: true, + metadata: { + always_nest: true, + always_be_nested: true, + }, + unknownProperties: [], }); }); @@ -37,10 +40,14 @@ describe("validateSvgSymbolMetadata()", () => { }); it("raises errors when a property is unrecognized", () => { - expect(() => + expect( validateSvgSymbolMetadata({ + always_nest: true, blarp: true, }) - ).toThrow('Unrecognized SVG symbol metadata property "blarp"'); + ).toEqual({ + metadata: { always_nest: true }, + unknownProperties: ["blarp"], + }); }); }); diff --git a/lib/svg-symbol-metadata.ts b/lib/svg-symbol-metadata.ts index c8700c9..c871f52 100644 --- a/lib/svg-symbol-metadata.ts +++ b/lib/svg-symbol-metadata.ts @@ -25,8 +25,11 @@ function isSvgSymbolMetadataBoolean( export type SvgSymbolMetadata = SvgSymbolMetadataBooleans; -export function validateSvgSymbolMetadata(obj: any): SvgSymbolMetadata { - const result: SvgSymbolMetadata = {}; +export function validateSvgSymbolMetadata( + obj: any +): { metadata: SvgSymbolMetadata; unknownProperties: string[] } { + const metadata: SvgSymbolMetadata = {}; + const unknownProperties: string[] = []; for (let key in obj) { const value: unknown = obj[key]; if (isSvgSymbolMetadataBoolean(key)) { @@ -35,10 +38,10 @@ export function validateSvgSymbolMetadata(obj: any): SvgSymbolMetadata { `Expected "${key}" to be a boolean, but it is a ${typeof value}!` ); } - result[key] = value; + metadata[key] = value; } else { - throw new Error(`Unrecognized SVG symbol metadata property "${key}"`); + unknownProperties.push(key); } } - return result; + return { metadata, unknownProperties }; } diff --git a/lib/vocabulary-builder.ts b/lib/vocabulary-builder.ts index 67b8b07..fe0d8e2 100644 --- a/lib/vocabulary-builder.ts +++ b/lib/vocabulary-builder.ts @@ -127,7 +127,17 @@ export function build() { }); const symbol = convertSvgMarkupToSymbolData(filename, svgMarkup); if (metaToml) { - symbol.meta = validateSvgSymbolMetadata(toml.parse(metaToml)); + const { metadata, unknownProperties } = validateSvgSymbolMetadata( + toml.parse(metaToml) + ); + symbol.meta = metadata; + if (unknownProperties.length) { + console.log( + `WARNING: Found unknown metadata properties ${unknownProperties.join( + ", " + )}.` + ); + } } vocab.push(symbol); }