{"version":3,"sources":["../../source/unit/unit.ts","../../source/emoji/emoji.ts"],"names":["getConstructorName","isPrimitiveName","isBuiltInObjectName","getPrimitiveName","PRIMITIVES_EMOJIS","BUILT_IN_OBJECTS_EMOJIS","CUSTOM_TYPE_EMOJIS","UNRECOGNIZED_TYPE_EMOJI","VALUE_TYPE_EMOJIS","getPrimitiveEmoji","value","primitiveName","getValueTypeEmoji","name","description","situation","stringified","data","getStringifiedAndTruncatedArray","options","stringifiedOptions","getFormattedPrimitiveValue","getFormattedNonPrimitiveValue","valueType","stringifyValue","array","length","maxLength","firstItems","middle","lastItems","jsonReplacer","isCustomValueDescription","createPrint","prefixEmoji","prefix","processedValue","valueTypeName","valueTypeEmoji","stringifiedValue","displayStringifiedValue","_key","throws","returns"],"mappings":"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","sourcesContent":["import { getConstructorName } from \"@terminal-nerds/snippets-type/constructor\";\nimport { isPrimitiveName } from \"@terminal-nerds/snippets-type/primitive\";\n\nimport { getValueTypeEmoji } from \"../emoji/emoji.ts\";\n\ndeclare global {\n\tinterface String {\n\t\tand: (_description: string) => string;\n\t\ton: (_situation: string) => string;\n\t\tsample: (_data: unknown) => string;\n\t\tsamples: (_data: unknown) => string;\n\t\twith: (_options: Record<string, unknown>) => string;\n\t}\n}\n\n/* eslint-disable func-names */\nString.prototype.and = function (description: string): string {\n\treturn `${this}, and ${description}`;\n};\n\n/* eslint-disable func-names */\nString.prototype.on = function (situation: string): string {\n\treturn `${this} - on ${situation}`;\n};\n\n/* eslint-disable func-names */\nString.prototype.sample = function (value: unknown): string {\n\t/* prettier-ignore */\n\tswitch (typeof value) {\n\t\t/* eslint-disable unicorn/switch-case-braces */\n\t\tcase \"bigint\": return `${this}: ${value}n`;\n\t\tcase \"boolean\": return `${this}: ${value}`;\n\t\tcase \"function\": return `${this}: ${value.toString()}`;\n\t\tcase \"number\": return `${this}: ${value}`;\n\t\tcase \"object\": {\n\t\t\tconst stringified = value ? value.toString() : `null`;\n\n\t\t\treturn `${this}: ${stringified}`;\n\t\t}\n\t\tcase \"undefined\": return this.toString();\n\t\tcase \"string\": return `${this}: \"${value}\"`;\n\t\tcase \"symbol\": return `${this}: ${value.toString()}`;\n\t\t/* eslint-enable unicorn/switch-case-braces */\n\t}\n};\n\n/* eslint-disable func-names */\nString.prototype.samples = function (data: unknown): string {\n\tif (Array.isArray(data) || data instanceof Set) {\n\t\treturn `${this}: ${getStringifiedAndTruncatedArray([...data])}`;\n\t} else {\n\t\t// TODO: Handle more cases\n\t\tthrow new TypeError(\"Unhandled sample data type\");\n\t}\n};\n\n/* eslint-disable func-names */\nString.prototype.with = function (options: Record<string, unknown>): string {\n\tconst stringifiedOptions = JSON.stringify(options, undefined, 1);\n\n\treturn `${this} - with options: ${stringifiedOptions}`;\n};\n\nfunction getFormattedPrimitiveValue(value: unknown): string {\n\t/* prettier-ignore */\n\tswitch(typeof value) {\n\t\t\t/* eslint-disable unicorn/switch-case-braces */\n\t\t\tcase \"bigint\": return `${value}n`;\n\t\t\tcase \"boolean\": return `${value}`;\n\t\t\tcase \"function\": return `${value.toString()}`;\n\t\t\tcase \"number\": return `${value}`;\n\t\t\tcase \"string\": return `\"${value}\"`;\n\t\t\tcase \"symbol\": return `\"${value.toString()}\"`;\n\t\t\tcase \"undefined\": return ``;\n\t\t\tdefault: throw new TypeError(`The value is non-primitive.`);\n\t\t\t/* eslint-enable unicorn/switch-case-braces */\n\t\t}\n}\n\nfunction getFormattedNonPrimitiveValue(value: unknown, valueType: string): string {\n\tswitch (valueType) {\n\t\t/* eslint-disable unicorn/switch-case-braces */\n\t\tcase \"Array\":\n\t\t\treturn `[ ...${(value as Array<unknown>).length} item(s)... ]`;\n\t\tcase \"Set\":\n\t\t\treturn `[ ...${(value as Set<unknown>).size} item(s)... ]`;\n\t\tcase \"Error\":\n\t\t\treturn (value as Error).message;\n\t\tcase \"Map\":\n\t\t\treturn `{ ...${(value as Map<unknown, unknown>).size} entry(ies)... }`;\n\t\tcase \"Object\":\n\t\t\treturn `{ ...${Object.entries(value as object).length} entry(ies)... }`;\n\t\tdefault:\n\t\t\treturn \"\";\n\t\t/* eslint-enable unicorn/switch-case-braces */\n\t}\n}\n\nfunction stringifyValue(value: unknown, valueType: string): string | undefined {\n\treturn isPrimitiveName(valueType.toLowerCase())\n\t\t? getFormattedPrimitiveValue(value)\n\t\t: getFormattedNonPrimitiveValue(value, valueType);\n}\n\nfunction getStringifiedAndTruncatedArray(array: Array<unknown>): string {\n\tconst { length } = array;\n\tconst maxLength = 4;\n\n\tif (length > maxLength) {\n\t\tconst firstItems = array.slice(0, maxLength / 2);\n\t\tconst middle = `\\n... ${length - maxLength} items ...`;\n\t\tconst lastItems = array.slice(-(maxLength / 2), length);\n\n\t\treturn JSON.stringify([...firstItems, \"%mid%\", ...lastItems], jsonReplacer, 1).replace(/,\\n \"%mid%\",?/, middle);\n\t} else {\n\t\treturn JSON.stringify(array, jsonReplacer, 1);\n\t}\n}\n\ninterface CustomValueDescription {\n\twhat: string;\n\tvalue: unknown;\n}\nfunction isCustomValueDescription(value: unknown): value is CustomValueDescription {\n\t/* prettier-ignore */\n\treturn typeof value === \"object\" &&\n\t\tvalue\n\t\t\t? Object.hasOwn(value, \"what\") &&\n\t\t\t  Object.hasOwn(value, \"value\")\n\t\t\t: false;\n}\n\nfunction createPrint(prefixEmoji: string, prefix: string, value: unknown | CustomValueDescription): string {\n\tlet processedValue: unknown;\n\tlet valueTypeName: string;\n\n\tif (isCustomValueDescription(value)) {\n\t\tvalueTypeName = value.what;\n\t\tprocessedValue = value.value;\n\t} else {\n\t\tprocessedValue = value;\n\t\tvalueTypeName = getConstructorName(value);\n\t}\n\n\tconst valueTypeEmoji = getValueTypeEmoji(processedValue);\n\tconst stringifiedValue = stringifyValue(processedValue, valueTypeName);\n\tconst displayStringifiedValue = stringifiedValue ? ` (${stringifiedValue})` : \"\";\n\n\treturn `${prefixEmoji} ${prefix} ${valueTypeEmoji} '${valueTypeName}'${displayStringifiedValue}`;\n}\n\nfunction jsonReplacer(_key: string, value: unknown) {\n\t/* prettier-ignore */\n\tswitch(typeof value) {\n\t\t/* eslint-disable unicorn/switch-case-braces */\n\t\tcase \"bigint\": return `${value.toString()}n`;\n\t\tcase \"function\": return value.toString();\n\t\tcase \"undefined\": return `undefined`;\n\t\tdefault: return value;\n\t\t/* eslint-enable unicorn/switch-case-braces */\n\t}\n}\n\nexport const throws = (value: unknown) => createPrint(`💥`, `throws`, value);\nexport const returns = (value?: unknown) => createPrint(`🔙`, `returns`, value);\n","import { type BuiltInObjectName, isBuiltInObjectName } from \"@terminal-nerds/snippets-type/built-in\";\nimport { getConstructorName } from \"@terminal-nerds/snippets-type/constructor\";\nimport { getPrimitiveName, isPrimitiveName, type PrimitiveName } from \"@terminal-nerds/snippets-type/primitive\";\n\nexport const PRIMITIVES_EMOJIS = {\n\tbigint: `🇧`,\n\tboolean: {\n\t\tfalse: `🔴`,\n\t\ttrue: `🟢`,\n\t},\n\tnull: `❎`,\n\tnumber: `🇳`,\n\tsymbol: `💠`,\n\tstring: `🇸`,\n\tundefined: `🫥`,\n} as const;\nexport type PrimitiveEmoji =\n\t| (typeof PRIMITIVES_EMOJIS)[Exclude<PrimitiveName, \"boolean\">]\n\t| (typeof PRIMITIVES_EMOJIS.boolean)[\"false\" | \"true\"];\n\nexport const BUILT_IN_OBJECTS_EMOJIS = {\n\t// Fundamental\n\tFunction: `🇫`,\n\tObject: `🇴`,\n\t// Error\n\tError: `📛`,\n\tAggregateError: `📛`,\n\tEvalError: `📛`,\n\tRangeError: `📛`,\n\tReferenceError: `📛`,\n\tSyntaxError: `📛`,\n\tTypeError: `📛`,\n\tURIError: `📛`,\n\t// Math and date\n\tDate: `🗓️`,\n\tMath: `🧮`,\n\t// Text processing\n\tRegExp: `🔎🇸\"`,\n\t// Indexed collection\n\tArray: `🇦`,\n\tInt8Array: `❔`,\n\tUint8Array: `❔`,\n\tUint8ClampedArray: `❔`,\n\tInt16Array: `❔`,\n\tUint16Array: `❔`,\n\tInt32Array: `❔`,\n\tUint32Array: `❔`,\n\tBigInt64Array: `❔`,\n\tBigUint64Array: `❔`,\n\tFloat32Array: `❔`,\n\tFloat64Array: `❔`,\n\t// Keyed collection\n\tMap: `🇲`,\n\tSet: `🦄`,\n\tWeakMap: `❔`,\n\tWeakSet: `❔`,\n\t// Structured data\n\tArrayBuffer: `❔`,\n\tSharedArrayBuffer: `❔`,\n\tDataView: `❔`,\n\tAtomics: `❔`,\n\tJSON: `❔`,\n\t// Managing memory\n\tWeakRef: `❔`,\n\tFinalizationRegistry: `❔`,\n\t// Control abstraction\n\tPromise: `❔`,\n\tAsyncFunction: `❔`,\n\tAsyncGeneratorFunction: `❔`,\n\tGeneratorFunction: `❔`,\n\t// AsyncGenerator: `❔`,\n\t// Generator: `❔`,\n\t// Reflection\n\tReflect: `❔`,\n\tProxy: `❔`,\n\t// Internationalization\n\tIntl: `🌐`,\n} as const;\n\ntype BuiltInNameWithoutPrimitives = Exclude<BuiltInObjectName, \"BigInt\" | \"Boolean\" | \"Number\" | \"String\" | \"Symbol\">;\nexport type BuiltInEmoji = (typeof BUILT_IN_OBJECTS_EMOJIS)[BuiltInNameWithoutPrimitives];\n\nexport const CUSTOM_TYPE_EMOJIS = {\n\tZodError: `📛`,\n} as const;\n\nexport type CustomTypeName = keyof typeof CUSTOM_TYPE_EMOJIS;\nexport type CustomTypeEmoji = (typeof CUSTOM_TYPE_EMOJIS)[CustomTypeName];\n\nexport const UNRECOGNIZED_TYPE_EMOJI = `❓`;\nexport type UnrecognizedTypeEmoji = typeof UNRECOGNIZED_TYPE_EMOJI;\n\nexport const VALUE_TYPE_EMOJIS = {\n\t...PRIMITIVES_EMOJIS,\n\t...BUILT_IN_OBJECTS_EMOJIS,\n\t...CUSTOM_TYPE_EMOJIS,\n\tUNRECOGNIZED_TYPE_EMOJI,\n} as const;\n\nexport type ValueTypeName = keyof typeof PRIMITIVES_EMOJIS | keyof typeof BUILT_IN_OBJECTS_EMOJIS;\nexport type ValueTypeEmoji =\n\t| (typeof VALUE_TYPE_EMOJIS)[Exclude<ValueTypeName, \"boolean\">]\n\t| (typeof PRIMITIVES_EMOJIS)[\"boolean\"][\"true\" | \"false\"]\n\t| UnrecognizedTypeEmoji;\n\nfunction getPrimitiveEmoji(value: unknown): PrimitiveEmoji {\n\tconst primitiveName = getPrimitiveName(value);\n\n\tif (primitiveName) {\n\t\treturn primitiveName === \"boolean\"\n\t\t\t? PRIMITIVES_EMOJIS[\"boolean\"][String(value) as \"true\" | \"false\"]\n\t\t\t: PRIMITIVES_EMOJIS[primitiveName];\n\t} else {\n\t\tthrow new TypeError(`Unrecognized primitive, cannot get emoji.`);\n\t}\n}\n\nexport function getValueTypeEmoji(value: unknown): ValueTypeEmoji {\n\tconst name = getConstructorName(value);\n\n\tif (isPrimitiveName(name.toLowerCase())) {\n\t\treturn getPrimitiveEmoji(value);\n\t} else if (isBuiltInObjectName(name)) {\n\t\treturn BUILT_IN_OBJECTS_EMOJIS[name as BuiltInNameWithoutPrimitives];\n\t} else {\n\t\t// @ts-ignore TODO: Add type safety for custom objects?\n\t\tconst emoji = CUSTOM_TYPE_EMOJIS[name];\n\n\t\treturn emoji ?? UNRECOGNIZED_TYPE_EMOJI;\n\t}\n}\n"]}