fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 2.99 kB
Source Map (JSON)
{"version":3,"file":"ClassRegistry.min.mjs","sources":["../../src/ClassRegistry.ts"],"sourcesContent":["import { FabricError } from './util/internals/console';\n\n/*\n * This Map connects the objects type value with their\n * class implementation. It used from any object to understand which are\n * the classes to enlive when requesting a object.type = 'path' for example.\n * Objects uses it for clipPath, Canvas uses it for everything.\n * This is necessary for generic code to run and enlive instances from serialized representation.\n * You can customize which classes get enlived from SVG parsing using this classRegistry.\n * The Registry start empty and gets filled in depending which files you import.\n * If you want to be able to parse arbitrary SVGs or JSON representation of canvases, coming from\n * different sources you will need to import all fabric because you may need all classes.\n */\n\nexport const JSON = 'json';\nexport const SVG = 'svg';\n\nexport class ClassRegistry {\n declare [JSON]: Map<string, any>;\n declare [SVG]: Map<string, any>;\n\n constructor() {\n this[JSON] = new Map();\n this[SVG] = new Map();\n }\n\n has(classType: string): boolean {\n return this[JSON].has(classType);\n }\n\n getClass<T>(classType: string): T {\n const constructor = this[JSON].get(classType);\n if (!constructor) {\n throw new FabricError(`No class registered for ${classType}`);\n }\n return constructor;\n }\n\n setClass(classConstructor: any, classType?: string) {\n if (classType) {\n this[JSON].set(classType, classConstructor);\n } else {\n this[JSON].set(classConstructor.type, classConstructor);\n // legacy\n // @TODO: needs to be removed in fabric 7 or 8\n this[JSON].set(classConstructor.type.toLowerCase(), classConstructor);\n }\n }\n\n getSVGClass(SVGTagName: string): any {\n return this[SVG].get(SVGTagName);\n }\n\n setSVGClass(classConstructor: any, SVGTagName?: string) {\n this[SVG].set(\n SVGTagName ?? classConstructor.type.toLowerCase(),\n classConstructor,\n );\n }\n}\n\nexport const classRegistry = new ClassRegistry();\n"],"names":["JSON","SVG","ClassRegistry","constructor","this","Map","has","classType","getClass","get","FabricError","concat","setClass","classConstructor","set","type","toLowerCase","getSVGClass","SVGTagName","setSVGClass","classRegistry"],"mappings":"+DAcO,MAAMA,EAAO,OACPC,EAAM,MAEZ,MAAMC,EAIXC,WAAAA,GACEC,KAAKJ,GAAQ,IAAIK,IACjBD,KAAKH,GAAO,IAAII,GAClB,CAEAC,GAAAA,CAAIC,GACF,OAAOH,KAAKJ,GAAMM,IAAIC,EACxB,CAEAC,QAAAA,CAAYD,GACV,MAAMJ,EAAcC,KAAKJ,GAAMS,IAAIF,GACnC,IAAKJ,EACH,MAAM,IAAIO,EAAW,2BAAAC,OAA4BJ,IAEnD,OAAOJ,CACT,CAEAS,QAAAA,CAASC,EAAuBN,GAC1BA,EACFH,KAAKJ,GAAMc,IAAIP,EAAWM,IAE1BT,KAAKJ,GAAMc,IAAID,EAAiBE,KAAMF,GAGtCT,KAAKJ,GAAMc,IAAID,EAAiBE,KAAKC,cAAeH,GAExD,CAEAI,WAAAA,CAAYC,GACV,OAAOd,KAAKH,GAAKQ,IAAIS,EACvB,CAEAC,WAAAA,CAAYN,EAAuBK,GACjCd,KAAKH,GAAKa,IACRI,QAAAA,EAAcL,EAAiBE,KAAKC,cACpCH,EAEJ,QAGWO,EAAgB,IAAIlB"}