{"version":3,"sources":["../interpreter/env/variable-proxy.ts"],"names":["VARIABLE_PROXY_PROPS","TYPE","SUBTYPE","METADATA","VARIABLE","IS_VARIABLE","createVariableProxy","variable","value","Proxy","get","target","prop","receiver","type","subtype","metadata","customToString","bind","Reflect","customToJSON","set","has","Object","values","includes","ownKeys","getOwnPropertyDescriptor","configurable","enumerable","prepareValueForShadow","isVariable","prepareParamsForShadow","params","shadowParams","key","entries","isVariableProxy","getVariableType","undefined","createMlldHelpers","primitiveMetadata","name","getType","proxyType","getMetadata","getSubtype","getVariable","meta"],"mappings":"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","file":"chunk-3BKXIDNI.mjs","sourcesContent":["/**\n * Variable Proxy System for Shadow Environments\n * Part of Phase 4: System-wide Variable Flow\n * \n * Creates proxy objects that allow shadow environment code to:\n * 1. Use Variables normally (transparent value access)\n * 2. Introspect type information via special properties\n * 3. Access metadata for advanced use cases\n */\n\nimport type { Variable } from '@core/types/variable/VariableTypes';\nimport { isVariable } from '@interpreter/utils/variable-resolution';\n\n/**\n * Special property names for Variable introspection\n */\nexport const VARIABLE_PROXY_PROPS = {\n  TYPE: '__mlld_type',\n  SUBTYPE: '__mlld_subtype',\n  METADATA: '__mlld_metadata',\n  VARIABLE: '__mlld_variable',\n  IS_VARIABLE: '__mlld_is_variable'\n} as const;\n\n/**\n * Create a proxy for a Variable that allows transparent value access\n * while exposing type information through special properties\n */\nexport function createVariableProxy(variable: Variable): any {\n  const value = variable.value;\n  \n  // Can't proxy primitives (string, number, boolean, null)\n  if (value === null || typeof value !== 'object') {\n    // For primitives, we'll need a different strategy\n    // Could wrap in an object but that changes behavior\n    return value;\n  }\n  \n  // Create proxy for objects and arrays\n  return new Proxy(value, {\n    get(target, prop, receiver) {\n      // Handle special Variable introspection properties\n      switch (prop) {\n        case VARIABLE_PROXY_PROPS.TYPE:\n          return variable.type;\n          \n        case VARIABLE_PROXY_PROPS.SUBTYPE:\n          return variable.subtype;\n          \n        case VARIABLE_PROXY_PROPS.METADATA:\n          return variable.metadata || {};\n          \n        case VARIABLE_PROXY_PROPS.VARIABLE:\n          return variable;\n          \n        case VARIABLE_PROXY_PROPS.IS_VARIABLE:\n          return true;\n          \n        // Special handling for toString to preserve custom behavior\n        case 'toString':\n          if (variable.metadata?.customToString) {\n            // Bind the custom toString to the target\n            return variable.metadata.customToString.bind(target);\n          }\n          return Reflect.get(target, prop, receiver);\n          \n        // Special handling for toJSON\n        case 'toJSON':\n          if (variable.metadata?.customToJSON) {\n            return variable.metadata.customToJSON;\n          }\n          return Reflect.get(target, prop, receiver);\n          \n        default:\n          // Normal property access\n          return Reflect.get(target, prop, receiver);\n      }\n    },\n    \n    // Preserve normal array/object behavior for other operations\n    set(target, prop, value, receiver) {\n      return Reflect.set(target, prop, value, receiver);\n    },\n    \n    has(target, prop) {\n      // Report that we have the special properties\n      if (Object.values(VARIABLE_PROXY_PROPS).includes(prop as any)) {\n        return true;\n      }\n      return Reflect.has(target, prop);\n    },\n    \n    ownKeys(target) {\n      // Don't include special properties in enumeration\n      // This keeps JSON.stringify and for...in loops clean\n      return Reflect.ownKeys(target);\n    },\n    \n    getOwnPropertyDescriptor(target, prop) {\n      // Special properties are non-enumerable\n      if (Object.values(VARIABLE_PROXY_PROPS).includes(prop as any)) {\n        return {\n          configurable: true,\n          enumerable: false,\n          get: () => this.get!(target, prop, target)\n        };\n      }\n      return Reflect.getOwnPropertyDescriptor(target, prop);\n    }\n  });\n}\n\n/**\n * Prepare a value for passing to shadow environment\n * Variables become proxies, non-Variables pass through\n */\nexport function prepareValueForShadow(value: any): any {\n  if (isVariable(value)) {\n    return createVariableProxy(value);\n  }\n  return value;\n}\n\n/**\n * Prepare parameters object for shadow environment\n * Converts all Variable values to proxies\n */\nexport function prepareParamsForShadow(params: Record<string, any>): Record<string, any> {\n  const shadowParams: Record<string, any> = {};\n  \n  for (const [key, value] of Object.entries(params)) {\n    shadowParams[key] = prepareValueForShadow(value);\n  }\n  \n  return shadowParams;\n}\n\n/**\n * Helper function for shadow environments to check if a value is a Variable proxy\n */\nexport function isVariableProxy(value: any): boolean {\n  if (value === null || typeof value !== 'object') {\n    return false;\n  }\n  \n  try {\n    // Try to access the special property\n    return value[VARIABLE_PROXY_PROPS.IS_VARIABLE] === true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Helper function to get Variable type from a proxy\n */\nexport function getVariableType(value: any): string | undefined {\n  if (!isVariableProxy(value)) {\n    return undefined;\n  }\n  \n  try {\n    return value[VARIABLE_PROXY_PROPS.TYPE];\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Create mlld helper object for shadow environments\n * @param primitiveMetadata - Optional metadata for primitive values that can't be proxied\n */\nexport function createMlldHelpers(primitiveMetadata?: Record<string, any>) {\n  return {\n    // Type checking - also check primitive metadata\n    isVariable: (value: any, name?: string) => {\n      // First check if it's a proxy\n      if (isVariableProxy(value)) {\n        return true;\n      }\n      // Then check if we have metadata for this primitive\n      if (name && primitiveMetadata && primitiveMetadata[name]) {\n        return primitiveMetadata[name].isVariable === true;\n      }\n      return false;\n    },\n    \n    getType: (value: any, name?: string) => {\n      // First check if it's a proxy\n      const proxyType = getVariableType(value);\n      if (proxyType !== undefined) {\n        return proxyType;\n      }\n      // Then check primitive metadata\n      if (name && primitiveMetadata && primitiveMetadata[name]) {\n        return primitiveMetadata[name].type;\n      }\n      return undefined;\n    },\n    \n    // Property names for direct access\n    TYPE: VARIABLE_PROXY_PROPS.TYPE,\n    SUBTYPE: VARIABLE_PROXY_PROPS.SUBTYPE,\n    METADATA: VARIABLE_PROXY_PROPS.METADATA,\n    VARIABLE: VARIABLE_PROXY_PROPS.VARIABLE,\n    \n    // Metadata helpers - also check primitive metadata\n    getMetadata: (value: any, name?: string) => {\n      if (isVariableProxy(value)) {\n        try {\n          return value[VARIABLE_PROXY_PROPS.METADATA];\n        } catch {\n          return undefined;\n        }\n      }\n      // Check primitive metadata\n      if (name && primitiveMetadata && primitiveMetadata[name]) {\n        return primitiveMetadata[name].metadata || {};\n      }\n      return undefined;\n    },\n    \n    // Get subtype - also check primitive metadata\n    getSubtype: (value: any, name?: string) => {\n      if (isVariableProxy(value)) {\n        try {\n          return value[VARIABLE_PROXY_PROPS.SUBTYPE];\n        } catch {\n          return undefined;\n        }\n      }\n      // Check primitive metadata\n      if (name && primitiveMetadata && primitiveMetadata[name]) {\n        return primitiveMetadata[name].subtype;\n      }\n      return undefined;\n    },\n    \n    // Get the full Variable object - or reconstruct from metadata\n    getVariable: (value: any, name?: string) => {\n      if (isVariableProxy(value)) {\n        try {\n          return value[VARIABLE_PROXY_PROPS.VARIABLE];\n        } catch {\n          return undefined;\n        }\n      }\n      // Check primitive metadata\n      if (name && primitiveMetadata && primitiveMetadata[name]) {\n        const meta = primitiveMetadata[name];\n        // Reconstruct a Variable-like object\n        return {\n          name,\n          value,\n          type: meta.type,\n          subtype: meta.subtype,\n          metadata: meta.metadata,\n          isVariable: true\n        };\n      }\n      return undefined;\n    }\n  };\n}"]}