{"version":3,"sources":["../../../src/utils/classes.ts"],"sourcesContent":["import util from 'node:util'\n\nimport { wrapInTryCatch } from './functions'\nimport type { JSONValueOf } from './types'\n\nif (util?.inspect?.defaultOptions) {\n\tutil.inspect.defaultOptions.depth = Number.MAX_SAFE_INTEGER\n\tutil.inspect.defaultOptions.getters = true\n\tutil.inspect.defaultOptions.numericSeparator = true\n}\n\nconst customInspectSymbol = Symbol.for('nodejs.util.inspect.custom')\n\ntype Accessor<Keys extends object> = {\n\tget: <Key extends keyof Keys>(key: Key, keysObj: Keys) => Keys[Key]\n\tset: <Key extends keyof Keys>(key: Key, value: Keys[Key], keysObj: Keys) => void\n}\n\nfunction WrapWithProperties(): { new <Keys extends Record<string, unknown>>(): Keys } {\n\treturn class {\n\t\t[customInspectSymbol](_, options, inspect) {\n\t\t\toptions.getters = true\n\t\t\toptions.numericSeparator = true\n\t\t\toptions.depth = Number.MAX_SAFE_INTEGER\n\t\t\treturn options.stylize(this.constructor.name, options) + ' ' + inspect((this as any).toJSON?.() ?? this, options)\n\t\t}\n\t} as any\n}\n\n// @ts-expect-error invalid extends\nclass __Root<Keys extends object> extends WrapWithProperties()<Keys> {}\n\nexport class DataClass<Keys extends object> extends __Root<Keys> {\n\tconstructor(\n\t\tkeys: Keys,\n\t\taccess: Accessor<Keys> = {\n\t\t\tget: (key, keys) => keys[key],\n\t\t\tset: (key, value, keys) => {\n\t\t\t\tkeys[key] = value\n\t\t\t},\n\t\t},\n\t) {\n\t\tsuper()\n\t\tObject.keys(keys).forEach((key) => {\n\t\t\tObject.defineProperty(this, key, {\n\t\t\t\tget: () => access.get(key as keyof Keys, keys),\n\t\t\t\tset: (value) => {\n\t\t\t\t\taccess.set(key as keyof Keys, value, keys)\n\t\t\t\t},\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t})\n\t\t})\n\t}\n\n\ttoJSON(): JSONValueOf<Keys> {\n\t\tconst json: Record<string, any> = {}\n\t\tObject.keys(this).forEach((key) => {\n\t\t\tconst value = this[key]\n\t\t\tif (typeof value === 'function' || value === undefined) return\n\t\t\tjson[key] =  wrapInTryCatch(() => (value as any)?.toJSON?.() ?? structuredClone(value), value)\n\t\t})\n\t\treturn json as any\n\t}\n\n\ttoString() {\n\t\treturn JSON.stringify(this.toJSON())\n\t}\n}\n"],"mappings":"0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAiB,0BAEjBC,EAA+B,uBAG3B,EAAAC,SAAM,SAAS,iBAClB,EAAAA,QAAK,QAAQ,eAAe,MAAQ,OAAO,iBAC3C,EAAAA,QAAK,QAAQ,eAAe,QAAU,GACtC,EAAAA,QAAK,QAAQ,eAAe,iBAAmB,IAGhD,MAAMC,EAAsB,OAAO,IAAI,4BAA4B,EAOnE,SAASC,GAA6E,CACrF,OAAO,KAAM,CACZ,CAACD,CAAmB,EAAEE,EAAGC,EAASC,EAAS,CAC1C,OAAAD,EAAQ,QAAU,GAClBA,EAAQ,iBAAmB,GAC3BA,EAAQ,MAAQ,OAAO,iBAChBA,EAAQ,QAAQ,KAAK,YAAY,KAAMA,CAAO,EAAI,IAAMC,EAAS,KAAa,SAAS,GAAK,KAAMD,CAAO,CACjH,CACD,CACD,CAGA,MAAME,UAAoCJ,EAAmB,CAAQ,CAAC,CAE/D,MAAMN,UAAuCU,CAAa,CAChE,YACCC,EACAC,EAAyB,CACxB,IAAK,CAACC,EAAKF,IAASA,EAAKE,CAAG,EAC5B,IAAK,CAACA,EAAKC,EAAOH,IAAS,CAC1BA,EAAKE,CAAG,EAAIC,CACb,CACD,EACC,CACD,MAAM,EACN,OAAO,KAAKH,CAAI,EAAE,QAASE,GAAQ,CAClC,OAAO,eAAe,KAAMA,EAAK,CAChC,IAAK,IAAMD,EAAO,IAAIC,EAAmBF,CAAI,EAC7C,IAAMG,GAAU,CACfF,EAAO,IAAIC,EAAmBC,EAAOH,CAAI,CAC1C,EACA,WAAY,GACZ,aAAc,EACf,CAAC,CACF,CAAC,CACF,CAEA,QAA4B,CAC3B,MAAMI,EAA4B,CAAC,EACnC,cAAO,KAAK,IAAI,EAAE,QAASF,GAAQ,CAClC,MAAMC,EAAQ,KAAKD,CAAG,EAClB,OAAOC,GAAU,YAAcA,IAAU,SAC7CC,EAAKF,CAAG,KAAK,kBAAe,IAAOC,GAAe,SAAS,GAAK,gBAAgBA,CAAK,EAAGA,CAAK,EAC9F,CAAC,EACMC,CACR,CAEA,UAAW,CACV,OAAO,KAAK,UAAU,KAAK,OAAO,CAAC,CACpC,CACD","names":["classes_exports","__export","DataClass","__toCommonJS","import_node_util","import_functions","util","customInspectSymbol","WrapWithProperties","_","options","inspect","__Root","keys","access","key","value","json"]}