fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 3.78 kB
Source Map (JSON)
{"version":3,"file":"ClassRegistry.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","Map","has","classType","getClass","get","FabricError","concat","setClass","classConstructor","set","type","toLowerCase","getSVGClass","SVGTagName","setSVGClass","classRegistry"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMA,IAAI,GAAG,OAAM;AACnB,MAAMC,GAAG,GAAG,MAAK;AAEjB,MAAMC,aAAa,CAAC;AAIzBC,EAAAA,WAAWA,GAAG;AACZ,IAAA,IAAI,CAACH,IAAI,CAAC,GAAG,IAAII,GAAG,EAAE,CAAA;AACtB,IAAA,IAAI,CAACH,GAAG,CAAC,GAAG,IAAIG,GAAG,EAAE,CAAA;AACvB,GAAA;EAEAC,GAAGA,CAACC,SAAiB,EAAW;IAC9B,OAAO,IAAI,CAACN,IAAI,CAAC,CAACK,GAAG,CAACC,SAAS,CAAC,CAAA;AAClC,GAAA;EAEAC,QAAQA,CAAID,SAAiB,EAAK;IAChC,MAAMH,WAAW,GAAG,IAAI,CAACH,IAAI,CAAC,CAACQ,GAAG,CAACF,SAAS,CAAC,CAAA;IAC7C,IAAI,CAACH,WAAW,EAAE;AAChB,MAAA,MAAM,IAAIM,WAAW,CAAA,0BAAA,CAAAC,MAAA,CAA4BJ,SAAS,CAAE,CAAC,CAAA;AAC/D,KAAA;AACA,IAAA,OAAOH,WAAW,CAAA;AACpB,GAAA;AAEAQ,EAAAA,QAAQA,CAACC,gBAAqB,EAAEN,SAAkB,EAAE;AAClD,IAAA,IAAIA,SAAS,EAAE;MACb,IAAI,CAACN,IAAI,CAAC,CAACa,GAAG,CAACP,SAAS,EAAEM,gBAAgB,CAAC,CAAA;AAC7C,KAAC,MAAM;MACL,IAAI,CAACZ,IAAI,CAAC,CAACa,GAAG,CAACD,gBAAgB,CAACE,IAAI,EAAEF,gBAAgB,CAAC,CAAA;AACvD;AACA;AACA,MAAA,IAAI,CAACZ,IAAI,CAAC,CAACa,GAAG,CAACD,gBAAgB,CAACE,IAAI,CAACC,WAAW,EAAE,EAAEH,gBAAgB,CAAC,CAAA;AACvE,KAAA;AACF,GAAA;EAEAI,WAAWA,CAACC,UAAkB,EAAO;IACnC,OAAO,IAAI,CAAChB,GAAG,CAAC,CAACO,GAAG,CAACS,UAAU,CAAC,CAAA;AAClC,GAAA;AAEAC,EAAAA,WAAWA,CAACN,gBAAqB,EAAEK,UAAmB,EAAE;IACtD,IAAI,CAAChB,GAAG,CAAC,CAACY,GAAG,CACXI,UAAU,aAAVA,UAAU,KAAA,KAAA,CAAA,GAAVA,UAAU,GAAIL,gBAAgB,CAACE,IAAI,CAACC,WAAW,EAAE,EACjDH,gBACF,CAAC,CAAA;AACH,GAAA;AACF,CAAA;MAEaO,aAAa,GAAG,IAAIjB,aAAa;;;;"}