{"version":3,"file":"function_serializer-Cm27g7Bc.mjs","names":["#namedBindings","#argNames","#functionBody","isObject","#parseArgNames","#parseFunctionBody","#buildFunction","#originalParamString","#processParameter","#isAsync","#isExpressionBody","#isGenerator","#functionName"],"sources":["../node_modules/.pnpm/@nhtio+encoder@1.20260624.0/node_modules/@nhtio/encoder/function_serializer.mjs"],"sourcesContent":["import { i as isObject } from \"./type_guards-BAhiOypL.mjs\";\nclass FunctionSerializer {\n  #namedBindings;\n  #argNames;\n  #originalParamString = \"\";\n  #functionBody;\n  #functionName = \"\";\n  #isExpressionBody = false;\n  #isAsync = false;\n  #isGenerator = false;\n  /**\n   * Private constructor - use static methods instead\n   */\n  constructor(functionString, namedBindings) {\n    this.#namedBindings = /* @__PURE__ */ new Map();\n    this.#argNames = [];\n    this.#functionBody = \"\";\n    if (namedBindings && isObject(namedBindings)) {\n      Object.entries(namedBindings).forEach(([key, value]) => {\n        this.#namedBindings.set(key, value);\n      });\n    }\n    const trimmed = functionString.trim();\n    this.#parseArgNames(trimmed);\n    this.#parseFunctionBody(trimmed);\n  }\n  /**\n   * Check if a value can be serialized as a function\n   * @param value - The value to check\n   * @returns True if the value can be serialized, false otherwise\n   */\n  static canSerialize(value) {\n    if (typeof value !== \"function\") {\n      return false;\n    }\n    const fnString = value.toString();\n    if (fnString.includes(\"[native code]\")) {\n      return false;\n    }\n    if (fnString.startsWith(\"function () { [native code] }\")) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Dehydrate a function into a serializable format\n   * @param fn - The function to dehydrate\n   * @param namedBindings - Optional named bindings for the function\n   * @returns The dehydrated function value\n   */\n  static dehydrate(fn, namedBindings) {\n    if (!FunctionSerializer.canSerialize(fn)) {\n      throw new TypeError(\"Function cannot be serialized\");\n    }\n    const functionString = fn.toString();\n    const dehydrated = {\n      _encodedType: \"function\",\n      _encodedValueType: \"string\",\n      _encodedValue: functionString\n    };\n    if (namedBindings) {\n      dehydrated._namedBindings = namedBindings;\n    }\n    return dehydrated;\n  }\n  /**\n   * Rehydrate a function from its dehydrated format or raw function string\n   * @param input - The dehydrated function value or raw function string\n   * @param namedBindings - Optional named bindings for the function\n   * @returns The rehydrated function\n   */\n  static rehydrate(input, namedBindings) {\n    let functionString;\n    let bindings = namedBindings;\n    if (typeof input === \"string\") {\n      functionString = input;\n    } else if (isObject(input) && input._encodedType === \"function\" && input._encodedValueType === \"string\" && typeof input._encodedValue === \"string\") {\n      functionString = input._encodedValue;\n      bindings = input._namedBindings || bindings;\n    } else {\n      throw new TypeError(\"Invalid input for function rehydration\");\n    }\n    const serializer = new FunctionSerializer(functionString, bindings);\n    return serializer.#buildFunction();\n  }\n  #parseArgNames(trimmed) {\n    const patterns = [\n      // Arrow function with parentheses: (a, b, c) => ...\n      /^\\s*(?:async\\s+)?\\(([^)]*)\\)\\s*=>/,\n      // Arrow function single param without parentheses: x => ...\n      /^\\s*(?:async\\s+)?([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*=>/,\n      // Regular/async function: function name(a, b, c) or function(a, b, c)\n      /^\\s*(?:async\\s+)?function\\s*(?:\\*\\s*)?(?:[a-zA-Z_$][a-zA-Z0-9_$]*)?\\s*\\(([^)]*)\\)/,\n      // Method syntax: methodName(a, b, c) { ... }\n      /^\\s*(?:async\\s+)?(?:\\*\\s*)?([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\(([^)]*)\\)\\s*\\{/\n    ];\n    let paramString = \"\";\n    for (const pattern of patterns) {\n      const match = trimmed.match(pattern);\n      if (match) {\n        paramString = match[1] || match[2] || \"\";\n        break;\n      }\n    }\n    this.#originalParamString = paramString;\n    if (!paramString || !paramString.trim()) {\n      return;\n    }\n    const args = [];\n    let current = \"\";\n    let depth = 0;\n    let inString = false;\n    let stringChar = \"\";\n    for (let i = 0; i < paramString.length; i++) {\n      const char = paramString[i];\n      const prevChar = i > 0 ? paramString[i - 1] : \"\";\n      if ((char === '\"' || char === \"'\" || char === \"`\") && prevChar !== \"\\\\\") {\n        if (!inString) {\n          inString = true;\n          stringChar = char;\n        } else if (char === stringChar) {\n          inString = false;\n        }\n      }\n      if (!inString) {\n        if (char === \"{\" || char === \"[\" || char === \"(\") {\n          depth++;\n        } else if (char === \"}\" || char === \"]\" || char === \")\") {\n          depth--;\n        }\n        if (char === \",\" && depth === 0) {\n          const processed = this.#processParameter(current.trim());\n          if (processed) args.push(processed);\n          current = \"\";\n          continue;\n        }\n      }\n      current += char;\n    }\n    if (current.trim()) {\n      const processed = this.#processParameter(current.trim());\n      if (processed) args.push(processed);\n    }\n    this.#argNames.push(...args);\n  }\n  #processParameter(param) {\n    if (!param) return \"\";\n    param = param.trim();\n    if (param.startsWith(\"...\")) {\n      return param.slice(3).trim().split(/[\\s=]/)[0];\n    }\n    if (param.startsWith(\"{\") || param.startsWith(\"[\")) {\n      return param.split(/[\\s=:]/)[0];\n    }\n    const nameMatch = param.match(/^([a-zA-Z_$][a-zA-Z0-9_$]*)/);\n    return nameMatch ? nameMatch[1] : \"\";\n  }\n  #parseFunctionBody(trimmed) {\n    this.#isAsync = /^\\s*async\\s+/.test(trimmed);\n    const arrowExpressionMatch = trimmed.match(\n      /^\\s*(async\\s+)?(?:\\([^)]*\\)|[a-zA-Z_$][a-zA-Z0-9_$]*)\\s*=>\\s*(.+)$/s\n    );\n    if (arrowExpressionMatch && !arrowExpressionMatch[2].trimStart().startsWith(\"{\")) {\n      this.#isExpressionBody = true;\n      this.#functionBody = arrowExpressionMatch[2].trim();\n      return;\n    }\n    const arrowBlockMatch = trimmed.match(\n      /^\\s*(async\\s+)?(?:\\([^)]*\\)|[a-zA-Z_$][a-zA-Z0-9_$]*)\\s*=>\\s*\\{([\\s\\S]*)\\}\\s*$/\n    );\n    if (arrowBlockMatch) {\n      this.#functionBody = arrowBlockMatch[2].trim();\n      return;\n    }\n    const functionMatch = trimmed.match(\n      /^\\s*(async\\s+)?function\\s*(\\*\\s*)?([a-zA-Z_$][a-zA-Z0-9_$]*)?\\s*\\([^)]*\\)\\s*\\{([\\s\\S]*)\\}\\s*$/\n    );\n    if (functionMatch) {\n      this.#isGenerator = !!functionMatch[2];\n      this.#functionName = functionMatch[3] || \"\";\n      this.#functionBody = functionMatch[4].trim();\n      return;\n    }\n    const methodMatch = trimmed.match(\n      /^\\s*(async\\s+)?(\\*\\s*)?([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*\\([^)]*\\)\\s*\\{([\\s\\S]*)\\}\\s*$/\n    );\n    if (methodMatch) {\n      this.#isGenerator = !!methodMatch[2];\n      this.#functionName = methodMatch[3];\n      this.#functionBody = methodMatch[4].trim();\n      return;\n    }\n    const firstBrace = trimmed.indexOf(\"{\");\n    const lastBrace = trimmed.lastIndexOf(\"}\");\n    if (firstBrace !== -1 && lastBrace !== -1 && lastBrace > firstBrace) {\n      this.#functionBody = trimmed.substring(firstBrace + 1, lastBrace);\n      return;\n    }\n  }\n  #buildFunction() {\n    const functionBody = this.#isExpressionBody ? `return ${this.#functionBody}` : this.#functionBody;\n    const bindingNames = Array.from(this.#namedBindings.keys());\n    const namedBindingValues = Array.from(this.#namedBindings.values());\n    const paramList = this.#originalParamString;\n    let functionCode = \"\";\n    const fnName = this.#functionName ? ` ${this.#functionName}` : \"\";\n    if (this.#isAsync) {\n      functionCode = this.#isGenerator ? `async function*${fnName}(${paramList}) { ${functionBody} }` : `async function${fnName}(${paramList}) { ${functionBody} }`;\n    } else {\n      functionCode = this.#isGenerator ? `function*${fnName}(${paramList}) { ${functionBody} }` : `function${fnName}(${paramList}) { ${functionBody} }`;\n    }\n    if (namedBindingValues.length > 0) {\n      const boundParamNames = new Set(bindingNames.filter((name) => this.#argNames.includes(name)));\n      const closureBindingNames = bindingNames.filter((name) => !boundParamNames.has(name));\n      const closureParams = closureBindingNames.join(\", \");\n      const closureValues = closureBindingNames.map((name) => this.#namedBindings.get(name));\n      const factoryCode = closureBindingNames.length > 0 ? `return function(${closureParams}) { return ${functionCode}; }` : `return ${functionCode}`;\n      const factory = new Function(factoryCode)();\n      const callable2 = closureBindingNames.length > 0 ? factory(...closureValues) : factory;\n      if (boundParamNames.size > 0) {\n        let wrapper = function(...args) {\n          const actualArgs = [];\n          let userArgIndex = 0;\n          for (const param of parameterMapping) {\n            if (param.isBound && param.boundIndex !== void 0) {\n              actualArgs.push(namedBindingValues[param.boundIndex]);\n            } else {\n              actualArgs.push(args[userArgIndex++]);\n            }\n          }\n          return callable2.call(this, ...actualArgs);\n        };\n        const parameterMapping = [];\n        for (const argName of this.#argNames) {\n          if (boundParamNames.has(argName)) {\n            const boundIndex = bindingNames.indexOf(argName);\n            parameterMapping.push({ name: argName, isBound: true, boundIndex });\n          } else {\n            parameterMapping.push({ name: argName, isBound: false });\n          }\n        }\n        return wrapper;\n      }\n      return callable2;\n    }\n    const callable = new Function(`return ${functionCode}`)();\n    return callable;\n  }\n}\nexport {\n  FunctionSerializer\n};\n//# sourceMappingURL=function_serializer.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"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"}