{"version":3,"sources":["../../src/lib/index.ts"],"names":["nodePreGyp","resolve","join"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAWA,IAAM,WAAA,GAAcA,2BAAW,CAAA,IAAA,CAAKC,YAAQ,CAAAC,SAAA,CAAK,WAAW,IAAM,EAAA,IAAA,EAAM,gBAAgB,CAAC,CAAC,CAAA;AAGnF,IAAM,EAAE,iBAAA,EAAmB,eAAgB,EAAA,GAAI,UAAQ,WAAW;AAKlE,IAAM,KAAA,GAAN,MAAM,KAAK,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BV,WAAA,CAAY,KAAgB,EAAA,MAAA,GAAsB,IAAM,EAAA;AA1B/D;AAAA;AAAA;AAAA,IAAgB,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAKhB;AAAA;AAAA;AAAA,IAAO,aAAA,CAAA,IAAA,EAAA,IAAA,CAAA;AAKP;AAAA;AAAA;AAAA,IAAiB,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAKjB;AAAA;AAAA;AAAA,IAAiB,aAAA,CAAA,IAAA,EAAA,WAAA,sBAAgB,GAAkB,EAAA,CAAA;AAKnD;AAAA;AAAA;AAAA,IAAiB,aAAA,CAAA,IAAA,EAAA,aAAA,sBAAkB,GAAkB,EAAA,CAAA;AAOpD,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAK,IAAA,CAAA,EAAA,GAAK,KAAK,CAAA,OAAA,CAAQ,KAAK,CAAA;AAC5B,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AAAA;AACf;AAAA;AAAA;AAAA,EAKA,IAAY,UAAqB,GAAA;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,WAAY,CAAA,IAAA,EAAa,OAAA,EAAA;AACnC,IAAA,OAAO,KAAK,IAAK,CAAA,SAAA,CAAU,IAAO,GAAA,CAAA,EAAG,MAAK,IAAK,CAAA,IAAA,CAAK,SAAS,CAAC,OAAO,EAAM,IAAA,KAAA,CAAK,IAAK,CAAA,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA,CAAA;AAAA;AACvG;AAAA;AAAA;AAAA,EAKO,QAAmB,GAAA;AACzB,IAAA,IAAA,CAAK,KAAM,EAAA;AACX,IAAA,OAAO,CAAG,EAAA,IAAA,CAAK,EAAE,CAAA,EAAG,KAAK,UAAU,CAAA,CAAA;AAAA;AACpC;AAAA;AAAA;AAAA,EAKA,CAAS,OAAkC,GAAA;AAE1C,IAAA,IAAI,OAAuB,GAAA,IAAA;AAC3B,IAAQ,OAAA,OAAA,GAAU,OAAQ,CAAA,MAAA,EAAe,MAAA,OAAA;AAAA;AAC1C;AAAA;AAAA;AAAA,EAKQ,UAAsB,GAAA;AAC7B,IAAW,KAAA,MAAA,MAAA,IAAU,KAAK,OAAQ,EAAA,MAAO,MAAO,CAAA,KAAA,KAAU,IAAK,CAAA,KAAA,EAAc,OAAA,IAAA;AAC7E,IAAO,OAAA,KAAA;AAAA;AACR;AAAA;AAAA;AAAA;AAAA,EAMQ,SAAS,KAAsB,EAAA;AACtC,IAAA,MAAM,KAAQ,GAAA,IAAI,KAAK,CAAA,KAAA,EAAO,IAAI,CAAA;AAClC,IAAA,IAAA,CAAK,WAAY,CAAA,GAAA,CAAI,KAAM,CAAA,EAAA,EAAI,KAAK,CAAA;AAAA;AACrC;AAAA;AAAA;AAAA;AAAA,EAMQ,QAAS,CAAA,CAAC,GAAK,EAAA,KAAK,CAA4B,EAAA;AACvD,IAAA,MAAM,KAAQ,GAAA,IAAI,KAAK,CAAA,GAAA,EAAK,IAAI,CAAA;AAChC,IAAA,IAAA,CAAK,SAAU,CAAA,GAAA,CAAI,KAAM,CAAA,EAAA,EAAI,KAAK,CAAA;AAClC,IAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA;AACpB;AAAA;AAAA;AAAA,EAKQ,KAAc,GAAA;AACrB,IAAI,IAAA,MAAA,CAAO,QAAS,CAAA,IAAI,CAAG,EAAA;AAE3B,IAAM,MAAA,OAAA,GAAU,iBAAkB,CAAA,IAAA,CAAK,KAAK,CAAA;AAC5C,IAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,IAAA,CAAK,KAAK,CAAA;AAExC,IAAA,IAAI,OAAO,IAAK,CAAA,KAAA,KAAU,QAAY,IAAA,IAAA,CAAK,YAAc,EAAA;AACxD,MAAK,IAAA,CAAA,EAAA,GAAK,CAAa,UAAA,EAAA,IAAA,CAAK,EAAE,CAAA,CAAA,CAAA;AAAA,KACpB,MAAA,IAAA,OAAA,IAAW,OAAQ,CAAA,CAAC,CAAG,EAAA;AACjC,MAAK,IAAA,CAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,CAAC,CAAA;AAAA,KACd,MAAA,IAAA,KAAA,IAAS,KAAM,CAAA,CAAC,CAAG,EAAA;AAC7B,MAAA,IAAA,CAAK,EAAK,GAAA,OAAA;AACV,MAAK,IAAA,CAAA,QAAA,CAAS,KAAM,CAAA,CAAC,CAAC,CAAA;AAAA,KACvB,MAAA,IAAW,IAAK,CAAA,KAAA,YAAiB,GAAK,EAAA;AACrC,MAAA,KAAA,MAAW,KAAS,IAAA,IAAA,CAAK,KAAO,EAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,KACpD,MAAA,IAAW,MAAM,OAAQ,CAAA,IAAA,CAAK,KAAK,CAAK,IAAA,IAAA,CAAK,iBAAiB,GAAK,EAAA;AAClE,MAAA,KAAA,MAAW,KAAS,IAAA,IAAA,CAAK,KAAO,EAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,KACpD,MAAA,IAAW,IAAK,CAAA,EAAA,KAAO,QAAU,EAAA;AAChC,MAAA,IAAA,CAAK,EAAK,GAAA,QAAA;AACV,MAAW,KAAA,MAAA,KAAA,IAAS,OAAO,OAAQ,CAAA,IAAA,CAAK,KAAqC,CAAG,EAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA;AAGpG,IAAA,MAAA,CAAO,OAAO,IAAI,CAAA;AAAA;AACnB;AAAA;AAAA;AAAA;AAAA,EAMA,OAAc,QAAQ,KAAoB,EAAA;AACzC,IAAA,MAAM,OAAO,OAAO,KAAA;AACpB,IAAA,QAAQ,IAAM;AAAA,MACb,KAAK,QAAU,EAAA;AACd,QAAI,IAAA,KAAA,KAAU,MAAa,OAAA,MAAA;AAC3B,QAAA,IAAI,CAAC,KAAA,CAAM,WAAa,EAAA,IAAA,EAAa,OAAA,QAAA;AACrC,QAAA,OAAO,MAAM,WAAY,CAAA,IAAA;AAAA;AAC1B,MACA,KAAK,UAAY,EAAA;AAChB,QAAA,IAAI,CAAC,KAAA,CAAM,WAAa,EAAA,IAAA,EAAa,OAAA,UAAA;AACrC,QAAA,OAAO,GAAG,KAAM,CAAA,WAAA,CAAY,IAAI,CAAA,CAAA,EAAI,MAAM,MAAM,CAAA,OAAA,CAAA;AAAA;AACjD,MACA,KAAK,WAAA;AACJ,QAAO,OAAA,MAAA;AAAA,MACR;AACC,QAAO,OAAA,IAAA;AAAA;AACT;AACD;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,KAAK,MAAmC,EAAA;AACtD,IAAO,OAAA,CAAC,GAAG,MAAO,CAAA,MAAA,EAAQ,CAAE,CAAA,IAAA,EAAO,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA;AAE/C,CAAA;AAlJkB,MAAA,CAAA,KAAA,EAAA,MAAA,CAAA;AAAX,IAAM,IAAN,GAAA;AAoJP,IAAO,WAAQ,GAAA","file":"index.cjs","sourcesContent":["// Note that this is in a subfolder within src to mimick that when compiled it will be put in dist/{cjs,esm} which is\n// equally a subfolder within dist. This is to ensure that the import path to the package.json is correct.\n\nimport nodePreGyp from '@discordjs/node-pre-gyp';\nimport { join, resolve } from 'node:path';\n\ndeclare namespace Internals {\n\texport function getPromiseDetails(thing: any): number[];\n\texport function getProxyDetails(thing: any): number[];\n}\n\nconst bindingPath = nodePreGyp.find(resolve(join(__dirname, '..', '..', './package.json')));\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nexport const { getPromiseDetails, getProxyDetails } = require(bindingPath) as typeof Internals;\n\n/**\n * The class for deep checking Types\n */\nexport class Type {\n\t/**\n\t * The value to generate a deep Type of\n\t */\n\tpublic readonly value: unknown;\n\n\t/**\n\t * The shallow type of this\n\t */\n\tpublic is: string;\n\n\t/**\n\t * The parent of this Type\n\t */\n\tprivate readonly parent: Type | null;\n\n\t/**\n\t * The child keys of this Type\n\t */\n\tprivate readonly childKeys = new Map<string, Type>();\n\n\t/**\n\t * The child values of this Type\n\t */\n\tprivate readonly childValues = new Map<string, Type>();\n\n\t/**\n\t * @param value The value to generate a deep Type of\n\t * @param parent The parent value used in recursion\n\t */\n\tpublic constructor(value: unknown, parent: Type | null = null) {\n\t\tthis.value = value;\n\t\tthis.is = Type.resolve(value);\n\t\tthis.parent = parent;\n\t}\n\n\t/**\n\t * The type string for the children of this Type\n\t */\n\tprivate get childTypes(): string {\n\t\tif (!this.childValues.size) return '';\n\t\treturn `<${(this.childKeys.size ? `${Type.list(this.childKeys)}, ` : '') + Type.list(this.childValues)}>`;\n\t}\n\n\t/**\n\t * The full type string generated.\n\t */\n\tpublic toString(): string {\n\t\tthis.check();\n\t\treturn `${this.is}${this.childTypes}`;\n\t}\n\n\t/**\n\t * Walks the linked list backwards, for checking circulars.\n\t */\n\tprivate *parents(): IterableIterator<Type> {\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias, consistent-this\n\t\tlet current: Type | null = this;\n\t\twhile ((current = current.parent)) yield current;\n\t}\n\n\t/**\n\t * Checks if the value of this Type is a circular reference to any parent.\n\t */\n\tprivate isCircular(): boolean {\n\t\tfor (const parent of this.parents()) if (parent.value === this.value) return true;\n\t\treturn false;\n\t}\n\n\t/**\n\t * The subtype to create based on this.value's sub value.\n\t * @param value The sub value\n\t */\n\tprivate addValue(value: unknown): void {\n\t\tconst child = new Type(value, this);\n\t\tthis.childValues.set(child.is, child);\n\t}\n\n\t/**\n\t * The subtype to create based on this.value's entries.\n\t * @param entry The entry\n\t */\n\tprivate addEntry([key, value]: [string, unknown]): void {\n\t\tconst child = new Type(key, this);\n\t\tthis.childKeys.set(child.is, child);\n\t\tthis.addValue(value);\n\t}\n\n\t/**\n\t * Get the deep type name that defines the input.\n\t */\n\tprivate check(): void {\n\t\tif (Object.isFrozen(this)) return;\n\n\t\tconst promise = getPromiseDetails(this.value);\n\t\tconst proxy = getProxyDetails(this.value);\n\n\t\tif (typeof this.value === 'object' && this.isCircular()) {\n\t\t\tthis.is = `[Circular:${this.is}]`;\n\t\t} else if (promise && promise[0]) {\n\t\t\tthis.addValue(promise[1]);\n\t\t} else if (proxy && proxy[0]) {\n\t\t\tthis.is = 'Proxy';\n\t\t\tthis.addValue(proxy[0]);\n\t\t} else if (this.value instanceof Map) {\n\t\t\tfor (const entry of this.value) this.addEntry(entry);\n\t\t} else if (Array.isArray(this.value) || this.value instanceof Set) {\n\t\t\tfor (const value of this.value) this.addValue(value);\n\t\t} else if (this.is === 'Object') {\n\t\t\tthis.is = 'Record';\n\t\t\tfor (const entry of Object.entries(this.value as Record<PropertyKey, unknown>)) this.addEntry(entry);\n\t\t}\n\n\t\tObject.freeze(this);\n\t}\n\n\t/**\n\t * Resolves the type name that defines the input.\n\t * @param value The value to get the type name of\n\t */\n\tpublic static resolve(value: any): string {\n\t\tconst type = typeof value;\n\t\tswitch (type) {\n\t\t\tcase 'object': {\n\t\t\t\tif (value === null) return 'null';\n\t\t\t\tif (!value.constructor?.name) return 'Object';\n\t\t\t\treturn value.constructor.name;\n\t\t\t}\n\t\t\tcase 'function': {\n\t\t\t\tif (!value.constructor?.name) return 'Function';\n\t\t\t\treturn `${value.constructor.name}(${value.length}-arity)`;\n\t\t\t}\n\t\t\tcase 'undefined':\n\t\t\t\treturn 'void';\n\t\t\tdefault:\n\t\t\t\treturn type;\n\t\t}\n\t}\n\n\t/**\n\t * Joins the list of child types.\n\t * @param values The values to list\n\t */\n\tprivate static list(values: Map<string, Type>): string {\n\t\treturn [...values.values()].sort().join(' | ');\n\t}\n}\n\nexport default Type;\n"]}