{
  "version": 3,
  "sources": ["../../../../../src/functions/text/find/find.ts"],
  "sourcesContent": [
    "import {\n  FormulaError,\n  type CellAddress,\n  type CellNumber,\n  type ErrorEvaluationResult,\n  type FunctionDefinition,\n  type FunctionEvaluationResult,\n  type ValueEvaluationResult,\n} from \"../../../core/types.mjs\";\nimport type { EvaluationContext } from \"../../../evaluator/evaluation-context.mjs\";\nimport type { FormulaEvaluator } from \"../../../evaluator/formula-evaluator.mjs\";\nimport { convertToString, extractNumericValue } from \"../text-helpers.mjs\";\n\n// Helper function for FIND operation - returns the result, error, or null if not found\nfunction findOperation(\n  findTextResult: FunctionEvaluationResult,\n  withinTextResult: FunctionEvaluationResult,\n  startNumResult: FunctionEvaluationResult,\n  context: EvaluationContext\n): CellNumber | ErrorEvaluationResult {\n  const findStr = convertToString(findTextResult, context);\n  const withinStr = convertToString(withinTextResult, context);\n  const startNum = extractNumericValue(startNumResult, context);\n\n  // Check if any of the results are awaiting evaluation or errors\n  if (\n    typeof findStr === \"object\" &&\n    (findStr.type === \"awaiting-evaluation\" || findStr.type === \"error\")\n  ) {\n    return findStr;\n  }\n  if (\n    typeof withinStr === \"object\" &&\n    (withinStr.type === \"awaiting-evaluation\" || withinStr.type === \"error\")\n  ) {\n    return withinStr;\n  }\n  if (\n    typeof startNum === \"object\" &&\n    (startNum.type === \"awaiting-evaluation\" || startNum.type === \"error\")\n  ) {\n    return startNum;\n  }\n\n  // At this point, all values should be primitive types\n  const findValue = findStr as string;\n  const withinValue = withinStr as string;\n  const startNumValue = startNum as number;\n\n  // Validate startNum\n  if (startNumValue < 1) {\n    return {\n      type: \"error\",\n      err: FormulaError.VALUE,\n      message: \"Text not found #2\",\n      errAddress: context.dependencyNode,\n    };\n  }\n\n  const start = Math.floor(startNumValue) - 1; // Convert to 0-based index\n\n  if (start >= withinValue.length) {\n    return {\n      type: \"error\",\n      err: FormulaError.VALUE,\n      message: \"Text not found #2\",\n      errAddress: context.dependencyNode,\n    };\n  }\n\n  const index = withinValue.indexOf(findValue, start);\n  if (index === -1) {\n    return {\n      type: \"error\",\n      err: FormulaError.VALUE,\n      message: \"Text not found #2\",\n      errAddress: context.dependencyNode,\n    };\n  }\n\n  return { type: \"number\", value: index + 1 }; // Convert back to 1-based index\n}\n\n/**\n * Helper for creating spilled-values result for FIND function\n */\nfunction createFindSpilledResult(\n  this: FormulaEvaluator,\n  {\n    findTextResult,\n    withinTextResult,\n    startNumResult,\n    context,\n  }: {\n    findTextResult: FunctionEvaluationResult;\n    withinTextResult: FunctionEvaluationResult;\n    startNumResult: FunctionEvaluationResult;\n    context: EvaluationContext;\n  }\n): FunctionEvaluationResult {\n  // If both findText and withinText are spilled-values, we need to zip them together\n  if (\n    findTextResult.type === \"spilled-values\" &&\n    withinTextResult.type === \"spilled-values\"\n  ) {\n    return {\n      type: \"spilled-values\",\n      spillArea: (origin: CellAddress) => {\n        // Create unified spill area (union of all spilled ranges)\n        let spillArea = this.unionRanges(\n          this.projectRange(findTextResult.spillArea(origin), origin),\n          this.projectRange(withinTextResult.spillArea(origin), origin)\n        );\n\n        // Also include startNum spill area if it's spilled\n        if (startNumResult.type === \"spilled-values\") {\n          spillArea = this.unionRanges(\n            spillArea,\n            this.projectRange(startNumResult.spillArea(origin), origin)\n          );\n        }\n        return spillArea;\n      },\n      source: \"FIND with zipped spilled findText and withinText values\",\n      evaluate: (spillOffset, evalContext: EvaluationContext) => {\n        // Evaluate both spilled arrays at this position\n        const spillFindResult = findTextResult.evaluate(\n          spillOffset,\n          evalContext\n        );\n        const spillWithinResult = withinTextResult.evaluate(\n          spillOffset,\n          evalContext\n        );\n\n        if (!spillFindResult || spillFindResult.type === \"error\") {\n          return spillFindResult;\n        }\n        if (!spillWithinResult || spillWithinResult.type === \"error\") {\n          return spillWithinResult;\n        }\n\n        // Handle startNum - evaluate if spilled, otherwise use as-is\n        let startNumArg = startNumResult;\n        if (startNumResult.type === \"spilled-values\") {\n          const spillStartNumResult = startNumResult.evaluate(\n            spillOffset,\n            evalContext\n          );\n          if (!spillStartNumResult || spillStartNumResult.type === \"error\") {\n            return spillStartNumResult;\n          }\n          startNumArg = spillStartNumResult;\n        }\n\n        const result = findOperation(\n          spillFindResult,\n          spillWithinResult,\n          startNumArg,\n          evalContext\n        );\n        // Handle error or awaiting evaluation results\n        if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n          return result;\n        }\n        return {\n          type: \"value\",\n          result: result,\n        };\n      },\n      evaluateAllCells: (intersectingRange) => {\n        throw new Error(\"WIP: evaluateAllCells for FIND is not implemented\");\n      },\n    };\n  }\n  // If only findText is spilled-values\n  else if (\n    findTextResult.type === \"spilled-values\" &&\n    withinTextResult.type !== \"spilled-values\" &&\n    startNumResult.type !== \"spilled-values\"\n  ) {\n    return {\n      type: \"spilled-values\",\n      spillArea: (origin: CellAddress) => {\n        return findTextResult.spillArea(origin);\n      },\n      source: \"FIND with spilled findText values\",\n      evaluate: (spillOffset, evalContext: EvaluationContext) => {\n        const spillResult = findTextResult.evaluate(spillOffset, evalContext);\n        if (!spillResult || spillResult.type === \"error\") {\n          return spillResult;\n        }\n        const result = findOperation(\n          spillResult,\n          withinTextResult,\n          startNumResult,\n          evalContext\n        );\n\n        // Handle error or awaiting evaluation results\n        if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n          return result;\n        }\n        return {\n          type: \"value\",\n          result: result,\n        };\n      },\n      evaluateAllCells: (intersectingRange) => {\n        throw new Error(\"WIP: evaluateAllCells for FIND is not implemented\");\n      },\n    };\n  }\n  // If only withinText is spilled-values\n  else if (\n    withinTextResult.type === \"spilled-values\" &&\n    findTextResult.type !== \"spilled-values\" &&\n    startNumResult.type !== \"spilled-values\"\n  ) {\n    return {\n      type: \"spilled-values\",\n      spillArea: (origin) => withinTextResult.spillArea(origin),\n      source: \"FIND with spilled withinText values\",\n      evaluate: (spillOffset, evalContext: EvaluationContext) => {\n        const spillResult = withinTextResult.evaluate(spillOffset, evalContext);\n        if (!spillResult || spillResult.type === \"error\") {\n          return spillResult;\n        }\n        const result = findOperation(\n          findTextResult,\n          spillResult,\n          startNumResult,\n          evalContext\n        );\n\n        // Handle error or awaiting evaluation results\n        if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n          return result;\n        }\n        return {\n          type: \"value\",\n          result: result,\n        };\n      },\n      evaluateAllCells: (intersectingRange) => {\n        throw new Error(\"WIP: evaluateAllCells for FIND is not implemented\");\n      },\n    };\n  }\n  // If findText and startNum are spilled (but not withinText)\n  else if (\n    findTextResult.type === \"spilled-values\" &&\n    startNumResult.type === \"spilled-values\" &&\n    withinTextResult.type !== \"spilled-values\"\n  ) {\n    if (withinTextResult.type !== \"value\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"Invalid withinText argument\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    // Strict type checking\n    if (withinTextResult.result.type !== \"string\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"WithinText argument must be a string\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    return {\n      type: \"spilled-values\",\n      spillArea: (origin: CellAddress) => {\n        // Create unified spill area (union of both ranges)\n        const spillArea = this.unionRanges(\n          this.projectRange(findTextResult.spillArea(origin), origin),\n          this.projectRange(startNumResult.spillArea(origin), origin)\n        );\n        return spillArea;\n      },\n      source: \"FIND with spilled findText and startNum values\",\n      evaluate: (spillOffset, evalContext: EvaluationContext) => {\n        // Evaluate both spilled arrays at this position\n        const spillFindResult = findTextResult.evaluate(\n          spillOffset,\n          evalContext\n        );\n        const spillStartNumResult = startNumResult.evaluate(\n          spillOffset,\n          evalContext\n        );\n\n        if (!spillFindResult || spillFindResult.type === \"error\") {\n          return spillFindResult;\n        }\n        if (!spillStartNumResult || spillStartNumResult.type === \"error\") {\n          return spillStartNumResult;\n        }\n\n        const result = findOperation(\n          spillFindResult,\n          withinTextResult,\n          spillStartNumResult,\n          evalContext\n        );\n\n        // Handle error or awaiting evaluation results\n        if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n          return result;\n        }\n        return {\n          type: \"value\",\n          result: result,\n        };\n      },\n      evaluateAllCells: (intersectingRange) => {\n        throw new Error(\"WIP: evaluateAllCells for FIND is not implemented\");\n      },\n    };\n  }\n  // If withinText and startNum are spilled (but not findText)\n  else if (\n    withinTextResult.type === \"spilled-values\" &&\n    startNumResult.type === \"spilled-values\" &&\n    findTextResult.type !== \"spilled-values\"\n  ) {\n    if (findTextResult.type !== \"value\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"Invalid findText argument\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    // Strict type checking\n    if (findTextResult.result.type !== \"string\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"FindText argument must be a string\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    return {\n      type: \"spilled-values\",\n      spillArea: (origin: CellAddress) => {\n        // Create unified spill area (union of both ranges)\n        const spillArea = this.unionRanges(\n          this.projectRange(withinTextResult.spillArea(origin), origin),\n          this.projectRange(startNumResult.spillArea(origin), origin)\n        );\n        return spillArea;\n      },\n      source: \"FIND with spilled withinText and startNum values\",\n      evaluate: (spillOffset, evalContext: EvaluationContext) => {\n        // Evaluate both spilled arrays at this position\n        const spillWithinResult = withinTextResult.evaluate(\n          spillOffset,\n          evalContext\n        );\n        const spillStartNumResult = startNumResult.evaluate(\n          spillOffset,\n          evalContext\n        );\n\n        if (!spillWithinResult || spillWithinResult.type === \"error\") {\n          return spillWithinResult;\n        }\n        if (!spillStartNumResult || spillStartNumResult.type === \"error\") {\n          return spillStartNumResult;\n        }\n\n        const result = findOperation(\n          findTextResult,\n          spillWithinResult,\n          spillStartNumResult,\n          evalContext\n        );\n\n        // Handle error or awaiting evaluation results\n        if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n          return result;\n        }\n        return {\n          type: \"value\",\n          result: result,\n        };\n      },\n      evaluateAllCells: (intersectingRange) => {\n        throw new Error(\"WIP: evaluateAllCells for FIND is not implemented\");\n      },\n    };\n  }\n  // If only startNum is spilled-values\n  else if (\n    startNumResult.type === \"spilled-values\" &&\n    findTextResult.type !== \"spilled-values\" &&\n    withinTextResult.type !== \"spilled-values\"\n  ) {\n    if (findTextResult.type !== \"value\") {\n      return findTextResult;\n    }\n    if (withinTextResult.type !== \"value\") {\n      return withinTextResult;\n    }\n\n    // Strict type checking\n    if (findTextResult.result.type !== \"string\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"FindText argument must be a string\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    if (withinTextResult.result.type !== \"string\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"WithinText argument must be a string\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    return {\n      type: \"spilled-values\",\n      spillArea: (origin: CellAddress) => startNumResult.spillArea(origin),\n      source: \"FIND with spilled startNum values\",\n      evaluate: (spillOffset, evalContext: EvaluationContext) => {\n        const spillResult = startNumResult.evaluate(spillOffset, evalContext);\n        if (!spillResult || spillResult.type === \"error\") {\n          return spillResult;\n        }\n\n        // Create a proper startNum argument for findOperation\n        if (spillResult.type !== \"value\") {\n          return spillResult;\n        }\n        const startNumArg: ValueEvaluationResult = {\n          type: \"value\",\n          result: spillResult.result,\n        };\n\n        const result = findOperation(\n          findTextResult,\n          withinTextResult,\n          startNumArg,\n          evalContext\n        );\n\n        // Handle error or awaiting evaluation results\n        if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n          return result;\n        }\n        return {\n          type: \"value\",\n          result: result,\n        };\n      },\n      evaluateAllCells: (intersectingRange) => {\n        throw new Error(\"WIP: evaluateAllCells for FIND is not implemented\");\n      },\n    };\n  }\n  return {\n    type: \"error\",\n    err: FormulaError.VALUE,\n    message: \"Invalid arguments for FIND\",\n    errAddress: context.dependencyNode,\n  };\n}\n\n/**\n * FIND function - Finds one text string within another (case-sensitive)\n *\n * Usage: FIND(find_text, within_text, [start_num])\n *\n * find_text: The text you want to find.\n * within_text: The text containing the text you want to find.\n * start_num: [Optional] The character at which to start the search (default: 1).\n *\n * Example: FIND(\"World\", \"Hello World\", 1) returns 7\n *\n * Note:\n * - The search is case-sensitive\n * - Returns the position of the first character of find_text within within_text\n * - Returns #VALUE! error if text is not found\n * - Supports dynamic arrays (spilled values) for find_text and within_text\n * - Strict type checking: text arguments must be strings, start_num must be number\n */\nexport const FIND: FunctionDefinition = {\n  name: \"FIND\",\n  evaluate: function (node, context): FunctionEvaluationResult {\n    if (node.args.length < 2 || node.args.length > 3) {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"FIND function takes 2 or 3 arguments\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    // Evaluate findText argument\n    const findTextResult = this.evaluateNode(node.args[0]!, context);\n    if (findTextResult.type === \"error\") {\n      return findTextResult;\n    }\n\n    // Evaluate withinText argument\n    const withinTextResult = this.evaluateNode(node.args[1]!, context);\n    if (withinTextResult.type === \"error\") {\n      return withinTextResult;\n    }\n\n    // Evaluate startNum argument (optional, defaults to 1)\n    let startNumResult: FunctionEvaluationResult;\n    if (node.args.length > 2) {\n      startNumResult = this.evaluateNode(node.args[2]!, context);\n    } else {\n      startNumResult = {\n        type: \"value\",\n        result: { type: \"number\", value: 1 },\n      };\n    }\n\n    // Handle spilled-values inputs - return spilled-values for spilling\n    if (\n      findTextResult.type === \"spilled-values\" ||\n      withinTextResult.type === \"spilled-values\" ||\n      startNumResult.type === \"spilled-values\"\n    ) {\n      return createFindSpilledResult.call(this, {\n        findTextResult,\n        withinTextResult,\n        startNumResult,\n        context,\n      });\n    }\n\n    if (findTextResult.type === \"awaiting-evaluation\") {\n      return findTextResult;\n    }\n    if (withinTextResult.type === \"awaiting-evaluation\") {\n      return withinTextResult;\n    }\n\n    // Strict type checking - no coercion\n    if (findTextResult.result.type !== \"string\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"FindText argument must be a string\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    if (withinTextResult.result.type !== \"string\") {\n      return {\n        type: \"error\",\n        err: FormulaError.VALUE,\n        message: \"WithinText argument must be a string\",\n        errAddress: context.dependencyNode,\n      };\n    }\n\n    const result = findOperation(\n      findTextResult,\n      withinTextResult,\n      startNumResult,\n      context\n    );\n\n    // Handle error or awaiting evaluation results\n    if (result.type === \"error\" || result.type === \"awaiting-evaluation\") {\n      return result;\n    }\n\n    return {\n      type: \"value\",\n      result: result,\n    };\n  },\n};\n"
  ],
  "mappings": "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",
  "debugId": "ADF4E8CDCE962DEE64756E2164756E21",
  "names": []
}