UNPKG

@tldraw/store

Version:

tldraw infinite canvas SDK (store).

8 lines (7 loc) 1.9 kB
{ "version": 3, "sources": ["../../src/lib/devFreeze.ts"], "sourcesContent": ["import { STRUCTURED_CLONE_OBJECT_PROTOTYPE } from '@tldraw/utils'\n\n/**\n * Freeze an object when in development mode. Copied from\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n *\n * @example\n *\n * ```ts\n * const frozen = devFreeze({ a: 1 })\n * ```\n *\n * @param object - The object to freeze.\n * @returns The frozen object when in development mode, or else the object when in other modes.\n * @public\n */\nexport function devFreeze<T>(object: T): T {\n\tif (process.env.NODE_ENV === 'production') {\n\t\treturn object\n\t}\n\tconst proto = Object.getPrototypeOf(object)\n\tif (\n\t\tproto &&\n\t\t!(\n\t\t\tArray.isArray(object) ||\n\t\t\tproto === Object.prototype ||\n\t\t\tproto === null ||\n\t\t\tproto === STRUCTURED_CLONE_OBJECT_PROTOTYPE\n\t\t)\n\t) {\n\t\tconsole.error('cannot include non-js data in a record', object)\n\t\tthrow new Error('cannot include non-js data in a record')\n\t}\n\n\t// Retrieve the property names defined on object\n\tconst propNames = Object.getOwnPropertyNames(object)\n\n\t// Recursively freeze properties before freezing self\n\tfor (const name of propNames) {\n\t\tconst value = (object as any)[name]\n\n\t\tif (value && typeof value === 'object') {\n\t\t\tdevFreeze(value)\n\t\t}\n\t}\n\n\treturn Object.freeze(object)\n}\n"], "mappings": "AAAA,SAAS,yCAAyC;AAgB3C,SAAS,UAAa,QAAc;AAC1C,MAAI,QAAQ,IAAI,aAAa,cAAc;AAC1C,WAAO;AAAA,EACR;AACA,QAAM,QAAQ,OAAO,eAAe,MAAM;AAC1C,MACC,SACA,EACC,MAAM,QAAQ,MAAM,KACpB,UAAU,OAAO,aACjB,UAAU,QACV,UAAU,oCAEV;AACD,YAAQ,MAAM,0CAA0C,MAAM;AAC9D,UAAM,IAAI,MAAM,wCAAwC;AAAA,EACzD;AAGA,QAAM,YAAY,OAAO,oBAAoB,MAAM;AAGnD,aAAW,QAAQ,WAAW;AAC7B,UAAM,QAAS,OAAe,IAAI;AAElC,QAAI,SAAS,OAAO,UAAU,UAAU;AACvC,gBAAU,KAAK;AAAA,IAChB;AAAA,EACD;AAEA,SAAO,OAAO,OAAO,MAAM;AAC5B;", "names": [] }