{"version":3,"sources":["../../src/environment-vite.ts"],"sourcesContent":["import type { Plugin } from \"vite\";\nimport type { FarmEnvironment } from \"./environment\";\n\ntype EnvironmentFunctionKind = \"createServerOnlyFn\" | \"createClientOnlyFn\" | \"createIsomorphicFn\";\n\ninterface AstNode {\n  type: string;\n  start: number;\n  end: number;\n  [key: string]: unknown;\n}\n\ninterface EnvironmentCall {\n  node: AstNode;\n  kind: EnvironmentFunctionKind;\n}\n\ninterface Replacement {\n  start: number;\n  end: number;\n  code: string;\n}\n\nexport interface TransformEnvironmentFunctionsOptions {\n  code: string;\n  id: string;\n  environment: FarmEnvironment;\n  parse: (code: string) => AstNode;\n}\n\nexport interface TransformEnvironmentFunctionsResult {\n  code: string;\n}\n\nconst ENVIRONMENT_IMPORTS = new Set([\n  \"@farm.js/core\",\n  \"@farm.js/core/environment\",\n  \"@farm.js/core/server\",\n]);\nconst ENVIRONMENT_FUNCTIONS = new Set<EnvironmentFunctionKind>([\n  \"createServerOnlyFn\",\n  \"createClientOnlyFn\",\n  \"createIsomorphicFn\",\n]);\nconst MODULE_EXTENSION_RE = /\\.[cm]?[jt]sx?$/;\n\nexport function transformEnvironmentFunctions(\n  options: TransformEnvironmentFunctionsOptions,\n): TransformEnvironmentFunctionsResult | null {\n  if (!isTransformableModule(options.id) || !containsEnvironmentFunction(options.code)) {\n    return null;\n  }\n\n  let output = options.code;\n  let transformed = false;\n\n  for (let pass = 0; pass < 20; pass++) {\n    const ast = options.parse(output);\n    const bindings = findEnvironmentFunctionBindings(ast);\n    if (bindings.named.size === 0 && bindings.namespaces.size === 0) break;\n\n    const calls = findEnvironmentCalls(ast, bindings);\n    if (calls.length === 0) break;\n\n    const innermostCalls = calls.filter(\n      (call) =>\n        !calls.some(\n          (candidate) =>\n            candidate !== call &&\n            candidate.node.start > call.node.start &&\n            candidate.node.end < call.node.end,\n        ),\n    );\n    const replacements = innermostCalls.map((call) =>\n      createReplacement(output, options.id, options.environment, call),\n    );\n\n    output = applyReplacements(output, replacements);\n    transformed = true;\n  }\n\n  if (!transformed) return null;\n\n  const remainingAst = options.parse(output);\n  const remainingBindings = findEnvironmentFunctionBindings(remainingAst);\n  if (findEnvironmentCalls(remainingAst, remainingBindings).length > 0) {\n    throw transformError(options.id, \"environment functions are nested too deeply\");\n  }\n\n  return { code: output };\n}\n\nexport function farmEnvironmentFunctionsPlugin(): Plugin {\n  return {\n    name: \"farm:environment-functions\",\n    enforce: \"post\",\n\n    transform(code, id, transformOptions) {\n      const result = transformEnvironmentFunctions({\n        code,\n        id,\n        environment: resolveBuildEnvironment(\n          this as unknown as { environment?: { name?: string } },\n          transformOptions?.ssr,\n        ),\n        parse: (source) => this.parse(source) as unknown as AstNode,\n      });\n\n      return result ? { code: result.code, map: null } : null;\n    },\n  };\n}\n\nfunction resolveBuildEnvironment(\n  context: { environment?: { name?: string } },\n  ssr: boolean | undefined,\n): FarmEnvironment {\n  if (context.environment?.name === \"client\") return \"client\";\n  if (context.environment?.name === \"rsc\" || context.environment?.name === \"ssr\") {\n    return \"server\";\n  }\n  return ssr ? \"server\" : \"client\";\n}\n\nfunction findEnvironmentFunctionBindings(ast: AstNode) {\n  const named = new Map<string, EnvironmentFunctionKind>();\n  const namespaces = new Set<string>();\n  const body = Array.isArray(ast.body) ? ast.body : [];\n\n  for (const statement of body) {\n    if (!isAstNode(statement) || statement.type !== \"ImportDeclaration\") continue;\n    const source = isAstNode(statement.source) ? statement.source.value : undefined;\n    if (typeof source !== \"string\" || !ENVIRONMENT_IMPORTS.has(source)) continue;\n\n    const specifiers = Array.isArray(statement.specifiers) ? statement.specifiers : [];\n    for (const specifier of specifiers) {\n      if (!isAstNode(specifier) || !isAstNode(specifier.local)) continue;\n      const localName = specifier.local.name;\n      if (typeof localName !== \"string\") continue;\n\n      if (specifier.type === \"ImportNamespaceSpecifier\") {\n        namespaces.add(localName);\n        continue;\n      }\n\n      if (specifier.type !== \"ImportSpecifier\" || !isAstNode(specifier.imported)) continue;\n      const importedName = specifier.imported.name ?? specifier.imported.value;\n      if (isEnvironmentFunctionKind(importedName)) {\n        named.set(localName, importedName);\n      }\n    }\n  }\n\n  return { named, namespaces };\n}\n\nfunction findEnvironmentCalls(\n  ast: AstNode,\n  bindings: ReturnType<typeof findEnvironmentFunctionBindings>,\n): EnvironmentCall[] {\n  const calls: EnvironmentCall[] = [];\n\n  walkAst(ast, (node, ancestors) => {\n    if (node.type !== \"CallExpression\" || !isAstNode(node.callee)) return;\n\n    if (node.callee.type === \"Identifier\" && typeof node.callee.name === \"string\") {\n      const kind = bindings.named.get(node.callee.name);\n      if (kind && !isNameShadowed(node.callee.name, ancestors)) calls.push({ node, kind });\n      return;\n    }\n\n    if (\n      node.callee.type !== \"MemberExpression\" ||\n      node.callee.computed === true ||\n      !isAstNode(node.callee.object) ||\n      !isAstNode(node.callee.property) ||\n      node.callee.object.type !== \"Identifier\" ||\n      node.callee.property.type !== \"Identifier\" ||\n      typeof node.callee.object.name !== \"string\" ||\n      typeof node.callee.property.name !== \"string\" ||\n      !bindings.namespaces.has(node.callee.object.name) ||\n      isNameShadowed(node.callee.object.name, ancestors) ||\n      !isEnvironmentFunctionKind(node.callee.property.name)\n    ) {\n      return;\n    }\n\n    calls.push({ node, kind: node.callee.property.name });\n  });\n\n  return calls;\n}\n\nfunction createReplacement(\n  code: string,\n  id: string,\n  environment: FarmEnvironment,\n  call: EnvironmentCall,\n): Replacement {\n  const args = Array.isArray(call.node.arguments) ? call.node.arguments : [];\n  if (args.length !== 1 || !isAstNode(args[0]) || args[0].type === \"SpreadElement\") {\n    throw transformError(id, `${call.kind}() requires exactly one static argument`);\n  }\n\n  let replacement: string;\n  if (call.kind === \"createIsomorphicFn\") {\n    replacement = selectIsomorphicImplementation(code, id, environment, args[0]);\n  } else {\n    const expected = call.kind === \"createServerOnlyFn\" ? \"server\" : \"client\";\n    replacement =\n      environment === expected\n        ? readNode(code, args[0])\n        : `(0, ${readNode(code, call.node.callee as AstNode)})(undefined, ${JSON.stringify(environment)})`;\n  }\n\n  return {\n    start: call.node.start,\n    end: call.node.end,\n    code: `(${replacement})`,\n  };\n}\n\nfunction selectIsomorphicImplementation(\n  code: string,\n  id: string,\n  environment: FarmEnvironment,\n  optionsNode: AstNode,\n): string {\n  if (optionsNode.type !== \"ObjectExpression\") {\n    throw transformError(id, \"createIsomorphicFn() requires an inline options object\");\n  }\n\n  const properties = Array.isArray(optionsNode.properties) ? optionsNode.properties : [];\n  if (properties.some((property) => isAstNode(property) && property.type === \"SpreadElement\")) {\n    throw transformError(id, \"createIsomorphicFn() does not support spread properties\");\n  }\n\n  let selectedProperty: AstNode | undefined;\n  for (const property of properties) {\n    if (!isAstNode(property) || property.type !== \"Property\" || property.computed === true) {\n      continue;\n    }\n    const key = readPropertyName(property.key);\n    if (key === environment) selectedProperty = property;\n  }\n\n  if (!selectedProperty || !isAstNode(selectedProperty.value)) {\n    throw transformError(id, `createIsomorphicFn() requires a ${environment} implementation`);\n  }\n  if (selectedProperty.kind !== undefined && selectedProperty.kind !== \"init\") {\n    throw transformError(id, \"createIsomorphicFn() does not support getters or setters\");\n  }\n\n  return selectedProperty.method === true\n    ? renderObjectMethod(code, id, selectedProperty.value)\n    : readNode(code, selectedProperty.value);\n}\n\nfunction renderObjectMethod(code: string, id: string, functionNode: AstNode): string {\n  if (!isAstNode(functionNode.body) || !Array.isArray(functionNode.params)) {\n    throw transformError(id, \"createIsomorphicFn() received an unsupported method\");\n  }\n\n  const params = functionNode.params.map((param) => {\n    if (!isAstNode(param)) {\n      throw transformError(id, \"createIsomorphicFn() received an unsupported parameter\");\n    }\n    return readNode(code, param);\n  });\n  const asyncPrefix = functionNode.async === true ? \"async \" : \"\";\n  const generatorMarker = functionNode.generator === true ? \"*\" : \"\";\n  return `${asyncPrefix}function${generatorMarker}(${params.join(\", \")}) ${readNode(code, functionNode.body)}`;\n}\n\nfunction applyReplacements(code: string, replacements: Replacement[]): string {\n  let output = code;\n  for (const replacement of replacements.sort((left, right) => right.start - left.start)) {\n    output = output.slice(0, replacement.start) + replacement.code + output.slice(replacement.end);\n  }\n  return output;\n}\n\nfunction walkAst(\n  node: AstNode,\n  visit: (node: AstNode, ancestors: readonly AstNode[]) => void,\n  ancestors: readonly AstNode[] = [],\n) {\n  visit(node, ancestors);\n  const childAncestors = [...ancestors, node];\n\n  for (const [key, value] of Object.entries(node)) {\n    if (key === \"start\" || key === \"end\" || key === \"loc\" || key === \"range\") continue;\n    if (isAstNode(value)) {\n      walkAst(value, visit, childAncestors);\n    } else if (Array.isArray(value)) {\n      for (const item of value) {\n        if (isAstNode(item)) walkAst(item, visit, childAncestors);\n      }\n    }\n  }\n}\n\nfunction isNameShadowed(name: string, ancestors: readonly AstNode[]): boolean {\n  for (const [index, ancestor] of ancestors.entries()) {\n    if (isFunctionNode(ancestor)) {\n      const params = Array.isArray(ancestor.params) ? ancestor.params : [];\n      if (params.some((param) => patternContainsName(param, name))) return true;\n      if (patternContainsName(ancestor.id, name)) return true;\n      if (\n        isAstNode(ancestor.body) &&\n        ancestors.slice(index + 1).includes(ancestor.body) &&\n        functionBodyDeclaresVarName(ancestor.body, name)\n      ) {\n        return true;\n      }\n    }\n\n    if (ancestor.type === \"CatchClause\" && patternContainsName(ancestor.param, name)) {\n      return true;\n    }\n\n    if (\n      (ancestor.type === \"BlockStatement\" || ancestor.type === \"StaticBlock\") &&\n      blockDeclaresName(ancestor, name)\n    ) {\n      return true;\n    }\n\n    if (loopDeclaresName(ancestor, name)) return true;\n\n    if (\n      ancestor.type === \"SwitchStatement\" &&\n      ancestors.slice(index + 1).some((candidate) => candidate.type === \"SwitchCase\") &&\n      switchDeclaresName(ancestor, name)\n    ) {\n      return true;\n    }\n\n    if (\n      ancestor.type === \"ClassExpression\" &&\n      patternContainsName(ancestor.id, name) &&\n      ancestors.slice(index + 1).some((candidate) => candidate.type === \"ClassBody\")\n    ) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction functionBodyDeclaresVarName(body: AstNode, name: string): boolean {\n  if (body.type === \"VariableDeclaration\" && body.kind === \"var\") {\n    const declarations = Array.isArray(body.declarations) ? body.declarations : [];\n    if (\n      declarations.some(\n        (declaration) => isAstNode(declaration) && patternContainsName(declaration.id, name),\n      )\n    ) {\n      return true;\n    }\n  }\n\n  for (const [key, value] of Object.entries(body)) {\n    if (key === \"start\" || key === \"end\" || key === \"loc\" || key === \"range\") continue;\n    if (isAstNode(value)) {\n      if (isNestedVarScope(value)) continue;\n      if (functionBodyDeclaresVarName(value, name)) return true;\n    } else if (Array.isArray(value)) {\n      for (const item of value) {\n        if (!isAstNode(item) || isNestedVarScope(item)) continue;\n        if (functionBodyDeclaresVarName(item, name)) return true;\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction isNestedVarScope(node: AstNode): boolean {\n  return (\n    isFunctionNode(node) || node.type === \"ClassDeclaration\" || node.type === \"ClassExpression\"\n  );\n}\n\nfunction loopDeclaresName(node: AstNode, name: string): boolean {\n  const declaration =\n    node.type === \"ForStatement\"\n      ? node.init\n      : node.type === \"ForInStatement\" || node.type === \"ForOfStatement\"\n        ? node.left\n        : undefined;\n  if (!isAstNode(declaration) || declaration.type !== \"VariableDeclaration\") return false;\n\n  const declarations = Array.isArray(declaration.declarations) ? declaration.declarations : [];\n  return declarations.some((item) => isAstNode(item) && patternContainsName(item.id, name));\n}\n\nfunction switchDeclaresName(node: AstNode, name: string): boolean {\n  const cases = Array.isArray(node.cases) ? node.cases : [];\n  return cases.some((switchCase) => {\n    if (!isAstNode(switchCase) || !Array.isArray(switchCase.consequent)) return false;\n    return switchCase.consequent.some((statement) => {\n      if (!isAstNode(statement)) return false;\n      if (\n        (statement.type === \"FunctionDeclaration\" || statement.type === \"ClassDeclaration\") &&\n        patternContainsName(statement.id, name)\n      ) {\n        return true;\n      }\n      if (statement.type !== \"VariableDeclaration\" || statement.kind === \"var\") return false;\n      const declarations = Array.isArray(statement.declarations) ? statement.declarations : [];\n      return declarations.some(\n        (declaration) => isAstNode(declaration) && patternContainsName(declaration.id, name),\n      );\n    });\n  });\n}\n\nfunction blockDeclaresName(block: AstNode, name: string): boolean {\n  const statements = Array.isArray(block.body) ? block.body : [];\n  for (const statement of statements) {\n    if (!isAstNode(statement)) continue;\n    if (\n      (statement.type === \"FunctionDeclaration\" || statement.type === \"ClassDeclaration\") &&\n      patternContainsName(statement.id, name)\n    ) {\n      return true;\n    }\n    if (statement.type !== \"VariableDeclaration\" || !Array.isArray(statement.declarations)) {\n      continue;\n    }\n    if (\n      statement.declarations.some(\n        (declaration) => isAstNode(declaration) && patternContainsName(declaration.id, name),\n      )\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction patternContainsName(value: unknown, name: string): boolean {\n  if (!isAstNode(value)) return false;\n  if (value.type === \"Identifier\") return value.name === name;\n\n  if (value.type === \"RestElement\") return patternContainsName(value.argument, name);\n  if (value.type === \"AssignmentPattern\") return patternContainsName(value.left, name);\n  if (value.type === \"Property\") return patternContainsName(value.value, name);\n\n  const elements = Array.isArray(value.elements)\n    ? value.elements\n    : Array.isArray(value.properties)\n      ? value.properties\n      : [];\n  return elements.some((element) => patternContainsName(element, name));\n}\n\nfunction isFunctionNode(node: AstNode): boolean {\n  return (\n    node.type === \"FunctionDeclaration\" ||\n    node.type === \"FunctionExpression\" ||\n    node.type === \"ArrowFunctionExpression\"\n  );\n}\n\nfunction readPropertyName(value: unknown): string | undefined {\n  if (!isAstNode(value)) return undefined;\n  if (value.type === \"Identifier\" && typeof value.name === \"string\") return value.name;\n  if (value.type === \"Literal\" && typeof value.value === \"string\") return value.value;\n  return undefined;\n}\n\nfunction readNode(code: string, node: AstNode): string {\n  return code.slice(node.start, node.end);\n}\n\nfunction isAstNode(value: unknown): value is AstNode {\n  return (\n    !!value &&\n    typeof value === \"object\" &&\n    typeof (value as AstNode).type === \"string\" &&\n    typeof (value as AstNode).start === \"number\" &&\n    typeof (value as AstNode).end === \"number\"\n  );\n}\n\nfunction isEnvironmentFunctionKind(value: unknown): value is EnvironmentFunctionKind {\n  return typeof value === \"string\" && ENVIRONMENT_FUNCTIONS.has(value as EnvironmentFunctionKind);\n}\n\nfunction containsEnvironmentFunction(code: string): boolean {\n  return Array.from(ENVIRONMENT_FUNCTIONS).some((name) => code.includes(name));\n}\n\nfunction isTransformableModule(id: string): boolean {\n  const cleanId = id.split(\"?\", 1)[0];\n  return MODULE_EXTENSION_RE.test(cleanId) && !/\\.d\\.[cm]?ts$/.test(cleanId);\n}\n\nfunction transformError(id: string, message: string): Error {\n  return new Error(`[Farm environment functions] ${message} in ${id.split(\"?\", 1)[0]}`);\n}\n"],"mappings":"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","names":[]}