{"version":3,"sources":["../source/schema/schema.ts"],"names":["nodeIsAsyncFunction","nodeIsGeneratorFunction","IN_BROWSER","AsyncFunction","AsyncGeneratorFunction","GeneratorFunction","isNonPrimitive","validateNonPrimitive","validateFunction","value","isFunction","isArrowFunction","_function","isSimpleFunctionRegex","isWithParensRegex","isWithoutParensRegex","stringifiedFunction","isSimpleFunction","isAsyncFunction","isAsyncGeneratorFunction","isGeneratorFunction","determineArrowFunctionType","determineSimpleAsyncFunction","determineSimpleSyncFunction","determineSimpleFunctionType","getFunctionType"],"mappings":"AAAA,OACC,mBAAmBA,EACnB,uBAAuBC,MACjB,aAEP,OAAS,cAAAC,MAAkB,+CAC3B,OAAS,iBAAAC,EAAe,0BAAAC,EAAwB,qBAAAC,MAAyB,yCACzE,OAAS,kBAAAC,EAAgB,wBAAAC,MAA4B,8CAK9C,SAASC,EAAiBC,EAA8C,CAC9EF,EAAqBE,EAAO,UAAU,CACvC,CAGO,SAASC,EAAWD,EAAsC,CAChE,OAAOH,EAAeG,EAAO,UAAU,CACxC,CAOO,SAASE,EAAgBC,EAAiC,CAChEJ,EAAiBI,CAAS,EAE1B,IAAMC,EAAwB,eACxBC,EAAoB,iBACpBC,EAAuB,WACvBC,EAAsBJ,EAAU,SAAS,EAE/C,OACCI,EAAoB,OAAS,GAC7B,CAACH,EAAsB,KAAKG,CAAmB,IAC9CF,EAAkB,KAAKE,CAAmB,GAAKD,EAAqB,KAAKC,CAAmB,EAE/F,CAGO,SAASC,EAAiBL,EAAiC,CACjE,MAAO,CAACD,EAAgBC,CAAS,CAClC,CAGO,SAASM,EAAgBN,EAA2D,CAC1F,OAAAJ,EAAiBI,CAAS,EAEnBV,EAAaU,aAAqBT,EAAgBH,EAAoBY,CAAS,CACvF,CAGO,SAASO,EAAyBP,EAAoE,CAC5G,OAAAJ,EAAiBI,CAAS,EAEnBV,EACJU,aAAqBR,EACrBc,EAAgBN,CAAS,GAAKQ,EAAoBR,CAAS,CAC/D,CAGO,SAASQ,EAAoBR,EAAwD,CAC3F,OAAAJ,EAAiBI,CAAS,EAEnBV,EAAaU,aAAqBP,EAAoBJ,EAAwBW,CAAS,CAC/F,CAgBA,SAASS,EAA2BT,EAAwE,CAC3G,OAAOM,EAAgBN,CAAS,EAAI,cAAgB,OACrD,CAEA,SAASU,EACRV,EACmE,CACnE,OAAOQ,EAAoBR,CAAS,EAAI,yBAA2B,cACpE,CAEA,SAASW,EAA4BX,EAA8E,CAClH,OAAOQ,EAAoBR,CAAS,EAAI,mBAAqB,QAC9D,CAEA,SAASY,EACRZ,EACmG,CACnG,OAAOM,EAAgBN,CAAS,EAC7BU,EAA6BV,CAAS,EACtCW,EAA4BX,CAAS,CACzC,CAGO,SAASa,EAAgBb,EAAsC,CACrE,OAAOD,EAAgBC,CAAS,EAAIS,EAA2BT,CAAS,EAAIY,EAA4BZ,CAAS,CAClH","sourcesContent":["import {\n\tisAsyncFunction as nodeIsAsyncFunction,\n\tisGeneratorFunction as nodeIsGeneratorFunction,\n} from \"node:util/types\";\n\nimport { IN_BROWSER } from \"@terminal-nerds/snippets-runtime/environment\";\nimport { AsyncFunction, AsyncGeneratorFunction, GeneratorFunction } from \"@terminal-nerds/snippets-type/built-in\";\nimport { isNonPrimitive, validateNonPrimitive } from \"@terminal-nerds/snippets-type/non-primitive\";\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport type AnyFunction = (..._args: any) => any;\n\nexport function validateFunction(value: unknown): asserts value is AnyFunction {\n\tvalidateNonPrimitive(value, \"function\");\n}\n\n/** @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function} Function */\nexport function isFunction(value: unknown): value is AnyFunction {\n\treturn isNonPrimitive(value, \"function\");\n}\n\n/**\n * Credits: https://github.com/inspect-js/is-arrow-function/blob/main/index.js\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions} Arrow function\n */\nexport function isArrowFunction(_function: AnyFunction): boolean {\n\tvalidateFunction(_function);\n\n\tconst isSimpleFunctionRegex = /^\\s*function/;\n\tconst isWithParensRegex = /^\\([^)]*\\) *=>/;\n\tconst isWithoutParensRegex = /^[^=]*=>/;\n\tconst stringifiedFunction = _function.toString();\n\n\treturn (\n\t\tstringifiedFunction.length > 0 &&\n\t\t!isSimpleFunctionRegex.test(stringifiedFunction) &&\n\t\t(isWithParensRegex.test(stringifiedFunction) || isWithoutParensRegex.test(stringifiedFunction))\n\t);\n}\n\n/** @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions} Simple function */\nexport function isSimpleFunction(_function: AnyFunction): boolean {\n\treturn !isArrowFunction(_function);\n}\n\n/** @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function} Async function */\nexport function isAsyncFunction(_function: AnyFunction): _function is typeof AsyncFunction {\n\tvalidateFunction(_function);\n\n\treturn IN_BROWSER ? _function instanceof AsyncFunction : nodeIsAsyncFunction(_function);\n}\n\n/** @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function} Async generator function */\nexport function isAsyncGeneratorFunction(_function: AnyFunction): _function is typeof AsyncGeneratorFunction {\n\tvalidateFunction(_function);\n\n\treturn IN_BROWSER\n\t\t? _function instanceof AsyncGeneratorFunction\n\t\t: isAsyncFunction(_function) && isGeneratorFunction(_function);\n}\n\n/** @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function} Generator function */\nexport function isGeneratorFunction(_function: AnyFunction): _function is GeneratorFunction {\n\tvalidateFunction(_function);\n\n\treturn IN_BROWSER ? _function instanceof GeneratorFunction : nodeIsGeneratorFunction(_function);\n}\n\nexport type FunctionType =\n\t/** Arrow function `async () => {}` */\n\t| \"arrow\"\n\t/** Arrow and asynchronous function `async () => {}` */\n\t| \"arrow-async\"\n\t/** A classic, simple function `function name() {}` */\n\t| \"simple\"\n\t/** A classic, simple and asynchronous function `async function name() {}` */\n\t| \"simple-async\"\n\t/** A classic, simple, asynchronous and generator function `async function* name() {}` */\n\t| \"simple-async-generator\"\n\t/** A classic, simple and generator function `function* name() {}` */\n\t| \"simple-generator\";\n\nfunction determineArrowFunctionType(_function: AnyFunction): Extract<FunctionType, \"arrow\" | \"arrow-async\"> {\n\treturn isAsyncFunction(_function) ? \"arrow-async\" : \"arrow\";\n}\n\nfunction determineSimpleAsyncFunction(\n\t_function: AnyFunction,\n): Extract<FunctionType, \"simple-async-generator\" | \"simple-async\"> {\n\treturn isGeneratorFunction(_function) ? \"simple-async-generator\" : \"simple-async\";\n}\n\nfunction determineSimpleSyncFunction(_function: AnyFunction): Extract<FunctionType, \"simple\" | \"simple-generator\"> {\n\treturn isGeneratorFunction(_function) ? \"simple-generator\" : \"simple\";\n}\n\nfunction determineSimpleFunctionType(\n\t_function: AnyFunction,\n): Extract<FunctionType, \"simple\" | \"simple-async\" | \"simple-async-generator\" | \"simple-generator\"> {\n\treturn isAsyncFunction(_function)\n\t\t? determineSimpleAsyncFunction(_function)\n\t\t: determineSimpleSyncFunction(_function);\n}\n\n/** @see {@link FunctionType} */\nexport function getFunctionType(_function: AnyFunction): FunctionType {\n\treturn isArrowFunction(_function) ? determineArrowFunctionType(_function) : determineSimpleFunctionType(_function);\n}\n"]}