UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 2.79 kB
{"version":3,"file":"ClassRegistry.mjs","names":[],"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"],"mappings":";;AAcA,MAAa,OAAO;AAGpB,IAAa,gBAAb,MAA2B;CAIzB,cAAc;AACZ,OAAK,wBAAQ,IAAI,KAAK;AACtB,OAAA,yBAAY,IAAI,KAAK;;CAGvB,IAAI,WAA4B;AAC9B,SAAO,KAAK,MAAM,IAAI,UAAU;;CAGlC,SAAY,WAAsB;EAChC,MAAM,cAAc,KAAK,MAAM,IAAI,UAAU;AAC7C,MAAI,CAAC,YACH,OAAM,IAAI,YAAY,2BAA2B,YAAY;AAE/D,SAAO;;CAGT,SAAS,kBAAuB,WAAoB;AAClD,MAAI,UACF,MAAK,MAAM,IAAI,WAAW,iBAAiB;OACtC;AACL,QAAK,MAAM,IAAI,iBAAiB,MAAM,iBAAiB;AAGvD,QAAK,MAAM,IAAI,iBAAiB,KAAK,aAAa,EAAE,iBAAiB;;;CAIzE,YAAY,YAAyB;AACnC,SAAO,KAAA,OAAU,IAAI,WAAW;;CAGlC,YAAY,kBAAuB,YAAqB;AACtD,OAAA,OAAU,IACR,eAAA,QAAA,eAAA,KAAA,IAAA,aAAc,iBAAiB,KAAK,aAAa,EACjD,iBACD;;;AAIL,MAAa,gBAAgB,IAAI,eAAe"}