UNPKG

mlld

Version:

mlld: a modular prompt scripting language

1 lines 14.3 kB
{"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":";;;;AAgBO,IAAMA,oBAAuB,GAAA;EAClCC,IAAM,EAAA,aAAA;EACNC,OAAS,EAAA,gBAAA;EACTC,QAAU,EAAA,iBAAA;EACVC,QAAU,EAAA,iBAAA;EACVC,WAAa,EAAA;AACf,CAAA;AAMO,SAASC,oBAAoBC,QAAkB,EAAA;AACpD,EAAA,MAAMC,QAAQD,QAASC,CAAAA,KAAAA;AAGvB,EAAA,IAAIA,KAAU,KAAA,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAU,EAAA;AAG/C,IAAOA,OAAAA,KAAAA;AACT;AAGA,EAAO,OAAA,IAAIC,MAAMD,KAAO,EAAA;IACtBE,GAAIC,CAAAA,MAAAA,EAAQC,MAAMC,QAAQ,EAAA;AAExB,MAAA,QAAQD,IAAAA;AACN,QAAA,KAAKZ,oBAAqBC,CAAAA,IAAAA;AACxB,UAAA,OAAOM,QAASO,CAAAA,IAAAA;AAElB,QAAA,KAAKd,oBAAqBE,CAAAA,OAAAA;AACxB,UAAA,OAAOK,QAASQ,CAAAA,OAAAA;AAElB,QAAA,KAAKf,oBAAqBG,CAAAA,QAAAA;AACxB,UAAOI,OAAAA,QAAAA,CAASS,YAAY,EAAC;AAE/B,QAAA,KAAKhB,oBAAqBI,CAAAA,QAAAA;AACxB,UAAOG,OAAAA,QAAAA;AAET,QAAA,KAAKP,oBAAqBK,CAAAA,WAAAA;AACxB,UAAO,OAAA,IAAA;;QAGT,KAAK,UAAA;AACH,UAAIE,IAAAA,QAAAA,CAASS,UAAUC,cAAgB,EAAA;AAErC,YAAA,OAAOV,QAASS,CAAAA,QAAAA,CAASC,cAAeC,CAAAA,IAAAA,CAAKP,MAAAA,CAAAA;AAC/C;AACA,UAAA,OAAOQ,OAAQT,CAAAA,GAAAA,CAAIC,MAAQC,EAAAA,IAAAA,EAAMC,QAAAA,CAAAA;;QAGnC,KAAK,QAAA;AACH,UAAIN,IAAAA,QAAAA,CAASS,UAAUI,YAAc,EAAA;AACnC,YAAA,OAAOb,SAASS,QAASI,CAAAA,YAAAA;AAC3B;AACA,UAAA,OAAOD,OAAQT,CAAAA,GAAAA,CAAIC,MAAQC,EAAAA,IAAAA,EAAMC,QAAAA,CAAAA;AAEnC,QAAA;AAEE,UAAA,OAAOM,OAAQT,CAAAA,GAAAA,CAAIC,MAAQC,EAAAA,IAAAA,EAAMC,QAAAA,CAAAA;AACrC;AACF,KAAA;;IAGAQ,GAAIV,CAAAA,MAAAA,EAAQC,IAAMJ,EAAAA,MAAAA,EAAOK,QAAQ,EAAA;AAC/B,MAAA,OAAOM,OAAQE,CAAAA,GAAAA,CAAIV,MAAQC,EAAAA,IAAAA,EAAMJ,QAAOK,QAAAA,CAAAA;AAC1C,KAAA;AAEAS,IAAAA,GAAAA,CAAIX,QAAQC,IAAI,EAAA;AAEd,MAAA,IAAIW,OAAOC,MAAOxB,CAAAA,oBAAAA,CAAsByB,CAAAA,QAAAA,CAASb,IAAAA,CAAc,EAAA;AAC7D,QAAO,OAAA,IAAA;AACT;AACA,MAAOO,OAAAA,OAAAA,CAAQG,GAAIX,CAAAA,MAAAA,EAAQC,IAAAA,CAAAA;AAC7B,KAAA;AAEAc,IAAAA,OAAAA,CAAQf,MAAM,EAAA;AAGZ,MAAOQ,OAAAA,OAAAA,CAAQO,QAAQf,MAAAA,CAAAA;AACzB,KAAA;AAEAgB,IAAAA,wBAAAA,CAAyBhB,QAAQC,IAAI,EAAA;AAEnC,MAAA,IAAIW,OAAOC,MAAOxB,CAAAA,oBAAAA,CAAsByB,CAAAA,QAAAA,CAASb,IAAAA,CAAc,EAAA;AAC7D,QAAO,OAAA;UACLgB,YAAc,EAAA,IAAA;UACdC,UAAY,EAAA,KAAA;AACZnB,UAAAA,GAAAA,+BAAW,IAAKA,CAAAA,GAAAA,CAAKC,MAAQC,EAAAA,IAAAA,EAAMD,MAAAA,CAA9B,EAAA,KAAA;AACP,SAAA;AACF;AACA,MAAOQ,OAAAA,OAAAA,CAAQQ,wBAAyBhB,CAAAA,MAAAA,EAAQC,IAAAA,CAAAA;AAClD;GACF,CAAA;AACF;AAlFgBN,MAAAA,CAAAA,mBAAAA,EAAAA,qBAAAA,CAAAA;AAwFT,SAASwB,sBAAsBtB,KAAU,EAAA;AAC9C,EAAIuB,IAAAA,UAAAA,CAAWvB,KAAAA,CAAQ,EAAA;AACrB,IAAA,OAAOF,oBAAoBE,KAAAA,CAAAA;AAC7B;AACA,EAAOA,OAAAA,KAAAA;AACT;AALgBsB,MAAAA,CAAAA,qBAAAA,EAAAA,uBAAAA,CAAAA;AAWT,SAASE,uBAAuBC,MAA2B,EAAA;AAChE,EAAA,MAAMC,eAAoC,EAAC;AAE3C,EAAA,KAAA,MAAW,CAACC,GAAK3B,EAAAA,KAAAA,KAAUe,MAAOa,CAAAA,OAAAA,CAAQH,MAAAA,CAAS,EAAA;AACjDC,IAAaC,YAAAA,CAAAA,GAAAA,CAAOL,GAAAA,qBAAAA,CAAsBtB,KAAAA,CAAAA;AAC5C;AAEA,EAAO0B,OAAAA,YAAAA;AACT;AARgBF,MAAAA,CAAAA,sBAAAA,EAAAA,wBAAAA,CAAAA;AAaT,SAASK,gBAAgB7B,KAAU,EAAA;AACxC,EAAA,IAAIA,KAAU,KAAA,IAAA,IAAQ,OAAOA,KAAAA,KAAU,QAAU,EAAA;AAC/C,IAAO,OAAA,KAAA;AACT;AAEA,EAAI,IAAA;AAEF,IAAOA,OAAAA,KAAAA,CAAMR,oBAAqBK,CAAAA,WAAW,CAAM,KAAA,IAAA;GAC7C,CAAA,MAAA;AACN,IAAO,OAAA,KAAA;AACT;AACF;AAXgBgC,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAgBT,SAASC,gBAAgB9B,KAAU,EAAA;AACxC,EAAI,IAAA,CAAC6B,eAAgB7B,CAAAA,KAAAA,CAAQ,EAAA;AAC3B,IAAO+B,OAAAA,MAAAA;AACT;AAEA,EAAI,IAAA;AACF,IAAO/B,OAAAA,KAAAA,CAAMR,qBAAqBC,IAAI,CAAA;GAChC,CAAA,MAAA;AACN,IAAOsC,OAAAA,MAAAA;AACT;AACF;AAVgBD,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAgBT,SAASE,kBAAkBC,iBAAuC,EAAA;AACvE,EAAO,OAAA;;IAELV,UAAY,kBAAA,MAAA,CAAA,CAACvB,OAAYkC,IAAAA,KAAAA;AAEvB,MAAIL,IAAAA,eAAAA,CAAgB7B,KAAAA,CAAQ,EAAA;AAC1B,QAAO,OAAA,IAAA;AACT;AAEA,MAAA,IAAIkC,IAAQD,IAAAA,iBAAAA,IAAqBA,iBAAkBC,CAAAA,IAAAA,CAAO,EAAA;AACxD,QAAOD,OAAAA,iBAAAA,CAAkBC,IAAAA,CAAAA,CAAMX,UAAe,KAAA,IAAA;AAChD;AACA,MAAO,OAAA,KAAA;KATG,EAAA,YAAA,CAAA;IAYZY,OAAS,kBAAA,MAAA,CAAA,CAACnC,OAAYkC,IAAAA,KAAAA;AAEpB,MAAME,MAAAA,SAAAA,GAAYN,gBAAgB9B,KAAAA,CAAAA;AAClC,MAAA,IAAIoC,cAAcL,MAAW,EAAA;AAC3B,QAAOK,OAAAA,SAAAA;AACT;AAEA,MAAA,IAAIF,IAAQD,IAAAA,iBAAAA,IAAqBA,iBAAkBC,CAAAA,IAAAA,CAAO,EAAA;AACxD,QAAOD,OAAAA,iBAAAA,CAAkBC,IAAAA,CAAM5B,CAAAA,IAAAA;AACjC;AACA,MAAOyB,OAAAA,MAAAA;KAVA,EAAA,SAAA,CAAA;;AAcTtC,IAAAA,IAAAA,EAAMD,oBAAqBC,CAAAA,IAAAA;AAC3BC,IAAAA,OAAAA,EAASF,oBAAqBE,CAAAA,OAAAA;AAC9BC,IAAAA,QAAAA,EAAUH,oBAAqBG,CAAAA,QAAAA;AAC/BC,IAAAA,QAAAA,EAAUJ,oBAAqBI,CAAAA,QAAAA;;IAG/ByC,WAAa,kBAAA,MAAA,CAAA,CAACrC,OAAYkC,IAAAA,KAAAA;AACxB,MAAIL,IAAAA,eAAAA,CAAgB7B,KAAAA,CAAQ,EAAA;AAC1B,QAAI,IAAA;AACF,UAAOA,OAAAA,KAAAA,CAAMR,qBAAqBG,QAAQ,CAAA;SACpC,CAAA,MAAA;AACN,UAAOoC,OAAAA,MAAAA;AACT;AACF;AAEA,MAAA,IAAIG,IAAQD,IAAAA,iBAAAA,IAAqBA,iBAAkBC,CAAAA,IAAAA,CAAO,EAAA;AACxD,QAAA,OAAOD,iBAAkBC,CAAAA,IAAAA,CAAM1B,CAAAA,QAAAA,IAAY,EAAC;AAC9C;AACA,MAAOuB,OAAAA,MAAAA;KAZI,EAAA,aAAA,CAAA;;IAgBbO,UAAY,kBAAA,MAAA,CAAA,CAACtC,OAAYkC,IAAAA,KAAAA;AACvB,MAAIL,IAAAA,eAAAA,CAAgB7B,KAAAA,CAAQ,EAAA;AAC1B,QAAI,IAAA;AACF,UAAOA,OAAAA,KAAAA,CAAMR,qBAAqBE,OAAO,CAAA;SACnC,CAAA,MAAA;AACN,UAAOqC,OAAAA,MAAAA;AACT;AACF;AAEA,MAAA,IAAIG,IAAQD,IAAAA,iBAAAA,IAAqBA,iBAAkBC,CAAAA,IAAAA,CAAO,EAAA;AACxD,QAAOD,OAAAA,iBAAAA,CAAkBC,IAAAA,CAAM3B,CAAAA,OAAAA;AACjC;AACA,MAAOwB,OAAAA,MAAAA;KAZG,EAAA,YAAA,CAAA;;IAgBZQ,WAAa,kBAAA,MAAA,CAAA,CAACvC,OAAYkC,IAAAA,KAAAA;AACxB,MAAIL,IAAAA,eAAAA,CAAgB7B,KAAAA,CAAQ,EAAA;AAC1B,QAAI,IAAA;AACF,UAAOA,OAAAA,KAAAA,CAAMR,qBAAqBI,QAAQ,CAAA;SACpC,CAAA,MAAA;AACN,UAAOmC,OAAAA,MAAAA;AACT;AACF;AAEA,MAAA,IAAIG,IAAQD,IAAAA,iBAAAA,IAAqBA,iBAAkBC,CAAAA,IAAAA,CAAO,EAAA;AACxD,QAAMM,MAAAA,IAAAA,GAAOP,kBAAkBC,IAAAA,CAAAA;AAE/B,QAAO,OAAA;AACLA,UAAAA,IAAAA;AACAlC,UAAAA,KAAAA;AACAM,UAAAA,IAAAA,EAAMkC,IAAKlC,CAAAA,IAAAA;AACXC,UAAAA,OAAAA,EAASiC,IAAKjC,CAAAA,OAAAA;AACdC,UAAAA,QAAAA,EAAUgC,IAAKhC,CAAAA,QAAAA;UACfe,UAAY,EAAA;AACd,SAAA;AACF;AACA,MAAOQ,OAAAA,MAAAA;KArBI,EAAA,aAAA;AAuBf,GAAA;AACF;AA3FgBC,MAAAA,CAAAA,iBAAAA,EAAAA,mBAAAA,CAAAA","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}"]}