{"version":3,"file":"index.cjs","names":[],"sources":["../src/enum/Enum.ts"],"sourcesContent":["//\r\ntype EnumKey = string;\r\ntype EnumValue = string | number | boolean | object | null | symbol | bigint;\r\ntype EnumObject = Record<EnumKey, EnumValue>;\r\n\r\n//\r\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\r\ntype LastOf<T> = UnionToIntersection<T extends any ? () => T : never> extends () => infer R ? R : never;\r\ntype UnionToTuple<T, L = LastOf<T>> = [T] extends [never] ? [] : [...UnionToTuple<Exclude<T, L>>, L];\r\n\r\n//\r\ntype EntriesToTuple<T extends EnumObject, U extends keyof T = keyof T> = [U] extends [never]\r\n    ? []\r\n    : LastOf<U> extends infer L extends keyof T\r\n      ? [...EntriesToTuple<T, Exclude<U, L>>, readonly [L, T[L]]]\r\n      : [];\r\n\r\n//\r\nfunction enumKeys<const T extends EnumObject>(enumObject: T): Readonly<UnionToTuple<keyof T>> {\r\n    return Object.freeze(Object.keys(enumObject)) as unknown as Readonly<UnionToTuple<keyof T>>;\r\n}\r\n\r\nfunction enumValues<const T extends EnumObject>(enumObject: T): Readonly<UnionToTuple<T[keyof T]>> {\r\n    return Object.freeze(Object.values(enumObject)) as unknown as Readonly<UnionToTuple<T[keyof T]>>;\r\n}\r\n\r\nfunction enumEntries<const T extends EnumObject>(enumObject: T): Readonly<EntriesToTuple<T>> {\r\n    return Object.freeze(Object.entries(enumObject)) as unknown as Readonly<EntriesToTuple<T>>;\r\n}\r\n\r\n//\r\nfunction hasEnumKey<const T extends EnumObject, const K extends EnumKey>(enumObject: T, key: K): key is K & keyof T {\r\n    return key in enumObject;\r\n}\r\n\r\nfunction getEnumValue<const T extends EnumObject, K extends keyof T>(enumObject: T, key: K): T[K] {\r\n    return enumObject[key];\r\n}\r\n\r\n//\r\nfunction Enum<const T extends EnumObject>(enumObject: T): Readonly<T> {\r\n    return Object.freeze(enumObject);\r\n}\r\n\r\ndeclare namespace Enum {\r\n    export function keys<const T extends EnumObject>(enumObject: T): Readonly<UnionToTuple<keyof T>>;\r\n    export function values<const T extends EnumObject>(enumObject: T): Readonly<UnionToTuple<T[keyof T]>>;\r\n    export function entries<const T extends EnumObject>(enumObject: T): Readonly<EntriesToTuple<T>>;\r\n\r\n    //\r\n    export function hasKey<const T extends EnumObject, const K extends EnumKey>(\r\n        enumObject: T,\r\n        key: K\r\n    ): key is K & keyof T;\r\n    export function getValue<const T extends EnumObject, K extends keyof T>(enumObject: T, key: K): T[K];\r\n}\r\n\r\nEnum.keys = enumKeys;\r\nEnum.values = enumValues;\r\nEnum.entries = enumEntries;\r\n\r\nEnum.hasKey = hasEnumKey;\r\nEnum.getValue = getEnumValue;\r\n\r\nexport { Enum };\r\n\r\n//\r\nexport type Enum<T extends EnumObject> = T[keyof T];\r\n"],"mappings":"mEAkBA,SAAS,EAAqC,EAAgD,CAC1F,OAAO,OAAO,OAAO,OAAO,KAAK,EAAW,CAAC,CAGjD,SAAS,EAAuC,EAAmD,CAC/F,OAAO,OAAO,OAAO,OAAO,OAAO,EAAW,CAAC,CAGnD,SAAS,EAAwC,EAA4C,CACzF,OAAO,OAAO,OAAO,OAAO,QAAQ,EAAW,CAAC,CAIpD,SAAS,EAAgE,EAAe,EAA4B,CAChH,OAAO,KAAO,EAGlB,SAAS,EAA4D,EAAe,EAAc,CAC9F,OAAO,EAAW,GAItB,SAAS,EAAiC,EAA4B,CAClE,OAAO,OAAO,OAAO,EAAW,CAgBpC,EAAK,KAAO,EACZ,EAAK,OAAS,EACd,EAAK,QAAU,EAEf,EAAK,OAAS,EACd,EAAK,SAAW"}