@vcp-dev/site-edit-engine 0.9.5 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,13 +1,14 @@
1
- import{SiteEditOperationRequestSchema as Ck,SiteEditPatchPlanSchema as Rk}from"@vcp-dev/contracts";function Kt(e){return{requestId:e.requestId,kind:e.kind,composition:e.composition,target:e.target,resultVersion:e.resultVersion,affectedFiles:e.affectedFiles,...e.output?{output:e.output}:{},...e.selectionRef?{selectionRef:e.selectionRef}:{}}}function Vr(e,t){let n=t[0]??"Site edit operation request failed contract validation.";return{ok:!1,composition:{routeId:e.composition.routeId,...e.composition.templateId!==void 0?{effectiveTemplateId:e.composition.templateId}:{}},error:{code:"INVALID_PARAMS",message:n},data:{requestId:e.id,kind:e.kind,composition:{routeId:e.composition.routeId,...e.composition.templateId!==void 0?{effectiveTemplateId:e.composition.templateId}:{}},target:e.target,resultVersion:e.documentVersion}}}function Ur(e,t){if(!e.pageComposition)throw new Error("RenderDocument is missing the required Page Composition projection.");return{siteId:t.siteId,snapshotId:t.snapshotId,composition:e.composition,version:e.version,entries:e.entries.map(n=>({key:n.key,...n.pageCompositionUnitKey?{pageCompositionUnitKey:n.pageCompositionUnitKey}:{},operationSummary:{canUpdateText:n.operationSummary.canUpdateText,canInsertChild:n.operationSummary.canInsertChild,canMove:n.operationSummary.canMove,canRemove:n.operationSummary.canRemove},...n.dynamicDataSummary?{dynamicDataSummary:n.dynamicDataSummary}:{}})),pageComposition:e.pageComposition.status==="unsupported"?{status:"unsupported",reason:e.pageComposition.reason,diagnostics:e.pageComposition.diagnostics}:{status:"supported",containerKey:e.pageComposition.container.key,hasBusinessMembers:e.pageComposition.businessMembers.length>0,placementUnitKeys:e.pageComposition.placementUnits.map(n=>n.key),placements:e.pageComposition.placements.map(n=>({placementKey:n.placementKey,placementUnitKey:n.placementUnitKey,relation:n.relation}))}}}function Kr(e){return{composition:e.composition,key:e.key,tag:e.tag,label:e.label,sourceLocator:e.sourceLocator,isOpaque:e.isOpaque,ancestors:e.ancestors,componentName:e.componentName,sourceFile:e.sourceFile,capabilities:Mm(e.capabilities),provenanceChain:e.provenanceChain?{editMode:e.provenanceChain.editMode,diagnostics:e.provenanceChain.diagnostics}:void 0,dynamicData:e.dynamicData,textSegments:e.textSegments.map(t=>({index:t.index,editable:t.editable,sourceKind:t.source?.kind??null})),boundaryKind:e.boundaryKind}}function Jr(e,t){let n=new Date().toISOString();return e.type==="document-changed"?{type:"site-edit.document.changed",siteId:t.siteId,snapshotId:t.snapshotId,composition:e.composition,version:e.version,at:n}:e.type==="operation-completed"?{type:"site-edit.operation.completed",siteId:t.siteId,composition:e.composition,result:Kt(e.result),at:n}:e.type==="operation-failed"?{type:"site-edit.operation.failed",siteId:t.siteId,requestId:e.requestId,composition:e.composition,error:e.error,at:n}:e.type==="capability-changed"?{type:"site-edit.capability.changed",siteId:t.siteId,composition:e.composition,keys:e.keys,at:n}:e.type==="graph-invalidated"?{type:"site-edit.graph.invalidated",siteId:t.siteId,composition:e.composition,at:n}:e.type==="graph-ready"?{type:"site-edit.graph.ready",siteId:t.siteId,composition:e.composition,version:e.version,at:n}:e.type==="graph-error"?{type:"site-edit.graph.error",siteId:t.siteId,composition:e.composition,message:e.message,at:n}:null}function Mm(e){return{composition:e.composition,key:e.key,canUpdateText:e.canUpdateText,canInsertChild:e.canInsertChild,canMove:e.canMove,canRemove:e.canRemove,editModes:e.editModes?{updateText:e.editModes.updateText?{mode:e.editModes.updateText.mode,reasonCode:e.editModes.updateText.reasonCode}:void 0,insertChild:e.editModes.insertChild?{mode:e.editModes.insertChild.mode,reasonCode:e.editModes.insertChild.reasonCode}:void 0,move:e.editModes.move?{mode:e.editModes.move.mode,reasonCode:e.editModes.move.reasonCode}:void 0,remove:e.editModes.remove?{mode:e.editModes.remove.mode,reasonCode:e.editModes.remove.reasonCode}:void 0}:void 0,constraints:e.constraints}}import{computeSiteEditCompositionKey as fv,composeSiteEditRepeatInstanceKey as pv,getSiteEditSourceDeleteProtectionReason as mv,isSiteEditTextSourcePath as gv,parseSiteEditRepeatInstanceKey as hv,SITE_EDIT_SOURCE_DELETE_CAPABILITY as yv,stripSiteEditRepeatInstanceKeys as $e}from"@vcp-dev/contracts";import{parse as xv}from"yaml";import ei from"node:path";function Jn(e,t,n){return`${e}::${t}::${n}`}var D={NODE_NOT_FOUND:"NODE_NOT_FOUND",HOME_PAGE_LOCKED:"HOME_PAGE_LOCKED",ROUTE_NOT_FOUND:"ROUTE_NOT_FOUND",CAPABILITY_REJECTED:"CAPABILITY_REJECTED",CONSTRAINT_VIOLATED:"CONSTRAINT_VIOLATED",INVALID_PARAMS:"INVALID_PARAMS",PLAN_FAILED:"PLAN_FAILED",TRANSACTION_PREFLIGHT_FAILED:"TRANSACTION_PREFLIGHT_FAILED",ROUTE_REBUILD_FAILED:"ROUTE_REBUILD_FAILED",HISTORY_COMMIT_FAILED:"HISTORY_COMMIT_FAILED",MATERIALIZATION_CONFLICT:"MATERIALIZATION_CONFLICT",MATERIALIZATION_REJECTED:"MATERIALIZATION_REJECTED",MUTATION_ASSERTION_REQUIRED:"MUTATION_ASSERTION_REQUIRED",MUTATION_ASSERTION_INVALID:"MUTATION_ASSERTION_INVALID",VERSION_STALE:"VERSION_STALE",AST_PARSE_ERROR:"AST_PARSE_ERROR",UNSUPPORTED_OPERATION:"UNSUPPORTED_OPERATION",LOCATOR_FAILED:"LOCATOR_FAILED",INVALID_TARGET:"INVALID_TARGET",WRITE_IO_ERROR:"WRITE_IO_ERROR",CONCURRENT_MODIFIED:"CONCURRENT_MODIFIED",ROLLBACK_FAILED:"ROLLBACK_FAILED",RECOVERY_REQUIRED:"RECOVERY_REQUIRED",RECOVERY_PERSIST_FAILED:"RECOVERY_PERSIST_FAILED",MUTATION_SESSION_REQUIRED:"MUTATION_SESSION_REQUIRED",LEASE_ASSERTION_INVALID:"LEASE_ASSERTION_INVALID",LEASE_ASSERTION_EXPIRED:"LEASE_ASSERTION_EXPIRED",LEASE_ASSERTION_SCOPE_MISMATCH:"LEASE_ASSERTION_SCOPE_MISMATCH",CROSS_PAGE_MOVE_UNSUPPORTED:"CROSS_PAGE_MOVE_UNSUPPORTED",INTERNAL_ERROR:"INTERNAL_ERROR"};import Mi from"@babel/traverse";import*as x from"@babel/types";import{createHash as Vm}from"node:crypto";import*as Lc from"@babel/parser";function Jt(e,t,n,r){return{code:e,message:t,locatorKind:n,details:r}}function V(e,t,n,r,o){return{ok:!1,source:e,diagnostic:Jt(t,n,r,o)}}function wi(e,t,n,r,o){return{ok:!1,source:e,diagnostic:Jt(t,n,r,o)}}var Om={"tsx-module":["jsx","typescript"],"ts-module":["typescript"],"next-app-entry":["jsx","typescript"]};function at(e){let{source:t,profile:n}=e;try{return{ok:!0,ast:Lc.parse(t,{sourceType:"module",plugins:Om[n]})}}catch(r){return{ok:!1,source:t,diagnostic:Jt("parse-failed",`AST parse failed: ${r instanceof Error?r.message:String(r)}`)}}}function Ni(e,t){return at({source:e,profile:Bc(t.kind)})}function Pi(e,t){return at({source:e,profile:Bc(t)})}function Bc(e){return"next-app-entry"}function Xt(e){let{filePath:t,source:n}=e,r=t.toLowerCase().split(".").pop()??"";return r==="tsx"?"tsx-module":r==="ts"?"ts-module":r==="jsx"||r==="js"||r===""&&/<\w[\s\S]*>/.test(n)?"tsx-module":"next-app-entry"}import*as Dm from"@babel/parser";import*as hn from"@babel/types";import*as Ct from"node:path";var Ai=[".tsx",".ts",".jsx",".js"],Lm=Ai.map(e=>`/index${e}`),Bm=new Set(["json","css","scss","sass","less","svg","png","jpg","jpeg","gif","webp","avif","ico","bmp","woff","woff2","ttf","otf","eot","mp4","webm","mp3","wav","ogg","pdf","txt","md","csv","xml","yaml","yml"]);function jc(e){let t=e.replace(/[?#].*$/,""),n=/\.([a-z0-9]+)$/i.exec(t);return n!==null&&Bm.has(n[1].toLowerCase())}function $c(e){let t=[];for(let n of e.program.body)hn.isImportDeclaration(n)&&typeof n.source.value=="string"&&ct(n.source.value)&&t.push(n.source.value),hn.isExportNamedDeclaration(n)&&n.source&&typeof n.source.value=="string"&&ct(n.source.value)&&t.push(n.source.value),hn.isExportAllDeclaration(n)&&typeof n.source.value=="string"&&ct(n.source.value)&&t.push(n.source.value);return Ti(e.program,t),t}function Ti(e,t){if(!e||typeof e!="object")return;let n=e;if(n.type==="CallExpression"&&n.callee?.type==="Import"){let r=n.arguments?.[0];r?.type==="StringLiteral"&&typeof r.value=="string"&&ct(r.value)&&t.push(r.value)}for(let r of Object.values(n))if(Array.isArray(r))for(let o of r)Ti(o,t);else r&&typeof r=="object"&&Ti(r,t)}function ct(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("@/")}function _i(e,t){if(t.startsWith("@/"))return t.slice(2).replace(/\\/g,"/");let n=Ct.dirname(e);return Ct.join(n,t).replace(/\\/g,"/")}async function jm(e,t){if(Ai.some(n=>e.endsWith(n))&&await t(e))return e;for(let n of Ai){let r=`${e}${n}`;if(await t(r))return r}for(let n of Lm){let r=`${e}${n}`;if(await t(r))return r}return null}async function yn(e,t,n){let r=await Xr(e,t,n);return r.ok?r.path:null}async function Xr(e,t,n){let r=_i(e,t);try{if(!$m(e,t,r))return{ok:!1,diagnostic:{path:r,code:"import-not-found",message:`Local import not found: ${t}`,details:{fromFile:e,specifier:t}}};let o=await jm(r,n);return o?{ok:!0,path:o}:{ok:!1,diagnostic:{path:r,code:"import-not-found",message:`Local import not found: ${t}`,details:{fromFile:e,specifier:t}}}}catch(o){return{ok:!1,diagnostic:{path:r,code:"import-resolve-failed",message:`Failed to resolve local import: ${t}`,details:{fromFile:e,specifier:t,reason:o instanceof Error?o.message:String(o)}}}}}function $m(e,t,n){if(!ct(t)||t.includes("\0")||t.includes("\\")||Ct.posix.isAbsolute(n))return!1;let r=Ct.posix.normalize(n);if(r===".."||r.startsWith("../"))return!1;if(t.startsWith("@/")){let o=t.slice(2);return o.length>0&&!o.split("/").some(i=>i==="..")}return!Ct.posix.isAbsolute(e)}var Xn=(e,t)=>{let n=at({source:t,profile:Xt({filePath:e,source:t})});return n.ok?{ok:!0,module:{file:e,source:t,sourceHash:`sha256:${Vm("sha256").update(t).digest("hex")}`,ast:n.ast,imports:$c(n.ast).map(r=>({specifier:r}))}}:{ok:!1,diagnostic:{path:e,code:"parse-failed",message:n.diagnostic.message}}};var zr="components/ui";function zt(e){if(!e)return!1;let t=Fi(e);return t===zr||t.startsWith(`${zr}/`)||t.includes(`/${zr}/`)||t.endsWith(`/${zr}`)}function zn(e,t){return e?e.startsWith("@/")||e.startsWith("~/")?zt(e.slice(2)):e.startsWith("./")||e.startsWith("../")?zt(Fi(`${Um(t)}/${e}`)):zt(e):!1}function Fi(e){let n=(e.split("?")[0]??e).replace(/\\/g,"/").replace(/^\.\//,""),r=[];for(let o of n.split("/"))if(!(!o||o===".")){if(o===".."){r.pop();continue}r.push(o)}return r.join("/")}function Um(e){let t=Fi(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}var Km=typeof Mi=="function"?Mi:Mi.default;function _e(e){return{startLine:e.loc?.start.line??0,startColumn:e.loc?.start.column??0,endLine:e.loc?.end.line??0,endColumn:e.loc?.end.column??0}}function Jm(e){return/^[A-Z]/.test(e)}function ji(e){let t=e.openingElement;return x.isJSXIdentifier(t.name)?t.name.name==="Fragment":x.isJSXMemberExpression(t.name)?t.name.property.name==="Fragment":!1}function Sn(e){return x.isJSXFragment(e)}function Kc(e){return x.isJSXIdentifier(e.name)?e.name.name:x.isJSXMemberExpression(e.name)?Jc(e.name):x.isJSXNamespacedName(e.name)?`${e.name.namespace.name}:${e.name.name.name}`:"unknown"}function Jc(e){return x.isJSXIdentifier(e.object)?`${e.object.name}.${e.property.name}`:x.isJSXMemberExpression(e.object)?`${Jc(e.object)}.${e.property.name}`:e.property.name}function Xm(e){return e.split(".")[0]??e}function zm(e){let t=e;for(;t;){let n=t.node;if(x.isFunctionDeclaration(n)&&n.id||x.isVariableDeclarator(n)&&x.isIdentifier(n.id))return n.id.name;if(x.isExportDefaultDeclaration(n)){let r=n.declaration;if(x.isFunctionDeclaration(r)&&r.id)return r.id.name;if(x.isFunctionDeclaration(r)&&!r.id)return"default"}t=t.parentPath}return null}function Wm(){let e=new Map;return{getOrdinal(t,n){let r=t??"__root__";e.has(r)||e.set(r,new Map);let o=e.get(r),i=o.get(n)??0;return o.set(n,i+1),i}}}function Hm(e){let t=new Map;for(let n of e.program.body){if(!x.isImportDeclaration(n))continue;let r=n.source.value;for(let o of n.specifiers)if(x.isImportDefaultSpecifier(o))t.set(o.local.name,{specifier:r,exportName:"default"});else if(x.isImportNamespaceSpecifier(o))t.set(o.local.name,{specifier:r,exportName:"*"});else if(x.isImportSpecifier(o)){let i=x.isIdentifier(o.imported)?o.imported.name:o.imported.value;t.set(o.local.name,{specifier:r,exportName:i})}}return t}function mt(e,t=[]){if(x.isIdentifier(e))return t.push(e.name),t;if(x.isObjectPattern(e)){for(let n of e.properties)x.isObjectProperty(n)?mt(n.value,t):x.isRestElement(n)&&mt(n.argument,t);return t}if(x.isArrayPattern(e)){for(let n of e.elements)n&&(x.isRestElement(n)?mt(n.argument,t):mt(n,t));return t}return x.isAssignmentPattern(e)?(mt(e.left,t),t):(x.isRestElement(e)&&mt(e.argument,t),t)}function Rt(e,t){return e.start==null||e.end==null?"":t.slice(e.start,e.end)}function Hr(e,t){for(let n=t.length-1;n>=0;n-=1){let r=t[n].get(e);if(r)return r.resolved?{kind:"resolved",value:r.value}:{kind:"unresolved"}}return{kind:"unresolved"}}function Gm(e,t,n){e.set(t,{resolved:!0,value:n})}function $i(e,t){e.set(t,{resolved:!1})}function Xc(e,t){let n=e;for(let r of t){if(r.kind==="property"){if(n==null||Array.isArray(n)||typeof n!="object"||!(r.name in n))return{kind:"known-empty"};n=n[r.name];continue}if(!Array.isArray(n)||r.index<0||r.index>=n.length)return{kind:"known-empty"};n=n[r.index]}return{kind:"resolved",value:n}}function Re(e,t,n){if(x.isTSAsExpression(e)||x.isTSSatisfiesExpression(e)||x.isTSNonNullExpression(e)||x.isTypeCastExpression(e)||x.isParenthesizedExpression(e))return Re(e.expression,t,n);if(x.isLogicalExpression(e))return Wr([Re(e.left,t,n),Re(e.right,t,n)]);if(x.isBinaryExpression(e))return Wr([x.isExpression(e.left)?Re(e.left,t,n):null,x.isExpression(e.right)?Re(e.right,t,n):null]);if(x.isConditionalExpression(e))return Wr([Re(e.consequent,t,n),Re(e.alternate,t,n)]);if(x.isTemplateLiteral(e))return Wr(e.expressions.filter(x.isExpression).map(i=>Re(i,t,n)));if(x.isIdentifier(e))return{kind:"identifier",expression:e.name,base:e.name,path:[]};if(!x.isMemberExpression(e)&&!x.isOptionalMemberExpression(e))return null;let r=[],o=e;for(;x.isMemberExpression(o)||x.isOptionalMemberExpression(o);){if(o.computed)if(x.isNumericLiteral(o.property))r.unshift({kind:"index",index:o.property.value});else if(x.isStringLiteral(o.property))r.unshift({kind:"property",name:o.property.value});else if(n&&x.isExpression(o.property)){let i=Ht(o.property,n);if(typeof i=="string")r.unshift({kind:"property",name:i});else if(Number.isInteger(i))r.unshift({kind:"index",index:i});else return null}else return null;else{if(!x.isIdentifier(o.property))return null;r.unshift({kind:"property",name:o.property.name})}o=o.object}return x.isIdentifier(o)?{kind:r.some(i=>i.kind==="index")?"index-expression":"member-expression",expression:Rt(e,t),base:o.name,path:r}:null}function Wr(e){let t=e.filter(r=>r!==null);if(t.length===0)return null;let n=t[0];return t.some(r=>r.base!==n.base||JSON.stringify(r.path)!==JSON.stringify(n.path))?null:{...n}}function Ht(e,t){if(x.isStringLiteral(e)||x.isNumericLiteral(e)||x.isBooleanLiteral(e))return e.value;if(x.isNullLiteral(e))return null;if(x.isTemplateLiteral(e))return e.expressions.length===0&&e.quasis.length===1?e.quasis[0].value.cooked??e.quasis[0].value.raw:void 0;if(x.isIdentifier(e)){let n=Hr(e.name,t.valueScopes);return n.kind==="resolved"?n.value:void 0}if(x.isArrayExpression(e)){let n=[];for(let r of e.elements){if(!r||x.isSpreadElement(r))return;let o=Ht(r,t);if(o===void 0)return;n.push(o)}return n}if(x.isObjectExpression(e)){let n={};for(let r of e.properties){if(!x.isObjectProperty(r)||r.computed||!x.isExpression(r.value))return;let o=null;if(x.isIdentifier(r.key)?o=r.key.name:x.isStringLiteral(r.key)&&(o=r.key.value),!o)return;let i;if(r.shorthand){if(!x.isIdentifier(r.value))return;let s=Hr(r.value.name,t.valueScopes);if(s.kind!=="resolved")return;i=s.value}else i=Ht(r.value,t);if(i===void 0)return;n[o]=i}return n}if(x.isMemberExpression(e)){let n=Re(e,"",t);if(!n)return;let r=Hr(n.base,t.valueScopes);if(r.kind!=="resolved")return;let o=Xc(r.value,n.path);return o.kind==="resolved"?o.value:void 0}if(x.isCallExpression(e))return Wc(e,t)??void 0}function zc(e,t,n){let r=Re(e,n,t);if(!r)return x.isMemberExpression(e)||x.isBinaryExpression(e)||x.isLogicalExpression(e)||x.isConditionalExpression(e)||x.isCallExpression(e)?{value:Rt(e,n),source:null}:null;let o=Hr(r.base,t.valueScopes),i=r.kind==="identifier"?o:o.kind==="resolved"?Xc(o.value,r.path):o;return i.kind==="resolved"&&(typeof i.value=="string"||typeof i.value=="number")?{value:String(i.value),source:r}:i.kind==="resolved"&&(typeof i.value=="boolean"||i.value===null)||i.kind==="known-empty"?null:{value:r.expression,source:r}}function Oi(e,t,n,r,o,i){return{file:e,componentName:t,elements:n,regions:r,ordinalTracker:Wm(),parentStack:[],valueScopes:i,importMap:o}}function Li(e,t,n){for(let r of e)for(let o of r.declarations){for(let s of mt(o.id))$i(n,s);if(!x.isIdentifier(o.id)||!o.init||!x.isExpression(o.init))continue;let i=Ht(o.init,t);i!==void 0&&Gm(n,o.id.name,i)}}function Ym(e){let t=[];for(let n of e){if(x.isVariableDeclaration(n)){t.push(n);continue}x.isExportNamedDeclaration(n)&&n.declaration&&x.isVariableDeclaration(n.declaration)&&t.push(n.declaration)}return t}function Zm(e,t,n){let r=[],o=0;for(let i of e)if(x.isJSXText(i)){let s=i.value.trim();s&&r.push({index:o++,value:s,sourceRange:_e(i),editable:!0,source:null})}else if(x.isJSXExpressionContainer(i)&&x.isStringLiteral(i.expression))r.push({index:o++,value:i.expression.value,sourceRange:_e(i),editable:!0,source:null});else if(x.isJSXExpressionContainer(i)&&x.isTemplateLiteral(i.expression)){let s=i.expression;s.expressions.length===0&&s.quasis.length===1?r.push({index:o++,value:s.quasis[0].value.cooked??s.quasis[0].value.raw,sourceRange:_e(i),editable:!0,source:null}):r.push({index:o++,value:Rt(s,n),sourceRange:_e(i),editable:!0,source:Re(s,n,t)})}else if(x.isJSXExpressionContainer(i)&&x.isExpression(i.expression)){let s=zc(i.expression,t,n);s&&r.push({index:o++,value:s.value,sourceRange:_e(i),editable:!0,source:s.source})}return r}function Qm(e,t,n){let r=[];for(let o of e.attributes)if(!(!x.isJSXAttribute(o)||!x.isJSXIdentifier(o.name))){if(x.isStringLiteral(o.value)){r.push({name:o.name.name,value:o.value.value,sourceRange:_e(o),source:null});continue}if(x.isJSXExpressionContainer(o.value)&&x.isExpression(o.value.expression)){let i=Ht(o.value.expression,t);if(o.name.name==="className"){let a=typeof i=="string"?i:i===void 0?Wc(o.value.expression,t):null;if(a){r.push({name:o.name.name,value:a,sourceRange:_e(o),source:null,resolvedValue:a});continue}}let s=zc(o.value.expression,t,n);if(i!==void 0&&typeof i!="string"&&typeof i!="number"){r.push({name:o.name.name,value:Vc(i),sourceRange:_e(o),source:Re(o.value.expression,n,t),resolvedValue:i});continue}if(!s){i!==void 0&&r.push({name:o.name.name,value:Vc(i),sourceRange:_e(o),source:Re(o.value.expression,n,t),resolvedValue:i});continue}r.push({name:o.name.name,value:s.value,sourceRange:_e(o),source:s.source})}}return r}function Wc(e,t){let n=xn(e,t);return n&&n.map(o=>o.trim()).filter(Boolean).join(" ")||null}function xn(e,t){if(x.isStringLiteral(e))return[e.value];if(x.isTemplateLiteral(e))return e.expressions.length>0?null:[e.quasis.map(n=>n.value.cooked??"").join("")];if(x.isNullLiteral(e))return[];if(x.isBooleanLiteral(e))return e.value?null:[];if(x.isIdentifier(e)||x.isMemberExpression(e)){if(x.isIdentifier(e)&&e.name==="undefined")return[];let n=Ht(e,t);return typeof n=="string"?[n]:null}if(x.isConditionalExpression(e)){let n=xn(e.consequent,t),r=xn(e.alternate,t);return!n||!r?null:[...n,...r]}if(x.isLogicalExpression(e)){if(e.operator!=="&&")return null;let n=Ht(e.left,t);return n===!1||n===null?[]:xn(e.right,t)}if(x.isArrayExpression(e)){let n=[];for(let r of e.elements){if(!r||x.isSpreadElement(r))return null;let o=xn(r,t);if(!o)return null;n.push(...o)}return n}if(x.isObjectExpression(e)){let n=[];for(let r of e.properties){if(!x.isObjectProperty(r))return null;let o=eg(r.key);if(!o)return null;n.push(o)}return n}if(x.isCallExpression(e)){let n=qm(e.callee);if(!n||!["cn","clsx","twMerge"].includes(n))return null;let r=[];for(let o of e.arguments){if(!x.isExpression(o))return null;let i=xn(o,t);if(!i)return null;r.push(...i)}return r}return null}function qm(e){return x.isIdentifier(e)?e.name:x.isMemberExpression(e)&&x.isIdentifier(e.property)?e.property.name:null}function eg(e){return x.isIdentifier(e)?e.name:x.isStringLiteral(e)?e.value:null}function tg(e,t){let n=e.attributes.find(r=>x.isJSXAttribute(r)&&x.isJSXIdentifier(r.name)&&r.name.name===t);return!n||!x.isJSXAttribute(n)||!x.isJSXExpressionContainer(n.value)?null:n.value.expression}function ng(e,t){for(let n of t){let r=tg(e,n);if(r)return r}return null}function rg(e){return x.isJSXIdentifier(e.name)?e.name.name:null}function Vc(e){return e===null?"null":typeof e=="boolean"?e?"true":"false":JSON.stringify(e)}function og(e){if(!x.isCallExpression(e)&&!x.isOptionalCallExpression(e))return null;let t=e.callee;return!x.isMemberExpression(t)&&!x.isOptionalMemberExpression(t)||!x.isIdentifier(t.property)||t.property.name!=="map"||t.computed||!x.isExpression(t.object)?null:{call:e,collection:t.object,callback:e.arguments[0]}}function Di(e){return x.isArrowFunctionExpression(e)||x.isFunctionExpression(e)}function ig(e){return e==="render"||e==="itemRender"||e==="rowRender"||e==="children"}function sg(e){return e==="empty"||e==="emptyRender"||e==="loading"||e==="loadingRender"||e==="error"||e==="errorRender"||e==="fallback"||e==="headerRender"||e==="footerRender"}function Uc(e,t,n,r){if(!e||!x.isExpression(e))return null;let o={kind:"repeat-template",collectionExpression:Rt(e,n),collectionSource:Re(e,n,r)};if(t){let i=t.params[0],s=t.params[1];x.isIdentifier(i)&&(o.itemParamName=i.name),x.isIdentifier(s)&&(o.indexParamName=s.name)}return o}function wt(e,t,n){if(!e)return[];if(x.isJSXElement(e)){if(ji(e))return qr(e.children,t,n);let r=Zr(e,t,n);return r?[r]:[]}return Sn(e)?Qr(e,t,n):x.isParenthesizedExpression(e)?wt(e.expression,t,n):x.isExpression(e)?eo(e,t,n):[]}function Gr(e,t,n){let r=new Map;for(let o of e.params)for(let i of mt(o))$i(r,i);t.valueScopes.push(r);try{if(!x.isBlockStatement(e.body))return wt(e.body,t,n);let o=new Map;t.valueScopes.push(o);try{return Hc(e.body.body,t,n)}finally{t.valueScopes.pop()}}finally{t.valueScopes.pop()}}function Hc(e,t,n){let r=[];for(let o of e){if(x.isVariableDeclaration(o)){let i=t.valueScopes[t.valueScopes.length-1];i&&Li([o],t,i);continue}r.push(...Bi(o,t,n))}return r}function Bi(e,t,n){if(x.isReturnStatement(e))return e.argument?wt(e.argument,t,n):[];if(x.isBlockStatement(e))return Wt(e.body,t,n);if(x.isIfStatement(e)){let r=x.isBlockStatement(e.consequent)?Wt(e.consequent.body,t,n):Bi(e.consequent,t,n),o=e.alternate?x.isBlockStatement(e.alternate)?Wt(e.alternate.body,t,n):Bi(e.alternate,t,n):[];return[...r,...o]}if(x.isSwitchStatement(e))return Wt(e.cases.flatMap(r=>r.consequent),t,n);if(x.isTryStatement(e)){let r=Wt(e.block.body,t,n);return e.handler&&r.push(...Wt(e.handler.body.body,t,n)),e.finalizer&&r.push(...Wt(e.finalizer.body,t,n)),r}return[]}function Wt(e,t,n){let r=new Map;t.valueScopes.push(r);try{return Hc(e,t,n)}finally{t.valueScopes.pop()}}function Yr(e,t,n,r,o,i){o.length!==0&&e.regions.push({kind:t,ownerKey:n,childKeys:o,sourceRange:_e(r),sourceCandidates:i&&i.length>0?i:void 0})}function ag(e,t,n,r){let o=ng(e.openingElement,["items","dataSource","data"]),i={key:t,tag:Kc(e.openingElement)};n.parentStack.push(i);try{for(let s of e.openingElement.attributes){if(!x.isJSXAttribute(s))continue;let a=rg(s);if(!a||!x.isJSXExpressionContainer(s.value))continue;let c=s.value.expression;if(!x.isJSXEmptyExpression(c)){if(ig(a)&&Di(c)){let l=Gr(c,n,r),u=Uc(o,c,r,n);Yr(n,"repeat-region",t,s,l,u?[u]:void 0);continue}if(sg(a)){let l=Di(c)?Gr(c,n,r):wt(c,n,r);Yr(n,"conditional-region",t,s,l)}}}if(o)for(let s of e.children){if(!x.isJSXExpressionContainer(s)||!Di(s.expression))continue;let a=Gr(s.expression,n,r),c=Uc(o,s.expression,r,n);Yr(n,"repeat-region",t,s,a,c?[c]:void 0)}}finally{n.parentStack.pop()}}function Zr(e,t,n){let r=Kc(e.openingElement);if(r==="Fragment"||ji(e))return qr(e.children,t,n),null;let o=t.parentStack[t.parentStack.length-1]??null,i=o?.key??null,s=Jm(r),a;if(s){let w=t.ordinalTracker.getOrdinal(i,r);a=`component:${r}#${w}`}else{let w=t.ordinalTracker.getOrdinal(i,r);a=`${r}#${w}`}let c=o?t.elements.get(o.key)?.identity.structuralPath:void 0,l=c?`${c}/${a}`:a,u=Jn(t.file,t.componentName,l),d={file:t.file,component:t.componentName,structuralPath:l,key:u},p=s?"component-boundary":null,m=Zm(e.children,t,n),g=Qm(e.openingElement,t,n),S,C,v=!1;if(s){let w=t.importMap.get(r)??t.importMap.get(Xm(r));w&&(S=w.specifier,C=w.exportName,v=zn(w.specifier,t.file))}let P={identity:d,tag:r,componentName:t.componentName,sourceFile:t.file,sourceRange:_e(e),parentKey:i,childKeys:[],textSegments:m,attributes:g.length>0?g:void 0,boundaryKind:p,isOpaque:s,...v?{isPublicUiComponent:!0}:{},importedFrom:S,exportName:C};return t.elements.set(u,P),i&&t.elements.has(i)&&t.elements.get(i).childKeys.push(u),ag(e,u,t,n),(!s||e.children.length>0)&&(t.parentStack.push({key:u,tag:r}),cg(e.children,t,n),t.parentStack.pop()),u}function Qr(e,t,n){return qr(e.children,t,n)}function qr(e,t,n){let r=[];for(let o of e)if(x.isJSXElement(o))if(ji(o))r.push(...qr(o.children,t,n));else{let i=Zr(o,t,n);i&&r.push(i)}else Sn(o)?r.push(...Qr(o,t,n)):x.isJSXExpressionContainer(o)&&r.push(...eo(o.expression,t,n));return r}function cg(e,t,n){for(let r of e)x.isJSXElement(r)?Zr(r,t,n):Sn(r)?Qr(r,t,n):x.isJSXExpressionContainer(r)&&eo(r.expression,t,n)}function lg(e){return e==="&&"||e==="||"||e==="??"}function eo(e,t,n){if(x.isJSXEmptyExpression(e))return[];let r=og(e);if(r){let o=r.call,i=t.parentStack[t.parentStack.length-1]??null,s=[],a=r.callback,c={kind:"repeat-template",collectionExpression:Rt(r.collection,n),collectionSource:Re(r.collection,n,t)};if(x.isArrowFunctionExpression(a)||x.isFunctionExpression(a)){let u=a.params[0],d=a.params[1];x.isIdentifier(u)&&(c.itemParamName=u.name),x.isIdentifier(d)&&(c.indexParamName=d.name)}s.push(c);let l={kind:"repeat-region",ownerKey:i?.key??"",childKeys:[],sourceRange:_e(o),sourceCandidates:s.length>0?s:void 0};return t.regions.push(l),(x.isArrowFunctionExpression(a)||x.isFunctionExpression(a))&&l.childKeys.push(...Gr(a,t,n)),l.childKeys}if(x.isConditionalExpression(e)){let o=t.parentStack[t.parentStack.length-1]??null,i={kind:"conditional-branch",conditionExpression:Rt(e.test,n),conditionSource:Re(e.test,n,t)},s={kind:"conditional-region",ownerKey:o?.key??"",childKeys:[],sourceRange:_e(e),sourceCandidates:[i]};return t.regions.push(s),s.childKeys.push(...wt(e.consequent,t,n)),s.childKeys.push(...wt(e.alternate,t,n)),s.childKeys}if(x.isLogicalExpression(e)&&lg(e.operator)){let o=t.parentStack[t.parentStack.length-1]??null,i={kind:"conditional-branch",conditionExpression:Rt(e.left,n),conditionSource:Re(e.left,n,t)},s={kind:"conditional-region",ownerKey:o?.key??"",childKeys:[],sourceRange:_e(e),sourceCandidates:[i]};return t.regions.push(s),s.childKeys.push(...wt(e.right,t,n)),s.childKeys}if(x.isParenthesizedExpression(e))return eo(e.expression,t,n);if(x.isJSXElement(e)){let o=Zr(e,t,n);return o?[o]:[]}return Sn(e)?Qr(e,t,n):[]}function ug(e){let t=e.argument;return t&&(x.isExpression(t)||Sn(t))?t:null}function Wn(e,t){let n=[];for(let r of e){if(x.isReturnStatement(r)){let o=ug(r);o&&n.push({argument:o,statement:r,condition:t});continue}if(x.isIfStatement(r)){let o=x.isBlockStatement(r.consequent)?r.consequent.body:[r.consequent];if(n.push(...Wn(o,r.test)),r.alternate){let i=x.isBlockStatement(r.alternate)?r.alternate.body:[r.alternate];n.push(...Wn(i,r.test))}continue}if(x.isSwitchStatement(r))for(let o of r.cases){let i=o.test?x.binaryExpression("===",r.discriminant,o.test):r.discriminant;n.push(...Wn(o.consequent,i))}}return n}function Gc(e){let{file:t,source:n,ast:r}=e,o=e.imports.map(d=>d.specifier),i=new Map,s=[],a=[],c=new Map,l=Hm(r);Km(r,{"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression"(d){let p=zm(d);if(!p)return;let m=d.node,g=[];if(x.isArrowFunctionExpression(m))x.isExpression(m.body)||Sn(m.body)?g=[{argument:m.body,statement:x.returnStatement(x.isExpression(m.body)?m.body:null)}]:x.isBlockStatement(m.body)&&(g=Wn(m.body.body));else{let B=m.body;x.isBlockStatement(B)&&(g=Wn(B.body))}if(g.length===0){d.skip();return}let S=new Map;Li(Ym(r.program.body),Oi(t,p,i,s,l,[S]),S);let C=new Map;for(let B of m.params)for(let re of mt(B))$i(C,re);let v=x.isBlockStatement(m.body)?m.body.body:[],P=g[0]?.statement??null;for(let B of v){if(P&&B===P)break;x.isVariableDeclaration(B)&&Li([B],Oi(t,p,i,s,l,[S,C]),C)}let w=Oi(t,p,i,s,l,[S,C]);for(let B of g){let re=wt(B.argument,w,n);for(let ee of re)a.includes(ee)||a.push(ee);if(B.condition){let ee={kind:"conditional-branch",conditionExpression:Rt(B.condition,n),conditionSource:Re(B.condition,n,w)};Yr(w,"conditional-region","",B.statement,re,[ee])}}d.skip()}});let u=[...i.keys()];return u.length>0&&c.set(t,u),{graph:{routeId:t,rootKeys:a,elements:i,regions:s,fileIndex:c,version:1,diagnostics:[]},localImports:o}}function Vi(e,t,n,r){return[...e.map(o=>({...o})),{fromFile:t,specifier:n,targetPath:r}]}function to(e,t,n){return{...e,details:{...e.details??{},entryFile:t,importStack:n.map(r=>({...r}))}}}async function Yc(e,t,n,r,o={}){let i=o.maxDepth??10,s=o.version??1,a=o.parseModule??Xn,c=new Map,l=new Map,u=new Map,d=[],p=new Set,m=v=>{let P=`${v.path}\0${v.code}\0${v.message}\0${JSON.stringify(v.details??{})}`;p.has(P)||(p.add(P),d.push(v))},g=[{file:e,source:t,depth:0,diagnosticEntryFile:e,importStack:[]},...(o.additionalEntries??[]).map(v=>({file:v.file,source:v.source,depth:0,diagnosticEntryFile:v.file,importStack:[]}))],S=new Set;for(;g.length>0;){let v=g.shift(),{file:P,source:w,depth:B,diagnosticEntryFile:re,importStack:ee}=v;if(S.has(P))continue;S.add(P),c.set(P,w);let N=a(P,w);if(!N.ok){m(to(N.diagnostic,re,ee));continue}u.set(P,N.module);let{graph:J,localImports:F}=Gc(N.module);for(let L of J.elements.values())if(L.importedFrom&&ct(L.importedFrom)){let G=L.importedFrom,q=await Xr(P,G,r);q.ok?(L.importedFrom=q.path,zt(q.path)&&(L.isPublicUiComponent=!0)):zn(G,P)||m(to(q.diagnostic,re,Vi(ee,P,G,q.diagnostic.path)))}if(l.set(P,J),!(B>=i))for(let L of F){if(jc(L))continue;let G=await Xr(P,L,r);if(!G.ok){zn(L,P)||m(to(G.diagnostic,re,Vi(ee,P,L,G.diagnostic.path)));continue}let q=G.path;if(S.has(q)||zt(q))continue;let ye=Vi(ee,P,L,q);try{let W=await n(q);g.push({file:q,source:W,depth:B+1,diagnosticEntryFile:re,importStack:ye})}catch(W){m(to({path:q,code:"import-read-failed",message:`Failed to read imported file: ${q}`,details:{fromFile:P,specifier:L,reason:W instanceof Error?W.message:String(W)}},re,ye))}}}let C=dg(e,l,s,(o.additionalEntries??[]).map(v=>v.file));return C.diagnostics=d,{graph:C,allSources:c,diagnostics:d,parsedModules:u,entryModule:u.get(e)??null}}function dg(e,t,n,r=[]){let o=new Map,i=[],s=new Map,a=[];for(let[c,l]of t){for(let[u,d]of l.elements)o.set(u,d);for(let u of l.regions)i.push(u);for(let[u,d]of l.fileIndex){let p=s.get(u)??[];s.set(u,[...p,...d])}if(c===e){a=l.rootKeys;continue}r.includes(c)&&(a=[...a,...l.rootKeys])}return{routeId:e,rootKeys:a,elements:o,regions:i,fileIndex:s,version:n}}function Zc(e){let t=new Map;for(let[n,r]of e.elements){let o=/^[A-Z]/.test(r.tag),i={file:r.sourceFile,componentName:r.componentName,isProxy:o},s=r.boundaryKind,a=[];r.isOpaque&&a.push({kind:"opaque-region",reason:`Component '${r.tag}' is opaque: internal structure not editable`}),o&&!r.isOpaque&&a.push({kind:"component-boundary",reason:`Component '${r.tag}' boundary: editing requires source file access`});let c={key:n,writeTarget:i,boundaryKind:s,parentKey:r.parentKey,childKeys:[...r.childKeys],constraints:a};t.set(n,c)}for(let n of e.regions){let r=n.kind==="repeat-region"?"repeat-region":n.kind==="conditional-region"?"conditional-region":n.kind==="opaque-region"?"opaque-region":"component-boundary",o=n.kind==="repeat-region"?"Node is inside a repeat region: operations affect the template, not individual instances":n.kind==="conditional-region"?"Node is inside a conditional region: visibility depends on runtime condition":`Node is inside a ${n.kind}`;for(let i of n.childKeys){let s=t.get(i);s&&s.constraints.push({kind:r,reason:o}),Qc(i,r,o,t,e)}}return{nodes:t,rootKeys:[...e.rootKeys]}}function Qc(e,t,n,r,o){let i=o.elements.get(e);if(i)for(let s of i.childKeys){let a=r.get(s);a&&!a.constraints.some(c=>c.kind===t)&&(a.constraints.push({kind:t,reason:n}),Qc(s,t,n,r,o))}}import{isSiteEditRuntimeContainerTag as fg,isSiteEditRuntimeVoidElementTag as pg}from"@vcp-dev/contracts/site-edit-runtime-capability";function bn(e){if(!e.composition)throw new Error("Composition unavailable for render source graph.");return e.composition}function mg(e,t,n){let r=bn(n),o=t.nodes.get(e),i=n.elements.get(e);if(!o||!i)return{composition:r,key:e,canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1,constraints:[{kind:"opaque-region",message:"Node not found in graph"}]};let s=o.constraints.map(B=>({kind:B.kind,message:B.reason})),a=i.isOpaque,l=o.parentKey===null&&i.componentName==="Page",u=i.tag.toLowerCase(),d=i.tag!==u,p=!d&&pg(u),m=d||fg(u),g=d&&i.childKeys.length>0&&!i.isPublicUiComponent,S=i.textSegments.length>0&&i.textSegments.some(B=>B.editable);p&&!s.some(B=>B.kind==="void-element")&&s.push({kind:"void-element",message:`Element '${i.tag}' is void: children cannot be inserted`}),!p&&!m&&!s.some(B=>B.kind==="void-element")&&s.push({kind:"void-element",message:`Element '${i.tag}' cannot contain structured children`});let C=S&&!a,v=!i.isPublicUiComponent&&!p&&m&&(!a||g);return{composition:r,key:e,canUpdateText:C,canInsertChild:v,canMove:!l,canRemove:!l,constraints:s}}function qc(e,t){let n=new Map;for(let r of e.nodes.keys())n.set(r,mg(r,e,t));return n}import{createHash as ps}from"node:crypto";import as from"@babel/traverse";function Ui(e){let t=new Map,n=new Map;for(let s of e){if(t.has(s.placementKey))throw new Error(`Duplicate placement key in page composition projection: ${s.placementKey}`);t.set(s.placementKey,s);let a=n.get(s.placementUnitKey)??[];a.push(s),n.set(s.placementUnitKey,a)}let r=new Map,o=new Map,i=new Map;for(let[s,a]of n){let c=Object.freeze([...a]),l=c.find(u=>u.anchorSourceRange!==null&&u.members.length>0)??c.find(u=>u.members.length>0)??c[0];l&&(o.set(s,c),i.set(s,l),r.set(s,Object.freeze({placementUnitKey:s,placementKeys:Object.freeze(c.map(u=>u.placementKey)),sourcePlacementKey:l.placementKey})))}return{placementByKey:t,unitByKey:r,placementsByUnitKey:o,sourcePlacementByUnitKey:i}}import{createHash as $h}from"node:crypto";import _l from"node:path";import*as xo from"@babel/parser";import ns from"@babel/generator";import rs from"@babel/traverse";import*as At from"@babel/types";import Ki from"@babel/traverse";var Nt=typeof Ki=="function"?Ki:Ki.default,no=new WeakMap,el=new WeakMap;function ht(e,t){let n=Ni(e,t);if(!n.ok)return wi(e,n.diagnostic.code,n.diagnostic.message,t.kind);let r=oe(n.ast,t);return r.ok?{ok:!0,match:{locatorKind:r.match.locatorKind,node:r.match.node,start:r.match.start,end:r.match.end}}:wi(e,r.diagnostic.code,r.diagnostic.message,t.kind,r.diagnostic.details)}function oe(e,t){return t.kind==="jsx-node"?ol(e,t):t.kind==="jsx-attribute"?bg(e,t):t.kind==="value"?Eg(e,t):t.kind==="expression"?Ig(e,t):t.kind==="directive"?vg(e,t):t.kind==="export"?kg(e,t):{ok:!1,diagnostic:Jt("unsupported-syntax",`Unsupported locator kind: ${t.kind}`)}}function ol(e,t){return t.strategy==="source-range"?gg(e,t):hg(e,t)}function gg(e,t){let n=null;if(Nt(e,{JSXElement(o){if(!In(o.node,t.sourceRange))return;let i=Ie("jsx-node",o);if(i){if(!n){n=i;return}i.end-i.start<n.end-n.start&&(n=i)}},JSXFragment(o){if(!In(o.node,t.sourceRange))return;let i=Ie("jsx-node",o);i&&(!n||i.end-i.start<n.end-n.start)&&(n=i)},JSXExpressionContainer(o){if(!In(o.node,t.sourceRange))return;let i=Ie("jsx-node",o);i&&(!n||i.end-i.start<n.end-n.start)&&(n=i)}}),!n)return ve("jsx-node","locator-miss","JSX node not found for source-range locator");let r=n;return t.expectedIdentity&&!Og(r.path,t.expectedIdentity)?ve("jsx-node","locator-miss","JSX node failed expected identity validation"):{ok:!0,match:r}}function hg(e,t){if(t.structuralPath===""){let r=xg(e,t.component);if(r){let o=Sg(r);if(o)return o}}let n=null;return Nt(e,{JSXElement(r){if(Gn(r)!==t.component||Xi(r)!==t.structuralPath)return;let i=Ie("jsx-node",r);i&&(n=i,r.stop())},JSXFragment(r){if(Gn(r)!==t.component||Xi(r)!==t.structuralPath)return;let i=Ie("jsx-node",r);i&&(n=i,r.stop())}}),!n&&t.expectedRange&&(n=yg(e,t.component,t.expectedRange)),n?{ok:!0,match:n}:ve("jsx-node","locator-miss","JSX node not found for structural-path locator")}function yg(e,t,n){let r=null;return Nt(e,{JSXElement(o){if(Gn(o)!==t||!In(o.node,n))return;let i=Ie("jsx-node",o);i&&(r=i,o.stop())},JSXFragment(o){if(Gn(o)!==t||!In(o.node,n))return;let i=Ie("jsx-node",o);i&&(r=i,o.stop())}}),r}function xg(e,t){let n=null;return Nt(e,{FunctionDeclaration(r){r.node.id?.name===t&&(n=r,r.stop())},VariableDeclarator(r){if(r.node.id.type==="Identifier"&&r.node.id.name===t){let o=r.get("init");(o.isArrowFunctionExpression()||o.isFunctionExpression())&&(n=o),r.stop()}}}),n}function Sg(e){if(e.isArrowFunctionExpression()){let t=e.get("body");if(t.isBlockStatement()){let r=t.get("body").find(o=>o.isReturnStatement());if(r){let o=r.get("argument");if((o.isParenthesizedExpression()?o.get("expression"):o).isJSXFragment())return ve("jsx-node","unsupported-syntax","JSXFragment is not a supported edit target")}return null}return(t.isParenthesizedExpression()?t.get("expression"):t).isJSXFragment()?ve("jsx-node","unsupported-syntax","JSXFragment is not a supported edit target"):null}if(e.isFunctionDeclaration()||e.isFunctionExpression()){let t=e.get("body");if(t.isBlockStatement()){let n=t.get("body").find(r=>r.isReturnStatement());if(n){let r=n.get("argument");if((r.isParenthesizedExpression()?r.get("expression"):r).isJSXFragment())return ve("jsx-node","unsupported-syntax","JSXFragment is not a supported edit target")}}}return null}function bg(e,t){let n=ol(e,t.element);if(!n.ok)return n;let s=n.match.path.get("openingElement").get("attributes").find(c=>Dg(c,t.name));if(!s||!s.isJSXAttribute())return ve("jsx-attribute","locator-miss",`JSX attribute '${t.name}' not found`);let a=Ie("jsx-attribute",s);return a?{ok:!0,match:a}:ve("jsx-attribute","locator-miss",`JSX attribute '${t.name}' has no source range`)}function Eg(e,t){let n=Cg(e,t);if(!n.ok)return n;let r=Rg(n.match.path,t.path??[]);return r.ok?t.expectedRange&&!gt(r.match.path.node.loc,t.expectedRange)?ve("value","locator-miss","Resolved value does not match expected range"):{ok:!0,match:r.match}:r}function Ig(e,t){let n=null;return Nt(e,{Identifier(r){if(!Tg(r))return;let o=nl(r);if(!o||!rl(o,t))return;let i=Ie("expression",r);i&&(t.expectedRange&&!gt(r.node.loc,t.expectedRange)||(n=i,r.stop()))},MemberExpression(r){let o=nl(r);if(!o||!rl(o,t))return;let i=Ie("expression",r);i&&(t.expectedRange&&!gt(r.node.loc,t.expectedRange)||(n=i,r.stop()))}}),n?{ok:!0,match:n}:ve("expression","locator-miss","Expression not found")}function vg(e,t){let n=null;return Nt(e,{Program(r){let i=r.get("directives").find(a=>a.node.value.value===t.value);if(!i||t.expectedRange&&!gt(i.node.loc,t.expectedRange))return;let s=Ie("directive",i);s&&(n=s,r.stop())}}),n?{ok:!0,match:n}:ve("directive","locator-miss",`Directive '${t.value}' not found`)}function kg(e,t){let n=null;return Nt(e,{ExportNamedDeclaration(r){if(t.exportKind==="generate-metadata"){let c=r.get("declaration");if(c.isFunctionDeclaration()&&c.node.id?.name==="generateMetadata"){let p=Ie("export",c);if(!p||t.expectedRange&&!gt(c.node.loc,t.expectedRange))return;n=p,r.stop();return}if(!c.isVariableDeclaration())return;let l=zi(c,"generateMetadata");if(!l||!l.isVariableDeclarator())return;let u=l.get("init");if(!u.node)return;let d=Ie("export",u);if(!d||t.expectedRange&&!gt(u.node.loc,t.expectedRange))return;n=d,r.stop();return}let o=r.get("declaration");if(!o.isVariableDeclaration())return;let i=zi(o,t.exportKind==="named"?t.name:"metadata");if(!i||!i.isVariableDeclarator())return;let s=i.get("init");if(!s.node||t.expectedRange&&!gt(s.node.loc,t.expectedRange))return;let a=Ie("export",s);a&&(n=a,r.stop())},ExportDefaultDeclaration(r){if(t.exportKind!=="default")return;let o=r.get("declaration"),i=Ie("export",o);i&&(t.expectedRange&&!gt(o.node.loc,t.expectedRange)||(n=i,r.stop()))}}),n?{ok:!0,match:n}:ve("export","export-not-found",`Export '${Mg(t)}' not found`)}function Cg(e,t){let n=null;return Nt(e,{Expression(r){if(n||t.root.kind!=="expression"||!In(r.node,t.root.sourceRange))return;let o=Ie("value",r);o&&(n=o,r.stop())},VariableDeclarator(r){if(n)return;if(t.root.kind==="binding"){if(r.node.id.type!=="Identifier"||r.node.id.name!==t.root.name)return;let m=r.get("init");if(!m.node)return;let g=Ie("value",m);if(!g)return;n=g,r.stop();return}if(t.root.kind!=="hook-state")return;let o=t.root,i=r.get("id"),s=r.get("init");if(!i.isArrayPattern()||!s.isCallExpression()||i.node.elements.findIndex(m=>m?.type==="Identifier"&&m.name===o.name)!==0)return;let c=s.node.callee;if((c.type==="Identifier"?c.name:c.type==="MemberExpression"&&c.property.type==="Identifier"?c.property.name:null)!==o.hook)return;let u=o.hook==="useReducer"?1:0,d=r.get(`init.arguments.${u}`);if(!d||Array.isArray(d)||!d.node)return;let p=Ie("value",d);p&&(n=p,r.stop())},ExportNamedDeclaration(r){if(n||t.root.kind!=="named-export")return;let o=r.get("declaration");if(!o.isVariableDeclaration())return;let i=zi(o,t.root.name);if(!i||!i.isVariableDeclarator())return;let s=i.get("init");if(!s.node)return;let a=Ie("value",s);a&&(n=a,r.stop())},ExportDefaultDeclaration(r){if(n||t.root.kind!=="default-export")return;let o=r.get("declaration"),i=Ie("value",o);i&&(n=i,r.stop())}}),n?{ok:!0,match:n}:ve("value",t.root.kind==="named-export"||t.root.kind==="default-export"?"export-not-found":t.root.kind==="expression"?"locator-miss":"binding-not-found","Value root was not found")}function Rg(e,t){let n=Ji(e);for(let o of t){if(n=Ji(n),o.kind==="property"){if(!n.isObjectExpression())return ve("value","unsupported-syntax","Property path requires object expression");let a=n.get("properties");if(a.some(l=>!l.isObjectProperty()))return ve("value","unsupported-syntax","Spread properties are not supported");let c=a.find(l=>Lg(l,o.name));if(!c||!c.isObjectProperty())return ve("value","property-not-found",`Property '${o.name}' not found`);n=c.get("value");continue}if(!n.isArrayExpression())return ve("value","unsupported-syntax","Array index path requires array expression");let i=n.get("elements");if(i.some(a=>a.node?.type==="SpreadElement"))return ve("value","unsupported-syntax","Spread array elements are not supported");let s=i[o.index];if(!s?.node)return ve("value","array-index-out-of-range",`Array index ${o.index} is out of range`);n=s}n=Ji(n);let r=Ie("value",n);return r?{ok:!0,match:r}:ve("value","locator-miss","Resolved value has no source range")}function Ji(e){let t=e;for(;t.isTSAsExpression()||t.isTSSatisfiesExpression()||t.isTSNonNullExpression();)t=t.get("expression");return t}function Ie(e,t){let n=t.node;return n.start==null||n.end==null?null:{locatorKind:e,node:n,start:n.start,end:n.end,path:t}}function In(e,t){return gt(e.loc,t)}function gt(e,t){return e?e.start.line===t.startLine&&e.start.column===t.startColumn&&e.end.line===t.endLine&&e.end.column===t.endColumn:!1}function Xi(e){let t=[],n=e,r=e.node;for(;n;){if(n.isJSXElement()){if(!ro(n.node)){let o=il(n.node.openingElement);o&&(/^[A-Z]/.test(o)?t.unshift(`component:${o}#${tl(n,o)}`):t.unshift(`${o}#${tl(n,o)}`))}}else n.isJSXFragment()&&n.node===r&&t.unshift("fragment");if(!n.parentPath||Ag(n.parentPath))break;n=n.parentPath}return t.join("/")}function ro(e){let t=e.openingElement.name;return t.type==="JSXIdentifier"?t.name==="Fragment":t.type==="JSXMemberExpression"&&t.property.name==="Fragment"}function tl(e,t){let n=wg(e);if(!n)return 0;let r=no.get(n.node)?.get(t)?.get(e.node);if(r!==void 0)return r;let o=0,i=no.get(n.node)?.get(t);if(!i){let s=no.get(n.node);s||(s=new Map,no.set(n.node,s)),i=new WeakMap,s.set(t,i)}for(let s of Hn(n))if(il(s.node.openingElement)===t){if(i.set(s.node,o),s.node===e.node)return o;o++}return i.get(e.node)??0}function wg(e){let t=e.parentPath,n=null;for(;t;){if(t.isJSXFragment()){n=t,t=t.parentPath;continue}if(t.isJSXElement()){if(ro(t.node)){t=t.parentPath;continue}return t}t=t.parentPath}return n}function Hn(e){let t=el.get(e.node);if(t)return t;let n=[],r=e.get("children");for(let o of r)if(!Array.isArray(o)){if(o.isJSXElement()){if(ro(o.node)){n.push(...Hn(o));continue}n.push(o);continue}if(o.isJSXFragment()){n.push(...Hn(o));continue}o.isJSXExpressionContainer()&&n.push(...En(o.get("expression")))}return el.set(e.node,n),n}function En(e){return e.isJSXElement()?ro(e.node)?Hn(e):[e]:e.isJSXFragment()?Hn(e):e.isParenthesizedExpression()?En(e.get("expression")):e.isLogicalExpression()&&Ng(e.node.operator)?En(e.get("right")):e.isConditionalExpression()?[...En(e.get("consequent")),...En(e.get("alternate"))]:e.isArrayExpression()?e.get("elements").flatMap(t=>Array.isArray(t)||!t.node||!t.isExpression()?[]:En(t)):[]}function Ng(e){return e==="&&"||e==="||"||e==="??"}function il(e){return e.name.type==="JSXIdentifier"?e.name.name:e.name.type==="JSXMemberExpression"?Pg(e.name):null}function Pg(e){let t=[],n=e;for(;n.type==="JSXMemberExpression";)t.unshift(n.property.name),n=n.object;return t.unshift(n.name),t.join(".")}function Gn(e){let t=e;for(;t;){if(t.isFunctionDeclaration())return t.node.id?.name??null;if((t.isArrowFunctionExpression()||t.isFunctionExpression())&&t.parentPath?.isVariableDeclarator()){let n=t.parentPath.node.id;return n.type==="Identifier"?n.name:null}t=t.parentPath}return null}function Ag(e){return!!(e.isFunctionDeclaration()||e.isFunctionExpression()||e.isArrowFunctionExpression())}function Tg(e){return!(!e.isExpression()||e.parentPath?.isMemberExpression({property:e.node}))}function nl(e){if(e.isIdentifier())return{base:e.node.name,path:[]};if(!e.isMemberExpression())return null;let t=[],n=e.node;for(;n.type==="MemberExpression";){if(n.computed)if(n.property.type==="NumericLiteral")t.unshift({kind:"index",index:n.property.value});else if(n.property.type==="StringLiteral")t.unshift({kind:"property",name:n.property.value});else return null;else if(n.property.type==="Identifier")t.unshift({kind:"property",name:n.property.name});else return null;if(n.object.type==="Identifier")return{base:n.object.name,path:t};if(n.object.type!=="MemberExpression")return null;n=n.object}return null}function rl(e,t){return e.base===t.base&&_g(e.path,t.path??[])}function _g(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],o=t[n];if(r.kind!==o.kind)return!1;if(r.kind==="property"){if(o.kind!=="property"||r.name!==o.name)return!1;continue}if(o.kind!=="index"||r.index!==o.index)return!1}return!0}function Fg(e){return e.key.type==="Identifier"?e.key.name:e.key.type==="StringLiteral"?e.key.value:null}function Mg(e){return e.exportKind==="named"?e.name:e.exportKind}function ve(e,t,n,r){return{ok:!1,diagnostic:Jt(t,n,e,r)}}function Og(e,t){return Gn(e)!==t.component?!1:Xi(e)===t.structuralPath}function Dg(e,t){return!e.isJSXAttribute()||e.node.name.type!=="JSXIdentifier"?!1:e.node.name.name===t}function zi(e,t){return e.get("declarations").find(n=>!n.isVariableDeclarator()||n.node.id.type!=="Identifier"?!1:n.node.id.name===t)}function Lg(e,t){return e.isObjectProperty()?Fg(e.node)===t:!1}import Wi from"@babel/generator";var Bg=typeof Wi=="function"?Wi:Wi.default;function jg(e){let t=e.split(`
2
- `),n=[],r=!1;for(let s of t){let a=s.match(/^(\s+)/);if(a){let c=a[1];c.includes(" ")?r=!0:c.length>0&&n.push(c.length)}}if(r&&t.every(a=>{let c=a.match(/^(\s+)/);return!c||c[1].includes(" ")}))return"tab";if(n.length===0)return"2";function o(s,a){return a===0?s:o(a,s%a)}let i=n[0];for(let s=1;s<n.length;s++)i=o(i,n[s]);return i>=4?"4":"2"}function $g(e,t){let n=e.match(/^(\s+)(.*)/s);if(!n)return e;let r=n[1],o=n[2];if(r.length===0)return e;let i=r.includes(" ")?r.split(" ").length-1:Math.max(1,Math.round(r.length/2)),s=Math.min(Math.max(i,0),20);return t==="tab"?" ".repeat(s)+o:t==="4"?" ".repeat(s)+o:" ".repeat(s)+o}function Vg(e,t){return e.split(`
3
- `).map(r=>$g(r,t)).join(`
4
- `)}function oo(e){let{ast:t,source:n}=e;try{let r=jg(n),i=Bg(t,{comments:!0,jsescOption:{minimal:!0,quotes:"single"}},n).code;return r!=="2"&&(i=Vg(i,r)),{ok:!0,source:i}}catch(r){return V(n,"printer-failed",`AST print failed: ${r instanceof Error?r.message:String(r)}`)}}import*as al from"@babel/parser";import{arrayExpression as Ug,booleanLiteral as Kg,identifier as Jg,jsxAttribute as Xg,jsxExpressionContainer as zg,jsxIdentifier as Wg,nullLiteral as Hg,numericLiteral as Gg,objectExpression as Yg,objectProperty as Zg,stringLiteral as cl}from"@babel/types";function sl(e){let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t=(t<<5)-t+r,t|=0}return`0x${Math.abs(t).toString(16)}`}function Yn(e,t,n){return{ok:!0,source:t,operation:{type:n.kind,nodeId:n.target,kind:n.kind,target:n.target,beforeSourceHash:sl(e),afterSourceHash:sl(t),inverse:n.inverse}}}function de(e,t,n){let r=oo({ast:e,source:t});return r.ok?Yn(t,r.source,n):r}function ke(e,t){let n=Pi(e,t);return n.ok?{ok:!0,ast:n.ast}:{ok:!1,result:{ok:!1,source:e,diagnostic:n.diagnostic}}}function io(e,t){return oo({ast:e,source:t})}function Qg(e,t,n){let r=oe(e,t);return r.ok?{ok:!0,match:r.match}:{ok:!1,result:{ok:!1,source:n,diagnostic:r.diagnostic}}}function ll(e,t,n){let r=Qg(e,t,n);return r.ok?r.match.path.isJSXElement()?r:{ok:!1,result:V(n,"unsupported-syntax","JSX locator must resolve to JSXElement","jsx-node")}:r}function ul(e,t){let n=oe(e,t);return n.ok?{ok:!0,match:n.match}:n.diagnostic.code==="locator-miss"?{ok:!0,match:null}:{ok:!1,diagnostic:n.diagnostic}}function vn(e){return typeof e=="string"?cl(e):typeof e=="number"?Gg(e):typeof e=="boolean"?Kg(e):e===null?Hg():Array.isArray(e)?Ug(e.map(t=>vn(t))):Yg(Object.entries(e).map(([t,n])=>Zg(Jg(t),vn(n))))}function qg(e){return typeof e=="string"?cl(e):zg(vn(e))}function so(e,t){return Xg(Wg(e),qg(t))}function dl(e,t){try{let r=al.parse(`const __VD_NODE__ = (${t});`,{sourceType:"module",plugins:["jsx","typescript"]}).program.body[0];return r?.type!=="VariableDeclaration"||r.declarations[0]?.type!=="VariableDeclarator"||!r.declarations[0].init||r.declarations[0].init.type!=="JSXElement"&&r.declarations[0].init.type!=="JSXFragment"?{ok:!1,result:V(e,"unsupported-syntax","Provided JSX source does not resolve to a JSX node","jsx-node")}:{ok:!0,node:r.declarations[0].init}}catch(n){return{ok:!1,result:V(e,"parse-failed",`AST parse failed: ${n instanceof Error?n.message:String(n)}`,"jsx-node")}}}function ao(e){let{source:t,locator:n,segmentIndex:r,newText:o}=e,i=ke(t,"jsx-node");if(!i.ok)return i.result;let s=oe(i.ast,n);if(!s.ok)return{ok:!1,source:t,diagnostic:s.diagnostic};let c=eh(s.match.path)[r];if(!c)return V(t,"locator-miss",`Text segment ${r} not found`,"jsx-node");switch(c.kind){case"jsx-text":c.path.node.value=th(c.path.node.value,o);break;case"string-literal":c.path.node.value=o;break;case"template-literal":{let l=c.quasiIndex;c.path.node.quasis[l].value.raw=o,c.path.node.quasis[l].value.cooked=o;break}}return de(i.ast,t,{kind:"update-text",target:"jsx-node",inverse:"restore-text"})}function eh(e){let t=[],n=e.isJSXElement()||e.isJSXFragment()?e.get("children"):[];for(let r of n){if(r.isJSXText()){r.node.value.trim().length>0&&t.push({kind:"jsx-text",path:r});continue}if(r.isJSXExpressionContainer()){let o=nh(r.get("expression"));o.length>0&&t.push(...o)}}return t}function th(e,t){let n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"";return`${n}${t.trim()}${r}`}function nh(e){if(e.isStringLiteral())return[{kind:"string-literal",path:e}];if(e.isTemplateLiteral()){let t=[],n=e.node.quasis;for(let r=0;r<n.length;r++)n[r].value.raw.trim().length>0&&t.push({kind:"template-literal",path:e,quasiIndex:r});if(t.length>0)return t}return e.isCallExpression()?[]:[]}import{nullLiteral as Hi}from"@babel/types";function kn(e){let{source:t,locator:n}=e,r=ke(t,"jsx-node");if(!r.ok)return r.result;let o=oe(r.ast,n);return o.ok?(rh(o.match.path),de(r.ast,t,{kind:"remove-node",target:"jsx-node",inverse:"insert-child"})):{ok:!1,source:t,diagnostic:o.diagnostic}}function rh(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(Hi());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(Hi());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(Hi());return}e.remove()}import{cloneNode as mh}from"@babel/types";import Gi from"@babel/traverse";import*as U from"@babel/types";var oh=typeof Gi=="function"?Gi:Gi.default;function Xe(e,t,n,r){if(!e.ok)return e;let o=Je(n);if(!o)return e;let i=ih(t,o,r);return i?{...e,selectionRef:i}:e}function ih(e,t,n){let r=sh(e,t);if(!r)return;let o=n.sourceLocator?fl(n.sourceLocator):void 0,i=n.targetParentLocator?fl(n.targetParentLocator):void 0,s=n.file??i?.file??o?.file,a=n.component??ch(r)??i?.component??o?.component;if(!(!s||!a))return{key:Jn(s,a,lh(r))}}function fl(e){return e.strategy==="structural-path"?{file:e.file,component:e.component,structuralPath:e.structuralPath}:e.expectedIdentity}function sh(e,t){let n=null;return oh(e,{JSXElement(r){r.node===t&&(n=r,r.stop())}}),n}function Je(e){if(!e)return null;if(U.isJSXElement(e))return Cn(e)?pl(e.children):e;if(U.isJSXFragment(e))return pl(e.children);if(U.isJSXExpressionContainer(e)||U.isParenthesizedExpression(e)||U.isTSAsExpression(e)||U.isTSSatisfiesExpression(e)||U.isTSTypeAssertion(e)||U.isTSNonNullExpression(e))return Je(e.expression);if(U.isLogicalExpression(e))return Je(e.right);if(U.isConditionalExpression(e))return Je(e.consequent)??Je(e.alternate);if(U.isCallExpression(e)||U.isOptionalCallExpression(e))return xl(e)?ah(e.arguments[0]):null;if(U.isArrayExpression(e))for(let t of e.elements){if(!t)continue;let n=Je(t);if(n)return n}return null}function pl(e){for(let t of e){let n=Je(t);if(n)return n}return null}function ah(e){return!e||!U.isArrowFunctionExpression(e)&&!U.isFunctionExpression(e)?null:U.isBlockStatement(e.body)?Zn(e.body.body):Je(e.body)}function Zn(e){for(let t of e){if(U.isReturnStatement(t)){let n=Je(t.argument);if(n)return n;continue}if(U.isBlockStatement(t)){let n=Zn(t.body);if(n)return n;continue}if(U.isIfStatement(t)){let n=ml(t.consequent);if(n)return n;let r=t.alternate?ml(t.alternate):null;if(r)return r;continue}if(U.isSwitchStatement(t))for(let n of t.cases){let r=Zn(n.consequent);if(r)return r}}return null}function ml(e){return U.isBlockStatement(e)?Zn(e.body):Zn([e])}function ch(e){let t=e;for(;t;){if(t.isFunctionDeclaration()||t.isClassDeclaration())return t.node.id?.name??null;if(t.isExportDefaultDeclaration()){let n=t.node.declaration;if(U.isFunctionDeclaration(n))return n.id?.name??"default"}if(t.isVariableDeclarator()&&U.isIdentifier(t.node.id)){let n=t.get("init");if(!Array.isArray(n)&&(n.isArrowFunctionExpression()||n.isFunctionExpression()))return t.node.id.name}t=t.parentPath}return null}var gl=new WeakMap,hl=new WeakMap,Yi=new WeakMap;function lh(e){let t=gl.get(e.node);if(t!==void 0)return t;let n=[],r=e;for(;r;){if(r.isJSXElement()){let i=uh(r);i&&n.unshift(i)}r=r.parentPath}let o=n.join("/");return gl.set(e.node,o),o}function uh(e){let t=Zi(e.node.openingElement.name);return!t||Cn(e.node)?null:/^[A-Z]/.test(t)?`component:${t}#${yl(e,t)}`:`${t}#${yl(e,t)}`}function yl(e,t){let n=dh(e);if(!n)return 0;let r=Yi.get(n.node)?.get(t)?.get(e.node);if(r!==void 0)return r;let o=Yi.get(n.node);o||(o=new Map,Yi.set(n.node,o));let i=o.get(t);i||(i=new WeakMap,o.set(t,i));let s=0;for(let a of Gt(n))if(Zi(a.node.openingElement.name)===t){if(i.set(a.node,s),a.node===e.node)return s;s+=1}return i.get(e.node)??0}function dh(e){let t=e.parentPath,n=null;for(;t;){if(t.isJSXFragment()){n=t,t=t.parentPath;continue}if(t.isJSXElement()){if(Cn(t.node)){t=t.parentPath;continue}return t}t=t.parentPath}return n}function Gt(e){let t=hl.get(e.node);if(t)return t;let n=[],r=e.get("children");for(let o of r)if(!Array.isArray(o)){if(o.isJSXElement()){if(Cn(o.node)){n.push(...Gt(o));continue}n.push(o);continue}if(o.isJSXFragment()){n.push(...Gt(o));continue}o.isJSXExpressionContainer()&&n.push(...yt(o.get("expression")))}return hl.set(e.node,n),n}function yt(e){if(e.isJSXElement())return Cn(e.node)?Gt(e):[e];if(e.isJSXFragment())return Gt(e);if(e.isParenthesizedExpression())return yt(e.get("expression"));if(e.isLogicalExpression())return yt(e.get("right"));if(e.isConditionalExpression())return[...yt(e.get("consequent")),...yt(e.get("alternate"))];if(e.isArrayExpression())return e.get("elements").flatMap(t=>Array.isArray(t)||!t.node||!t.isExpression()?[]:yt(t));if((e.isCallExpression()||e.isOptionalCallExpression())&&xl(e.node)){let t=e.get("arguments"),n=Array.isArray(t)?t[0]:void 0;return n?fh(n):[]}return[]}function fh(e){if(!e.isArrowFunctionExpression()&&!e.isFunctionExpression())return[];let t=e.get("body");if(t.isJSXElement())return Cn(t.node)?Gt(t):[t];if(t.isJSXFragment())return Gt(t);if(t.isParenthesizedExpression())return yt(t.get("expression"));if(t.isLogicalExpression()||t.isConditionalExpression())return yt(t);if(!t.isBlockStatement())return[];for(let n of t.get("body")){if(!n.isReturnStatement())continue;let r=n.get("argument");return r.node?yt(r):[]}return[]}function xl(e){let t=e.callee;return(U.isMemberExpression(t)||U.isOptionalMemberExpression(t))&&U.isIdentifier(t.property)&&t.property.name==="map"&&!t.computed}function Cn(e){let t=Zi(e.openingElement.name);return t==="Fragment"||t==="React.Fragment"}function Zi(e){return U.isJSXIdentifier(e)?e.name:U.isJSXMemberExpression(e)?Sl(e):U.isJSXNamespacedName(e)?`${e.namespace.name}:${e.name.name}`:null}function Sl(e){return`${U.isJSXIdentifier(e.object)?e.object.name:Sl(e.object)}.${e.property.name}`}function Pt(e,t){if(t.parentPath===e&&t.listKey==="children"&&bl(e))return e;if(!t.parentPath||t.listKey!=="children")return null;let n=t.parentPath;if(!bl(n))return null;let r=n;for(;r&&r!==e;){if(!ph(r)||r.listKey!=="children")return null;r=r.parentPath}return r===e?n:null}function bl(e){return e.isJSXElement()||e.isJSXFragment()}function ph(e){if(e.isJSXFragment())return!0;if(!e.isJSXElement())return!1;let t=e.node.openingElement.name;return t.type==="JSXIdentifier"?t.name==="Fragment":t.type==="JSXMemberExpression"&&t.property.name==="Fragment"}function Rn(e){let{source:t,locator:n,node:r,placement:o,anchorLocator:i,selectionContext:s}=e,a=ke(t,"jsx-node");if(!a.ok)return a.result;let c=oe(a.ast,n);if(!c.ok)return{ok:!1,source:t,diagnostic:c.diagnostic};if(!c.match.path.isJSXElement()&&!c.match.path.isJSXFragment())return V(t,"unsupported-syntax","insert-child target must be a JSXElement or JSXFragment","jsx-node");let l=c.match.path;if(c.match.path.isJSXElement()){let w=c.match.path.node;if(!w.closingElement||w.openingElement.selfClosing)return V(t,"self-closing-element","Cannot insert child into self-closing element","jsx-node")}let u=dl(t,r.jsx);if(!u.ok)return u.result;let d=mh(u.node,!0),p=l.node.children,m={...s,targetParentLocator:n},g=w=>s?Xe(w,a.ast,d,m):w;if(o==="append")return p.push(d),g(de(a.ast,t,{kind:"insert-child",target:"jsx-node",inverse:"remove-child"}));if(o==="prepend")return p.unshift(d),g(de(a.ast,t,{kind:"insert-child",target:"jsx-node",inverse:"remove-child"}));if(!i)return V(t,"locator-miss",`Placement '${o}' requires anchorLocator`,"jsx-node");let S=oe(a.ast,i);if(!S.ok)return{ok:!1,source:t,diagnostic:S.diagnostic};let C=Pt(c.match.path,S.match.path);if(!C)return V(t,"invalid-parent-child-relation","Anchor node is not a direct child of the target parent","jsx-node");l=C;let v=l.node.children,P=v.findIndex(w=>w===S.match.path.node);return P===-1?V(t,"locator-miss","Anchor node no longer exists in target parent","jsx-node"):(v.splice(o==="before"?P:P+1,0,d),g(de(a.ast,t,{kind:"insert-child",target:"jsx-node",inverse:"remove-child"})))}import*as El from"@babel/parser";import{cloneNode as gh}from"@babel/types";function co(e){let{source:t,locator:n,expression:r,placement:o,anchorLocator:i,selectionContext:s}=e,a=ke(t,"jsx-node");if(!a.ok)return a.result;let c=hh(t,r);if(!c.ok)return c.result;let l=oe(a.ast,n);if(!l.ok)return{ok:!1,source:t,diagnostic:l.diagnostic};if(!l.match.path.isJSXElement()&&!l.match.path.isJSXFragment())return V(t,"unsupported-syntax","insert-jsx-expression-child target must be a JSXElement or JSXFragment","jsx-node");if(l.match.path.isJSXElement()){let v=l.match.path.node;if(!v.closingElement||v.openingElement.selfClosing)return V(t,"self-closing-element","Cannot insert child into self-closing element","jsx-node")}let u=l.match.path,d=null;if(i){let v=oe(a.ast,i);if(!v.ok)return{ok:!1,source:t,diagnostic:v.diagnostic};let P=Pt(l.match.path,v.match.path);if(!P)return V(t,"invalid-parent-child-relation","Anchor node is not a direct child of the target parent","jsx-node");u=P,d=v.match.path.node}else if(o==="before"||o==="after")return V(t,"locator-miss",`Placement '${o}' requires anchorLocator`,"jsx-node");let p=gh(c.node,!0),m=u.node.children,g={...s,targetParentLocator:n},S=v=>s?Xe(v,a.ast,p,g):v;if(o==="append")return m.push(p),S(de(a.ast,t,{kind:"insert-jsx-expression-child",target:"jsx-node",inverse:"remove-child"}));if(o==="prepend")return m.unshift(p),S(de(a.ast,t,{kind:"insert-jsx-expression-child",target:"jsx-node",inverse:"remove-child"}));let C=m.findIndex(v=>v===d);return C===-1?V(t,"locator-miss","Anchor node no longer exists in target parent","jsx-node"):(m.splice(o==="before"?C:C+1,0,p),S(de(a.ast,t,{kind:"insert-jsx-expression-child",target:"jsx-node",inverse:"remove-child"})))}function hh(e,t){try{let r=El.parse(`const __VD_EXPR__ = <>{${t}}</>;`,{sourceType:"module",plugins:["jsx","typescript"]}).program.body[0],o=r?.type==="VariableDeclaration"?r.declarations[0]?.init:null,i=o?.type==="JSXFragment"?o.children[0]:void 0;return i?.type!=="JSXExpressionContainer"?{ok:!1,result:V(e,"unsupported-syntax","Expression must parse as a JSX expression container","jsx-node")}:{ok:!0,node:i}}catch(n){return{ok:!1,result:V(e,"parse-failed",`AST parse failed: ${n instanceof Error?n.message:String(n)}`,"jsx-node")}}}import{cloneNode as yh,nullLiteral as Qi}from"@babel/types";import*as wn from"@babel/types";function Nn(e){let{source:t,locator:n,targetParentLocator:r,placement:o,anchorLocator:i,selectionContext:s}=e,a=ke(t,"jsx-node");if(!a.ok)return a.result;let c=oe(a.ast,n);if(!c.ok)return{ok:!1,source:t,diagnostic:c.diagnostic};let l=oe(a.ast,r);if(!l.ok)return{ok:!1,source:t,diagnostic:l.diagnostic};if(!l.match.path.isJSXElement()&&!l.match.path.isJSXFragment())return V(t,"unsupported-syntax","move-node target parent must be a JSXElement or JSXFragment","jsx-node");let u=l.match.path;if(l.match.path.isJSXElement()){let P=l.match.path.node;if(!P.closingElement||P.openingElement.selfClosing)return V(t,"self-closing-element","Cannot move child into self-closing element","jsx-node")}let d=null;if(i){let P=oe(a.ast,i);if(!P.ok)return{ok:!1,source:t,diagnostic:P.diagnostic};let w=Pt(l.match.path,P.match.path);if(!w)return V(t,"invalid-parent-child-relation","Anchor node is not a direct child of the target parent","jsx-node");u=w,d=P.match.path}else if(o==="before"||o==="after")return V(t,"locator-miss",`Placement '${o}' requires anchorLocator`,"jsx-node");let p=d&&typeof d.key=="number"?d.key:-1;if(d&&p===-1)return V(t,"locator-miss","Anchor node does not exist in target parent","jsx-node");let m=yh(c.match.path.node,!0);if(!wn.isJSXElement(m)&&!wn.isJSXExpressionContainer(m)&&!wn.isJSXFragment(m))return V(t,"unsupported-syntax","move-node source must resolve to a JSX child","jsx-node");let g=c.match.path.parentPath?.node===u.node&&typeof c.match.path.key=="number"?c.match.path.key:-1;if(d&&c.match.path.parentPath?.node===d.parentPath?.node&&c.match.path.key===d.key)return V(t,"invalid-parent-child-relation","Cannot move a node relative to itself","jsx-node");xh(c.match.path);let S=u.node.children,C={...s,sourceLocator:n,targetParentLocator:r};if(o==="append")return S.push(m),Xe(io(a.ast,t),a.ast,m,C);if(o==="prepend")return S.unshift(m),Xe(io(a.ast,t),a.ast,m,C);let v=p-(g!==-1&&g<p?1:0);return S.splice(o==="before"?v:v+1,0,m),Xe(io(a.ast,t),a.ast,m,C)}function xh(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(Qi());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(Qi());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(Qi());return}e.remove()}import*as Il from"@babel/parser";import{cloneNode as Sh,nullLiteral as qi}from"@babel/types";function lo(e){let{source:t,locator:n,targetParentLocator:r,placement:o,anchorLocator:i,repeatExpression:s,selectionContext:a}=e,c=ke(t,"jsx-node");if(!c.ok)return c.result;let l=bh(t,s);if(!l.ok)return l.result;let u=oe(c.ast,n);if(!u.ok)return{ok:!1,source:t,diagnostic:u.diagnostic};let d=oe(c.ast,r);if(!d.ok)return{ok:!1,source:t,diagnostic:d.diagnostic};if(!d.match.path.isJSXElement()&&!d.match.path.isJSXFragment())return V(t,"unsupported-syntax","move-repeat-template-child target parent must be a JSXElement or JSXFragment","jsx-node");if(d.match.path.isJSXElement()){let w=d.match.path.node;if(!w.closingElement||w.openingElement.selfClosing)return V(t,"self-closing-element","Cannot move repeat child into self-closing element","jsx-node")}let p=d.match.path,m=null;if(i){let w=oe(c.ast,i);if(!w.ok)return{ok:!1,source:t,diagnostic:w.diagnostic};let B=Pt(d.match.path,w.match.path);if(!B)return V(t,"invalid-parent-child-relation","Anchor node is not a direct child of the target parent","jsx-node");p=B,m=w.match.path.node}else if(o==="before"||o==="after")return V(t,"locator-miss",`Placement '${o}' requires anchorLocator`,"jsx-node");if(!u.match.path.isJSXElement())return V(t,"unsupported-syntax","move-repeat-template-child source must be a JSXElement","jsx-node");let g=p.node,S=Sh(l.node,!0);Eh(u.match.path);let C={...a,sourceLocator:n,targetParentLocator:r},v=g.children;if(o==="append")return v.push(S),Xe(de(c.ast,t,{kind:"move-repeat-template-child",target:"jsx-node",inverse:"move-repeat-template-child"}),c.ast,S,C);if(o==="prepend")return v.unshift(S),Xe(de(c.ast,t,{kind:"move-repeat-template-child",target:"jsx-node",inverse:"move-repeat-template-child"}),c.ast,S,C);let P=v.findIndex(w=>w===m);return P===-1?V(t,"locator-miss","Anchor node no longer exists in target parent","jsx-node"):(v.splice(o==="before"?P:P+1,0,S),Xe(de(c.ast,t,{kind:"move-repeat-template-child",target:"jsx-node",inverse:"move-repeat-template-child"}),c.ast,S,C))}function bh(e,t){try{let r=Il.parse(`const __VD_EXPR__ = <>{${t}}</>;`,{sourceType:"module",plugins:["jsx","typescript"]}).program.body[0],o=r?.type==="VariableDeclaration"?r.declarations[0]?.init:null,i=o?.type==="JSXFragment"?o.children[0]:void 0;return i?.type!=="JSXExpressionContainer"?{ok:!1,result:V(e,"unsupported-syntax","Repeat expression must parse as a JSX expression container","jsx-node")}:{ok:!0,node:i}}catch(n){return{ok:!1,result:V(e,"parse-failed",`AST parse failed: ${n instanceof Error?n.message:String(n)}`,"jsx-node")}}}function Eh(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(qi());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(qi());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(qi());return}e.remove()}function uo(e){let{source:t,locator:n,props:r}=e,o=ke(t,"jsx-node");if(!o.ok)return o.result;let i=ll(o.ast,n,t);if(!i.ok)return i.result;let s=i.match.path.node.openingElement;for(let[a,c]of Object.entries(r)){if(c===void 0)continue;let l={kind:"jsx-attribute",element:n,name:a},u=ul(o.ast,l);if(u.ok&&u.match!==null){let d=u.match.path.node;d.value=c===""?so(a,"").value:so(a,c).value}else s.attributes.push(so(a,c))}return de(o.ast,t,{kind:"set-props",target:"jsx-node",inverse:"set-props"})}import{getBindingIdentifiers as Ih,identifier as Qn,importDeclaration as vh,importDefaultSpecifier as kh,importNamespaceSpecifier as Ch,importSpecifier as Rh,isImportDefaultSpecifier as vl,isImportNamespaceSpecifier as kl,isImportSpecifier as Cl,stringLiteral as wh}from"@babel/types";function Pn(e){let{source:t,moduleSpecifier:n,imports:r}=e,o=r.findIndex(C=>!Dh(C));if(o!==-1){let C=r[o],v=C&&typeof C=="object"&&"kind"in C?C.kind:void 0;return V(t,"unsupported-syntax",`Unsupported import spec kind: ${String(v)}`)}let i=Fh(r);if(!i.ok)return V(t,"unsupported-syntax",i.message);let s=ke(t);if(!s.ok)return s.result;let{ast:a}=s,c=a.program,l=c.body.filter(C=>C.type==="ImportDeclaration"&&C.source.value===n),u=new Set(l.flatMap(C=>C.specifiers.flatMap(v=>{let P=Lh(C,v);return P?[P]:[]}))),d=i.imports.filter(C=>!u.has(Tl(C)));if(d.length===0)return Yn(t,t,{kind:"add-import",target:"import",inverse:"remove-import"});let p=Mh(c.body),m=d.find(C=>p.has(es(C)));if(m)return V(t,"unsupported-syntax",`Import local binding already exists: ${es(m)}`);let g=_h(d);if(g.reduce((C,v)=>C+v.length,0)!==d.length)return V(t,"unsupported-syntax","Unsupported import specifier grouping");for(let C of g){if(!Pl(wl(C)))return V(t,"unsupported-syntax","Unsupported import specifier combination");let v=l.find(P=>Nh(P,C));if(v)Ph(v,C);else{let P=vh(Rl(C),wh(n));Oh(c.body,P),l.push(P)}}return de(a,t,{kind:"add-import",target:"import",inverse:"remove-import"})}function Nh(e,t){return e.importKind==="type"?!1:Pl(Th(Ah(e),wl(t)))}function Ph(e,t){let n=!1,r=new Set(e.specifiers.map(o=>ts(o)));for(let o of Rl(t)){let i=ts(o);r.has(i)||(e.specifiers.push(o),r.add(i),n=!0)}return Al(e.specifiers),{changed:n}}function Rl(e){let t=e.map(n=>{switch(n.kind){case"named":return Rh(n.local?Qn(n.local):Qn(n.imported),Qn(n.imported));case"default":return kh(Qn(n.local));case"namespace":return Ch(Qn(n.local));default:return n}});return Al(t),t}function wl(e){let t=Nl();for(let n of e)n.kind==="default"?t.defaultLocals.add(n.local):n.kind==="named"?t.hasNamed=!0:t.namespaceLocals.add(n.local);return t}function Ah(e){let t=Nl();for(let n of e.specifiers)vl(n)?t.defaultLocals.add(n.local.name):kl(n)?t.namespaceLocals.add(n.local.name):t.hasNamed=!0;return t}function Nl(){return{defaultLocals:new Set,hasNamed:!1,namespaceLocals:new Set}}function Th(e,t){return{defaultLocals:new Set([...e.defaultLocals,...t.defaultLocals]),hasNamed:e.hasNamed||t.hasNamed,namespaceLocals:new Set([...e.namespaceLocals,...t.namespaceLocals])}}function Pl(e){return e.defaultLocals.size>1||e.namespaceLocals.size>1?!1:!(e.hasNamed&&e.namespaceLocals.size>0)}function Al(e){let t=[...e.filter(n=>vl(n)),...e.filter(n=>kl(n)),...e.filter(n=>Cl(n))];e.splice(0,e.length,...t)}function _h(e){let t=e.filter(i=>i.kind==="default"),n=e.filter(i=>i.kind==="namespace"),r=e.filter(i=>i.kind==="named"),o=[];if(n.length>0){let i=Math.max(t.length,n.length);for(let s=0;s<i;s+=1){let a=[],c=t[s],l=n[s];c&&a.push(c),l&&a.push(l),o.push(a)}return r.length>0&&o.push(r),o}if(t.length>0){o.push([t[0],...r]);for(let i of t.slice(1))o.push([i])}else r.length>0&&o.push(r);return o}function Fh(e){let t=new Map,n=new Map;for(let r of e){let o=Tl(r);if(t.has(o))continue;let i=es(r),s=n.get(i);if(s&&s!==o)return{ok:!1,message:`Import local binding is requested more than once: ${i}`};t.set(o,r),n.set(i,o)}return{ok:!0,imports:[...t.values()]}}function Mh(e){let t=new Set;for(let n of e){if(n.type==="ImportDeclaration"){for(let o of n.specifiers)t.add(o.local.name);continue}let r=(n.type==="ExportNamedDeclaration"||n.type==="ExportDefaultDeclaration")&&n.declaration?n.declaration:n;if(r.type==="VariableDeclaration")for(let o of r.declarations)for(let i of Object.keys(Ih(o.id)))t.add(i);else(r.type==="FunctionDeclaration"||r.type==="ClassDeclaration"||r.type==="TSEnumDeclaration")&&r.id&&t.add(r.id.name)}return t}function Oh(e,t){let n=[...e].reverse().findIndex(r=>r.type==="ImportDeclaration");if(n===-1)e.unshift(t);else{let r=e.length-n;e.splice(r,0,t)}}function Dh(e){if(!e||typeof e!="object"||!("kind"in e))return!1;let t=e.kind;return t==="named"?typeof e.imported=="string"&&(e.local===void 0||typeof e.local=="string"):t==="default"||t==="namespace"?typeof e.local=="string":!1}function Tl(e){switch(e.kind){case"default":return`default:${e.local}`;case"namespace":return`namespace:${e.local}`;case"named":return`named:${e.imported}:${e.local??e.imported}`;default:return e}}function es(e){return e.kind==="named"?e.local??e.imported:e.local}function Lh(e,t){return e.importKind==="type"||Cl(t)&&t.importKind==="type"?null:ts(t)}function ts(e){if(e.type==="ImportDefaultSpecifier")return`default:${e.local.name}`;if(e.type==="ImportNamespaceSpecifier")return`namespace:${e.local.name}`;let t=e.imported.type==="Identifier"?e.imported.name:e.imported.value,n=e.local.name;return`named:${t}:${n}`}function An(e){let{source:t,moduleSpecifier:n,imports:r}=e,o=r.findIndex(u=>!jh(u));if(o!==-1){let u=r[o],d=u&&typeof u=="object"&&"kind"in u?u.kind:void 0;return V(t,"unsupported-syntax",`Unsupported remove import spec kind: ${String(d)}`)}let i=ke(t);if(!i.ok)return i.result;let{ast:s}=i,a=s.program,c=a.body.findIndex(u=>u.type==="ImportDeclaration"&&u.source.value===n);if(c===-1)return Yn(t,t,{kind:"remove-import",target:"import",inverse:"add-import"});let l=a.body[c];return r.length===0?(a.body.splice(c,1),de(s,t,{kind:"remove-import",target:"import",inverse:"add-import"})):(l.specifiers=l.specifiers.filter(u=>!r.some(d=>Bh(u,d))),l.specifiers.length===0&&a.body.splice(c,1),de(s,t,{kind:"remove-import",target:"import",inverse:"add-import"}))}function Bh(e,t){return t.kind==="default"?e.type==="ImportDefaultSpecifier":t.kind==="namespace"?e.type==="ImportNamespaceSpecifier":e.type!=="ImportSpecifier"?!1:(e.imported.type==="Identifier"?e.imported.name:e.imported.value)===t.imported}function jh(e){if(!e||typeof e!="object"||!("kind"in e))return!1;let t=e.kind;return t==="named"?typeof e.imported=="string":t==="default"||t==="namespace"}function qn(e){let{source:t,locator:n,next:r}=e,o=go(t,n);return o.ok?(o.path.replaceWith(vn(r)),de(o.ast,t,{kind:"update-value",target:"value",inverse:"restore-value"})):o.result}function fo(e){let{source:t,locator:n,index:r,value:o}=e,i=go(t,n);return i.ok?i.path.isArrayExpression()?i.path.node.elements.some(s=>s?.type==="SpreadElement")?V(t,"unsupported-syntax","Spread array elements are not supported","value"):r<0||r>i.path.node.elements.length?V(t,"array-index-out-of-range",`Array index ${r} is out of range`,"value"):(i.path.node.elements.splice(r,0,vn(o)),de(i.ast,t,{kind:"insert-array-element",target:"value",inverse:"remove-array-element"})):V(t,"unsupported-syntax","Array operations require array expression target","value"):i.result}function po(e){let{source:t,locator:n,index:r}=e,o=go(t,n);return o.ok?o.path.isArrayExpression()?o.path.node.elements.some(i=>i?.type==="SpreadElement")?V(t,"unsupported-syntax","Spread array elements are not supported","value"):r<0||r>=o.path.node.elements.length?V(t,"array-index-out-of-range",`Array index ${r} is out of range`,"value"):(o.path.node.elements.splice(r,1),de(o.ast,t,{kind:"remove-array-element",target:"value",inverse:"insert-array-element"})):V(t,"unsupported-syntax","Array operations require array expression target","value"):o.result}function mo(e){let{source:t,locator:n,fromIndex:r,toIndex:o}=e,i=go(t,n);if(!i.ok)return i.result;if(!i.path.isArrayExpression())return V(t,"unsupported-syntax","Array operations require array expression target","value");if(i.path.node.elements.some(c=>c?.type==="SpreadElement"))return V(t,"unsupported-syntax","Spread array elements are not supported","value");if(r<0||r>=i.path.node.elements.length||o<0||o>i.path.node.elements.length)return V(t,"array-index-out-of-range","Array move indices are out of range","value");let[s]=i.path.node.elements.splice(r,1),a=Math.min(o,i.path.node.elements.length);return i.path.node.elements.splice(a,0,s),de(i.ast,t,{kind:"move-array-element",target:"value",inverse:"move-array-element-back"})}function go(e,t){let n=ke(e,"value");if(!n.ok)return{ok:!1,result:n.result};let r=oe(n.ast,t);return r.ok?{ok:!0,ast:n.ast,path:r.match.path}:{ok:!1,result:{ok:!1,source:e,diagnostic:r.diagnostic}}}var Vh=typeof ns=="function"?ns:ns.default;function is(e){let t=Bl(e);if(t)return{ok:!1,error:t};let n=e.projection,r=ss(n,e.placementKey,e.expectedDocumentVersion);if(!r.ok)return{ok:!1,error:{code:r.diagnostic.code==="DOCUMENT_VERSION_STALE"?"VERSION_STALE":"RUNTIME_ANCHOR_UNRESOLVED",message:r.diagnostic.message,diagnostics:[r.diagnostic]}};let o=r.placement.containerSourceRange??n.container.sourceRange,i=r.placement;if((n.container.kind==="virtual-route-root"||n.container.kind==="starter-placeholder")&&(n.container.sourceRange===null||n.container.sourceKind==="jsx-element"||n.container.sourceKind==="atomic-expression"||n.container.kind==="starter-placeholder"))return n.container.sourceKind==="atomic-expression"?{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"An indirect page expression does not expose a safe return boundary.",diagnostics:[]}}:{ok:!0,plan:{kind:"route-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:e.placementKey,placementUnitKey:i.placementUnitKey,importStep:Fl(e),returnStep:{kind:"insert-return",node:{jsx:`<${e.component.localName} />`},placement:i.relation,replaceOriginal:n.container.kind==="starter-placeholder"}}};if(!o)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition does not expose a safe placement boundary.",diagnostics:[]}};let a={kind:"jsx-node",strategy:"source-range",sourceRange:o},c=ht(e.source,a);if(!c.ok||!c.match.node)return{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:c.ok===!1?c.diagnostic.message:"Route page composition anchor could not be resolved.",diagnostics:c.ok?[]:[ho(c.diagnostic)]}};let l=yo(e.source,c.match.node.start??null,c.match.node.end??null);if(zh(o,n.container.sourceRange)&&n.container.sourceHash&&l!==n.container.sourceHash)return{ok:!1,error:{code:"VERSION_STALE",message:"Route page composition container hash no longer matches the current source.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Route page composition container hash no longer matches the current source."}]}};let u=Fl(e);return{ok:!0,plan:{kind:"route-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:e.placementKey,placementUnitKey:r.placement.placementUnitKey,parentLocator:a,importStep:u,insertStep:{kind:"insert-child",parentLocator:a,node:{jsx:`<${e.component.localName} />`},placement:r.placement.relation,...r.placement.anchorSourceRange?{anchorLocator:{kind:"jsx-node",strategy:"source-range",sourceRange:r.placement.anchorSourceRange}}:{}}}}}function Fl(e){let t=Xh(e.entryFile,e.component.source);return e.component.exportName==="default"?{kind:"add-import",moduleSpecifier:t,imports:[{kind:"default",local:e.component.localName}]}:{kind:"add-import",moduleSpecifier:t,imports:[{kind:"named",imported:e.component.exportName,local:e.component.localName===e.component.exportName?void 0:e.component.localName}]}}function Dl(e){let t;try{t=xo.parse(e.source,{sourceType:"module",plugins:["jsx","typescript"]})}catch(i){return{ok:!1,source:e.source,diagnostic:{message:i instanceof Error?i.message:String(i)}}}let n=xo.parseExpression(e.jsx,{plugins:["jsx","typescript"]}),r=!1;return(typeof rs=="function"?rs:rs.default)(t,{ExportDefaultDeclaration(i){let s=i.get("declaration"),a=Uh(i,s);if(a){if(a.isArrowFunctionExpression()&&!a.get("body").isBlockStatement()){let c=a.get("body");c.replaceWith(Ml(c.node,n,e.placement,e.replaceOriginal===!0)),r=!0,i.stop();return}a.traverse({Function(c){c.node!==a.node&&c.skip()},ReturnStatement(c){if(r)return;let l=c.get("argument");l.node&&(l.replaceWith(Ml(l.node,n,e.placement,e.replaceOriginal===!0)),r=!0,c.stop())}}),r&&i.stop()}}}),r?{ok:!0,source:Vh(t,{}).code}:{ok:!1,source:e.source,diagnostic:{message:"Route default return boundary could not be resolved."}}}function Uh(e,t){if(t.isFunctionDeclaration()||t.isFunctionExpression()||t.isArrowFunctionExpression())return t;if(!t.isIdentifier())return null;let n=e.scope.getBinding(t.node.name);if(!n)return null;let r=n.path;if(r.isFunctionDeclaration()||r.isFunctionExpression())return r;if(r.isVariableDeclarator()){let o=r.get("init");if(o.isArrowFunctionExpression()||o.isFunctionExpression())return o}return null}function Ml(e,t,n,r){if(At.isNullLiteral(e)||r)return t;let s=n==="before"||n==="prepend"?[t,e]:[e,t];return At.jsxFragment(At.jsxOpeningFragment(),At.jsxClosingFragment(),s)}function Ll(e){let t=Bl(e);if(t)return{ok:!1,error:t};let n=e.projection;if(n.container.sourceRange===null)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition does not expose a safe placement boundary.",diagnostics:[]}};let r=jl(n,e.placementUnitKey,e.expectedDocumentVersion);if(!r.ok)return{ok:!1,error:{code:r.diagnostic.code==="DOCUMENT_VERSION_STALE"?"VERSION_STALE":"NO_SAFE_PAGE_PLACEMENT",message:r.diagnostic.message,diagnostics:[r.diagnostic]}};let o=r.placement;if(!o.sourceRange||!o.sourceHash)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition source placement does not expose a safe boundary.",diagnostics:[]}};let i=os(o.sourceRange),s=ht(e.source,i);if(!s.ok||!s.match.node)return{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:s.ok===!1?s.diagnostic.message:"Route page composition source anchor could not be resolved.",diagnostics:s.ok?[]:[ho(s.diagnostic)]}};if(yo(e.source,s.match.node.start??null,s.match.node.end??null)!==o.sourceHash)return{ok:!1,error:{code:"VERSION_STALE",message:"Route page composition source placement hash no longer matches the current source.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Route page composition source placement hash no longer matches the current source."}]}};if(e.operation==="remove-node")return{ok:!0,plan:{kind:"page-unit-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:o.placementKey,placementUnitKey:o.placementUnitKey,sourceHash:o.sourceHash,rewriteStep:{kind:"remove-node",locator:i}}};if(!e.targetPlacement)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Page-unit move requires a target placement.",diagnostics:[]}};if(e.targetPlacement.composition.routeId!==e.routeId||!Jh(e.targetPlacement.composition,e.composition))return{ok:!1,error:{code:"CROSS_PAGE_MOVE_UNSUPPORTED",message:"Page-unit move across routes or composition templates is not supported.",diagnostics:[]}};if(e.targetPlacement.documentVersion!==e.expectedDocumentVersion)return{ok:!1,error:{code:"VERSION_STALE",message:"Page-unit target placement belongs to a different document version.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Page-unit target placement belongs to a different document version."}]}};let c=ss(n,e.targetPlacement.placementKey,e.expectedDocumentVersion);if(!c.ok)return{ok:!1,error:{code:c.diagnostic.code==="DOCUMENT_VERSION_STALE"?"VERSION_STALE":"NO_SAFE_PAGE_PLACEMENT",message:c.diagnostic.message,diagnostics:[c.diagnostic]}};let l=c.placement;if(l.placementUnitKey!==e.targetPlacement.placementUnitKey||l.relation!==e.targetPlacement.relation)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Page-unit target placement metadata does not match the cached projection.",diagnostics:[]}};let u=l.containerSourceRange;if(!u||!l.containerSourceHash)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition target placement does not expose a verifiable container boundary.",diagnostics:[]}};let d=os(u),p=ht(e.source,d);if(!p.ok||!p.match.node)return{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:p.ok===!1?p.diagnostic.message:"Route page composition target container could not be resolved.",diagnostics:p.ok?[]:[ho(p.diagnostic)]}};if(yo(e.source,p.match.node.start??null,p.match.node.end??null)!==l.containerSourceHash)return Ol("Route page composition target container hash no longer matches the current source.");if(l.relation==="before"||l.relation==="after"){let g=l.anchorSourceRange,S=l.anchorSourceHash;if(!g||!S)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition target placement does not expose a verifiable anchor boundary.",diagnostics:[]}};let C=os(g),v=ht(e.source,C);return!v.ok||!v.match.node?{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:v.ok===!1?v.diagnostic.message:"Route page composition target anchor could not be resolved.",diagnostics:v.ok?[]:[ho(v.diagnostic)]}}:yo(e.source,v.match.node.start??null,v.match.node.end??null)!==S?Ol("Route page composition target anchor hash no longer matches the current source."):{ok:!0,plan:{kind:"page-unit-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:o.placementKey,placementUnitKey:o.placementUnitKey,sourceHash:o.sourceHash,rewriteStep:{kind:"move-node",locator:i,targetParentLocator:d,anchorLocator:C,placement:l.relation}}}}return{ok:!0,plan:{kind:"page-unit-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:o.placementKey,placementUnitKey:o.placementUnitKey,sourceHash:o.sourceHash,rewriteStep:{kind:"move-node",locator:i,targetParentLocator:d,placement:l.relation}}}}function Ol(e){return{ok:!1,error:{code:"VERSION_STALE",message:e,diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:e}]}}}function ho(e){return{code:"UNSUPPORTED_PAGE_SHAPE",message:e.message,details:{astCode:e.code}}}function Bl(e){let{projection:t}=e;return t.route!==e.routeId||t.entryFile!==e.entryFile?{code:"VERSION_STALE",message:"Cached page composition projection belongs to a different route.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Cached page composition projection belongs to a different route.",details:{expectedRouteId:e.routeId,projectedRouteId:t.route,expectedEntryFile:e.entryFile,projectedEntryFile:t.entryFile}}]}:e.composition&&!Kh(t.composition,e.composition)?{code:"VERSION_STALE",message:"Cached page composition projection belongs to a different composition.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Cached page composition projection belongs to a different composition.",details:{expectedComposition:e.composition,projectedComposition:t.composition}}]}:e.currentDocumentVersion!==e.expectedDocumentVersion||t.documentVersion!==e.currentDocumentVersion?{code:"VERSION_STALE",message:"Route page composition version is stale.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Route page composition version is stale.",details:{expectedDocumentVersion:e.expectedDocumentVersion,currentDocumentVersion:e.currentDocumentVersion,projectedDocumentVersion:t.documentVersion}}]}:null}function Kh(e,t){return e.routeId===t.routeId&&e.effectiveTemplateId===t.effectiveTemplateId}function Jh(e,t){return e.routeId===t.routeId&&e.templateId===t.effectiveTemplateId}function Xh(e,t){let n=_l.posix.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=_l.posix.relative(n,r);return o=o.replace(/\\/g,"/"),o.startsWith(".")||(o=`./${o}`),o}function os(e){return{kind:"jsx-node",strategy:"source-range",sourceRange:e}}function yo(e,t,n){return t==null||n==null?null:`sha256:${$h("sha256").update(e.slice(t,n)).digest("hex")}`}function zh(e,t){return e===null||t===null?e===t:e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}var Wh=typeof as=="function"?as:as.default;function Vl(e){if(!e.ast)return lt(e,[Oe("UNSUPPORTED_PAGE_SHAPE","SourceGraph entry AST is required",{reason:"parsed-ast-required"})]);let t=ty(e.ast);if(!t)return lt(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export must resolve to a local function component",{reason:"default-export-unresolved"})]);let n=ry(t);if(n.length===0)return lt(e,[Oe("ROUTE_RETURN_NOT_FOUND","Route default export does not contain a proven return boundary")]);if(n.length>1)return lt(e,[Oe("MULTIPLE_PAGE_RETURNS","Route default export contains multiple page-level return statements",{returnCount:n.length})]);let r=oy(n[0].argument);if(!r)return lt(e,[Oe("ROUTE_RETURN_NOT_FOUND","Route default export returns without a boundary expression",{reason:"bare-return"})]);if(r.isNullLiteral())return $l(e,t,"virtual-route-root");if(iy(r,t))return lt(e,[Oe("INDIRECT_RETURN_ONLY","Route default export only returns through an indirect function boundary")]);if(sy(r,t)||ay(r)&&!e.source.includes("DESIGN_PLAN_REPLACE_ME"))return lt(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export shape does not provide a single safe placement boundary",{reason:"ambiguous-placement"})]);if(r.isJSXFragment()){let i=_t(r);if(i.unsupported)return lt(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let s=cs({input:e,containerKind:"virtual-route-root",sourceKind:"jsx-fragment",source:e.source,containerPath:r,members:i.members});return So(e,t,s,{kind:"virtual-route-root",sourceKind:"jsx-fragment"})}if(r.isJSXElement()&&!Tn(r)){let i=ds(r),s=cs({input:e,containerKind:"virtual-route-root",sourceKind:"jsx-element",source:e.source,containerPath:r,members:[i]});return So(e,t,s,{kind:"virtual-route-root",sourceKind:"jsx-element"})}if(r.isJSXElement()){let i=_t(r);if(i.unsupported)return lt(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let s=i.members;if(ly(e.source,r,s))return $l(e,t,"starter-placeholder");let a=cs({input:e,containerKind:"jsx-container",sourceKind:"jsx-element",source:e.source,containerPath:r,members:s});return So(e,t,a,{kind:"jsx-container",sourceKind:"jsx-element"})}if(cy(r))return lt(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let o=dy({input:e,source:e.source,expression:r});return So(e,t,o,{kind:"virtual-route-root",sourceKind:"atomic-expression"})}function ss(e,t,n){if(e.documentVersion!==n)return{ok:!1,diagnostic:Oe("DOCUMENT_VERSION_STALE","Placement lookup is stale for the requested document version",{expectedDocumentVersion:e.documentVersion,requestedDocumentVersion:n})};let r=e.placementByKey.get(t)??null;return r?{ok:!0,placement:r}:{ok:!1,diagnostic:Oe("PLACEMENT_KEY_NOT_FOUND","Placement key was not found in the projected page composition",{placementKey:t})}}function jl(e,t,n){if(e.documentVersion!==n)return{ok:!1,diagnostic:Oe("DOCUMENT_VERSION_STALE","Placement lookup is stale for the requested document version",{expectedDocumentVersion:e.documentVersion,requestedDocumentVersion:n})};let r=e.placementUnitByKey.get(t)??null;return r?{ok:!0,placement:r}:{ok:!1,diagnostic:Oe("PLACEMENT_KEY_NOT_FOUND","Placement unit key was not found in the projected page composition",{placementUnitKey:t})}}function Ul(e){return e.ok?Hh(e.projection):Gh(e.projection)}function Hh(e){let t=new Map,n=[];for(let l of e.placements)l.members.length===0&&e.placements.length>1||l.members.length>0&&!l.anchorSourceRange||t.has(l.placementUnitKey)||t.set(l.placementUnitKey,l);let r=new Map,o=new Map;for(let[l,u]of t){let d=u.members.flatMap((S,C)=>Kl(e,u,S,C,e.container.placementKey)),p=d.filter(({member:S})=>S.isBusinessMember).map(({sourceMember:S})=>Zh(l,S,u.independent)),m=d.length>0?d:[{sourceMember:{key:`source:${l}:empty`,kind:e.container.kind==="starter-placeholder"?"starter-placeholder":"null-return",containerKey:e.container.placementKey,label:"empty-page",sourceFile:e.entryFile,isAtomic:!0},member:null}];r.set(l,m.map(({sourceMember:S})=>S)),o.set(l,p);let g=m[0]?.sourceMember.key??l;n.push({key:l,containerKey:g,businessMemberKeys:p.map(S=>S.key),isMultiMember:u.memberCount>1})}let i=[...r.values()].flat(),s=[...o.values()].flat(),a=i[0]?.key??null,c=e.placements.map(l=>({kind:"page-composition",placementKey:l.placementKey,documentVersion:e.documentVersion,composition:e.composition,placementUnitKey:l.placementUnitKey,relation:l.relation}));return{status:"supported",version:e.version,composition:e.composition,container:Yh(e,a),sourceMembers:i,businessMembers:s,placementUnits:n,placements:c}}function Gh(e){let t=e.diagnostics.map(Qh);return{status:"unsupported",version:e.version,composition:e.composition,reason:qh(e.diagnostics),diagnostics:t}}function Yh(e,t){switch(e.container.kind){case"jsx-container":return{kind:"jsx-container",key:e.container.placementKey,sourceMemberKey:t??e.container.placementKey,sourceFile:e.entryFile,componentName:e.defaultExportName??void 0};case"starter-placeholder":return{kind:"starter-placeholder",key:e.container.placementKey,sourceFile:e.entryFile};case"virtual-route-root":return{kind:"virtual-route-root",key:e.container.placementKey}}}function Kl(e,t,n,r,o){let i=`source:${t.placementUnitKey}:${r}:${n.memberKey}`;return[{sourceMember:{key:i,kind:n.kind==="jsx-element"?"jsx-element":"jsx-expression",containerKey:o,label:n.label,sourceFile:e.entryFile,isAtomic:n.kind!=="jsx-element"},member:n},...n.children.flatMap((a,c)=>Kl(e,t,a,c,i))]}function Zh(e,t,n){return{key:`business:${e}:${t.key}`,sourceMemberKey:t.key,containerKey:e,label:t.label,isIndependent:n}}function Qh(e){return{code:ey(e),message:e.message}}function qh(e){let t=e[0];if(!t)return"UNSUPPORTED_ROUTE_STRUCTURE";switch(t.code){case"ROUTE_RETURN_NOT_FOUND":return"ROUTE_RETURN_NOT_FOUND";case"MULTIPLE_PAGE_RETURNS":return"MULTIPLE_PAGE_RETURNS";case"INDIRECT_RETURN_ONLY":return"INDIRECT_RETURN_ONLY";case"PLACEMENT_KEY_NOT_FOUND":return"RUNTIME_ANCHOR_UNRESOLVED";case"DOCUMENT_VERSION_STALE":return"VERSION_STALE";case"UNSUPPORTED_PAGE_SHAPE":return t.details?.reason==="ambiguous-placement"?"PAGE_CONTAINER_AMBIGUOUS":"UNSUPPORTED_ROUTE_STRUCTURE";default:return"UNSUPPORTED_ROUTE_STRUCTURE"}}function ey(e){switch(e.code){case"PLACEMENT_KEY_NOT_FOUND":return"RUNTIME_ANCHOR_UNRESOLVED";case"DOCUMENT_VERSION_STALE":return"VERSION_STALE";case"UNSUPPORTED_PAGE_SHAPE":return e.details?.reason==="ambiguous-placement"?"PAGE_CONTAINER_AMBIGUOUS":"UNSUPPORTED_ROUTE_STRUCTURE";default:return e.code}}function ty(e){let t=null;return Wh(e,{ExportDefaultDeclaration(n){let r=n.get("declaration");if(r.isArrowFunctionExpression()||r.isFunctionDeclaration()||r.isFunctionExpression()){t=r,n.stop();return}if(!r.isIdentifier())return;let o=n.scope.getBinding(r.node.name);if(!o)return;let i=ny(o.path);i&&(t=i,n.stop())}}),t}function ny(e){if(e.isArrowFunctionExpression()||e.isFunctionDeclaration()||e.isFunctionExpression())return e;if(e.isVariableDeclarator()){let t=e.get("init");if(t.isArrowFunctionExpression()||t.isFunctionExpression())return t}return null}function ry(e){if(e.isArrowFunctionExpression()){let r=e.get("body");if(!r.isBlockStatement())return[{argument:r}]}let t=e.get("body");if(!t.isBlockStatement())return[];let n=[];return t.traverse({Function(r){r.node!==e.node&&r.skip()},ReturnStatement(r){n.push({argument:r.get("argument")})}}),n}function oy(e){if(!e.node)return null;let t=e;for(;;){if(t.isParenthesizedExpression()){t=t.get("expression");continue}if(t.isTSAsExpression()||t.isTSTypeAssertion()){t=t.get("expression");continue}if(t.isTSNonNullExpression()||t.isTypeCastExpression()){t=t.get("expression");continue}break}return t.isExpression()?t:null}function iy(e,t){if(e.isIdentifier())return bo(e.node.name,t);if(e.isCallExpression()){let n=e.get("callee");if(n.isIdentifier())return bo(n.node.name,t)}return!1}function sy(e,t){return e.isConditionalExpression()?Tt(e.get("consequent"),t)||Tt(e.get("alternate"),t):e.isLogicalExpression()?Tt(e.get("left"),t)||Tt(e.get("right"),t):!1}function ay(e){if(!e.isJSXElement()||!Tn(e))return!1;let t=_t(e).members;if(t.length!==1)return!1;let n=t[0];return n.kind==="jsx-element"&&!n.isBusinessMember&&n.businessMemberCount>0}function Tt(e,t){if(e.isIdentifier())return bo(e.node.name,t);if(e.isCallExpression()){let n=e.get("callee");if(n.isIdentifier())return bo(n.node.name,t)}return e.isConditionalExpression()?Tt(e.get("consequent"),t)||Tt(e.get("alternate"),t):e.isLogicalExpression()?Tt(e.get("left"),t)||Tt(e.get("right"),t):!1}function bo(e,t){let n=t.scope.getBinding(e);if(!n)return!1;let r=n.path;if(r.isFunctionDeclaration()||r.isFunctionExpression()||r.isArrowFunctionExpression())return!0;if(r.isVariableDeclarator()){let o=r.get("init");return o.isFunctionExpression()||o.isArrowFunctionExpression()}return!1}function cy(e){return e.isJSXSpreadChild()}function ly(e,t,n){return e.includes("DESIGN_PLAN_REPLACE_ME")&&t.isJSXElement()&&n.length>0&&us(t)}function us(e){for(let t of e.get("children")){if(t.isJSXText()){if(t.node.value.trim())return!1;continue}if(t.isJSXExpressionContainer()){let n=t.get("expression");if(n.isJSXEmptyExpression()||n.isNullLiteral())continue;return!1}if(t.isJSXFragment()){if(!us(t))return!1;continue}if(t.isJSXElement()&&!us(t))return!1}return!0}function _t(e){let t=[],n=!1;for(let r of e.get("children")){if(r.isJSXText()){if(!r.node.value.trim())continue;t.push({memberKey:fs(r.node.type,r.node.start,r.node.end),kind:"text",nodeType:r.node.type,sourceRange:Ze(r.node.loc),businessMemberCount:0,parentSourceRange:Ze(e.node.loc),children:[],isBusinessMember:!1,label:"text"});continue}if(r.isJSXExpressionContainer()){let o=r.get("expression");if(o.isJSXEmptyExpression()||o.isNullLiteral())continue;if(o.isJSXFragment()){let i=_t(o);n||=i.unsupported,t.push(...i.members);continue}if(o.isJSXElement()){let i=Tn(o)?_t(o):null;n||=i?.unsupported??!1,t.push({...ds(o,i?.members),sourceRange:Ze(r.node.loc),parentSourceRange:Ze(e.node.loc)});continue}if(o.isJSXSpreadChild()){n=!0;continue}t.push({memberKey:fs(o.node.type,o.node.start,o.node.end),kind:"atomic-expression",nodeType:o.node.type,sourceRange:Ze(r.node.loc),businessMemberCount:1,parentSourceRange:Ze(e.node.loc),children:[],isBusinessMember:!0,label:"atomic-expression"});continue}if(r.isJSXFragment()||r.isJSXElement()&&Jl(r)){let o=_t(r);n||=o.unsupported,t.push(...o.members);continue}if(r.isJSXElement()){let o=Tn(r)?_t(r):null;n||=o?.unsupported??!1,t.push({...ds(r,o?.members),parentSourceRange:Ze(e.node.loc)})}}return{members:t,unsupported:n}}function ds(e,t){let n=e.isJSXElement()&&Tn(e)?t??_t(e).members:[],r=e.isJSXElement()&&!Tn(e)&&!Jl(e);return{memberKey:fs(e.node.type,e.node.start,e.node.end),kind:"jsx-element",nodeType:e.node.type,sourceRange:Ze(e.node.loc),businessMemberCount:r?1:Xl(n),parentSourceRange:Ze(e.parentPath?.node.loc),children:n,isBusinessMember:r,label:uy(e)}}function Jl(e){if(e.isJSXFragment())return!0;let t=e.node.openingElement.name;return t.type==="JSXIdentifier"&&t.name==="Fragment"||t.type==="JSXMemberExpression"&&t.object.type==="JSXIdentifier"&&t.object.name==="React"&&t.property.name==="Fragment"}function Tn(e){let t=e.node.openingElement.name;return t.type==="JSXIdentifier"&&t.name!=="Fragment"&&t.name[0]===t.name[0]?.toLowerCase()}function uy(e){if(e.isJSXFragment())return"Fragment";let t=e.node.openingElement.name;if(t.type==="JSXIdentifier")return t.name;if(t.type==="JSXMemberExpression"){let n=t.object;return`${n.type==="JSXIdentifier"?n.name:"member"}.${t.property.name}`}return t.name.name}function Xl(e){return e.reduce((t,n)=>t+n.businessMemberCount,0)}function Eo(e){return e.length===0?0:Math.max(1,Xl(e))}function cs(e){let t=Ze(e.containerPath.node.loc),n=Wl(e.source,e.containerPath.node.start,e.containerPath.node.end),r=ze(e.input,e.containerKind,e.sourceKind,t),o=ze(e.input,e.containerKind,"placement-unit",t);return{placementKey:r,placementUnitKey:o,version:e.input.version,containerKey:r,independent:Eo(e.members)<=1,memberCount:Eo(e.members),sourceRange:t,sourceHash:n,relation:"append",containerSourceRange:t,containerSourceHash:n,anchorSourceRange:null,anchorSourceHash:null,members:e.members}}function dy(e){let t=Ze(e.expression.node.loc),n=Wl(e.source,e.expression.node.start,e.expression.node.end),r=ze(e.input,"virtual-route-root","atomic-expression",t),o=ze(e.input,"virtual-route-root","placement-unit",t);return{placementKey:r,placementUnitKey:o,version:e.input.version,containerKey:r,independent:!0,memberCount:1,sourceRange:t,sourceHash:n,relation:"append",containerSourceRange:t,containerSourceHash:n,anchorSourceRange:null,anchorSourceHash:null,members:[{memberKey:ze(e.input,"virtual-route-root","atomic-member",t),kind:"atomic-expression",nodeType:e.expression.node.type,sourceRange:t,businessMemberCount:1,parentSourceRange:null,children:[],isBusinessMember:!0,label:e.expression.node.type}]}}function So(e,t,n,r){let o=n.containerSourceRange??n.sourceRange,i=fy(e,n,o),s=Ui(i),a={status:"supported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,defaultExportName:Hl(t),container:{kind:r.kind,placementKey:n.placementKey,placementUnitKey:n.placementUnitKey,version:e.version,isEmptyPage:n.memberCount===0,sourceKind:r.sourceKind,sourceRange:o,sourceHash:n.sourceHash},placements:i,diagnostics:[],placementByKey:new Map,unitByKey:new Map,placementsByUnitKey:new Map,placementUnitByKey:new Map};return Object.defineProperties(a,{placementByKey:{value:s.placementByKey,enumerable:!1},unitByKey:{value:s.unitByKey,enumerable:!1},placementsByUnitKey:{value:s.placementsByUnitKey,enumerable:!1},placementUnitByKey:{value:s.sourcePlacementByUnitKey,enumerable:!1}}),{ok:!0,projection:a}}function fy(e,t,n){if(t.members.length===0)return[t];let r=[],o=(l,u,d,p,m,g,S=n)=>({...t,placementKey:u,placementUnitKey:d,containerKey:t.placementKey,independent:Eo(g)<=1,memberCount:Eo(g),sourceRange:p,sourceHash:p?ls(e.source,p):null,relation:l,containerSourceRange:S,containerSourceHash:S?ls(e.source,S):null,anchorSourceRange:m,anchorSourceHash:m?ls(e.source,m):null,members:g}),i=t.placementKey,s=t.members.map(l=>ze(e,i,"placement-unit",l.sourceRange)),a=s[0]??t.placementUnitKey,c=s.at(-1)??t.placementUnitKey;r.push(o("prepend",ze(e,i,"prepend",n),a,n,null,[]));for(let l of t.members){let u=l.parentSourceRange??n,d=ze(e,i,"placement-unit",l.sourceRange);r.push(o("before",ze(e,d,"before",l.sourceRange),d,l.sourceRange,l.sourceRange,[l],u)),r.push(o("after",ze(e,d,"after",l.sourceRange),d,l.sourceRange,l.sourceRange,[l],u))}return r.push(o("append",i,c,n,null,[])),r}function $l(e,t,n){let r=ze(e,n,"empty-container",void 0),o=ze(e,n,"empty-unit",void 0),i={placementKey:r,placementUnitKey:o,version:e.version,containerKey:r,independent:!0,memberCount:0,sourceRange:null,sourceHash:null,relation:"append",containerSourceRange:null,containerSourceHash:null,anchorSourceRange:null,anchorSourceHash:null,members:[]},s=Ui([i]),a={status:"supported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,defaultExportName:Hl(t),container:{kind:n,placementKey:r,placementUnitKey:o,version:e.version,isEmptyPage:!0,sourceKind:n==="starter-placeholder"?"starter-placeholder":"jsx-fragment",sourceRange:null,sourceHash:null},placements:[i],diagnostics:[],placementByKey:new Map,unitByKey:new Map,placementsByUnitKey:new Map,placementUnitByKey:new Map};return Object.defineProperties(a,{placementByKey:{value:s.placementByKey,enumerable:!1},unitByKey:{value:s.unitByKey,enumerable:!1},placementsByUnitKey:{value:s.placementsByUnitKey,enumerable:!1},placementUnitByKey:{value:s.sourcePlacementByUnitKey,enumerable:!1}}),{ok:!0,projection:a}}function lt(e,t){return{ok:!1,projection:{status:"unsupported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,diagnostics:t}}}function Oe(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,details:n}}function ze(e,t,n,r){return zl([e.route,e.entryFile,String(e.version),t,n,r?`${r.startLine}:${r.startColumn}-${r.endLine}:${r.endColumn}`:"no-range"])}function fs(e,t,n){return zl(["member",e,String(t??-1),String(n??-1)])}function zl(e){return`pc_${ps("sha256").update(e.join("\0")).digest("hex").slice(0,24)}`}function Wl(e,t,n){return t==null||n==null?null:`sha256:${ps("sha256").update(e.slice(t,n)).digest("hex")}`}function ls(e,t){let n=[0];for(let i=0;i<e.length;i+=1)e.charCodeAt(i)===10&&n.push(i+1);let r=n[t.startLine-1],o=n[t.endLine-1];return r===void 0||o===void 0?null:`sha256:${ps("sha256").update(e.slice(r+t.startColumn,o+t.endColumn)).digest("hex")}`}function Ze(e){return e?{startLine:e.start.line,startColumn:e.start.column,endLine:e.end.line,endColumn:e.end.column}:null}function Hl(e){if(e.isFunctionDeclaration())return e.node.id?.name??null;let t=e.parentPath;return t?.isVariableDeclarator()&&t.node.id.type==="Identifier"?t.node.id.name:null}function my(e){return e==="api-field"||e==="cms-field"||e==="i18n-message"||e==="config-entry"}var gy=160;function Gl(e,t,n,r={}){let o=bn(e),i=[];for(let[s,a]of e.elements){let c=n.get(s),l={canUpdateText:r.canUpdateTextByKey?.get(s)??c?.canUpdateText??!1,canInsertChild:c?.canInsertChild??!1,canMove:c?.canMove??!1,canRemove:c?.canRemove??!1};i.push({key:s,tag:a.tag,label:a.tag===a.componentName?a.tag:`${a.tag} (${a.componentName})`,parentKey:a.parentKey,childKeys:[...a.childKeys],operationSummary:l,...r.dynamicDataSummaryByKey?.get(s)?{dynamicDataSummary:r.dynamicDataSummaryByKey.get(s)}:{}})}return{composition:o,routeId:e.routeId,version:e.version,rootKeys:[...e.rootKeys],entries:i}}function Yl(e,t,n,r,o,i,s,a,c,l,u,d,p){let m=bn(t),g=t.elements.get(e),S=n.nodes.get(e),C=r.get(e);if(!g||!S||!C)throw new Error(`Node not found: ${e}`);let v=tu(g.textSegments,s),P=nu(e,t,g,C,v),w=v?xy(v):void 0,B=Sy(i,v),re=g.textSegments.map(F=>({index:F.index,value:F.value,editable:ru(F,C,s?.get(F.index)??null),source:o.get(F.index)??null})),ee=ql(g,t),N=g.childKeys.map(F=>{let L=t.elements.get(F);return L?{key:F,tag:L.tag,label:L.tag}:null}).filter(F=>F!==null),J=[];if(g.parentKey){let F=t.elements.get(g.parentKey);if(F)for(let L of F.childKeys){if(L===e)continue;let G=t.elements.get(L);G&&J.push({key:L,tag:G.tag,label:G.tag})}}return{composition:m,key:e,tag:g.tag,componentName:g.componentName,sourceFile:g.sourceFile,sourceLocator:Ql(g),label:g.tag,capabilities:P,writeTarget:i,effectiveWriteTarget:B,provenanceChain:w,componentSemantic:c,contentModel:l,mediaModel:u,styleSource:d,conditional:a,...p?{dynamicData:p}:{},textSegments:re,boundaryKind:g.boundaryKind,isOpaque:g.isOpaque,ancestors:ee,children:N,siblings:J}}function Zl(e,t,n,r,o,i,s){let a=bn(t),c=t.elements.get(e),l=n.nodes.get(e),u=r.get(e);if(!c||!l||!u)throw new Error(`Node not found: ${e}`);let d=tu(c.textSegments,i);return{composition:a,key:e,tag:c.tag,componentName:c.componentName,sourceFile:c.sourceFile,sourceLocator:Ql(c),label:c.tag,capabilities:nu(e,t,c,u,d),provenanceChain:d?{editMode:d.editMode,diagnostics:d.diagnostics.map(p=>({code:p.code,message:p.message}))}:void 0,...s?{dynamicData:s}:{},textSegments:c.textSegments.map(p=>{let m=o.get(p.index);return{index:p.index,editable:ru(p,u,i?.get(p.index)??null),source:m?{kind:m.kind}:null}}),boundaryKind:c.boundaryKind,isOpaque:c.isOpaque,ancestors:ql(c,t)}}function Ql(e){return{sourceFile:e.sourceFile,componentName:e.componentName,openingElementRange:hy(e.sourceRange),structuralPath:e.identity.structuralPath,...yy(e.textSegments)}}function ql(e,t){let n=[],r=e.parentKey;for(;r;){let o=t.elements.get(r);if(!o)break;n.push({key:r,tag:o.tag,label:o.tag}),r=o.parentKey}return n.reverse(),n}function hy(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}function yy(e){let t=e.map(n=>n.value.trim()).filter(Boolean).join(" ").replace(/\s+/g," ").trim();return t?{textPreview:t.slice(0,gy)}:{}}function eu(e,t){let n=t.find(r=>r.editable&&r.source&&r.source.kind!=="literal");return n?.source?{kind:"value-binding",file:n.source.file,componentName:e.componentName,isProxy:n.source.file!==e.file}:{kind:"jsx-node",file:e.file,componentName:e.componentName,isProxy:e.isProxy}}function tu(e,t){if(!t)return null;for(let n of e){let r=t.get(n.index);if(r)return r}return null}function nu(e,t,n,r,o){let i=n.identity.structuralPath.includes("#repeat:"),s=t.regions.some(u=>u.kind==="repeat-region"&&u.childKeys.includes(e)),a=o?.diagnostics.find(u=>u.code==="missing-adapter"||u.code==="external-source-readonly")?.code,c=r.canUpdateText?{mode:o?.editMode??"direct",reasonCode:a??(o?.editMode==="upstream"?"component-prop":o?.finalSource?.kind==="repeat-template"?"repeat-item-data":void 0)}:{mode:"unsupported",reasonCode:"capability-denied"},l=r.canUpdateText&&ou(c.mode);return{...r,canUpdateText:l,editModes:{updateText:c,insertChild:r.canInsertChild?{mode:"direct",reasonCode:i||s?"repeat-template":void 0}:{mode:"unsupported",reasonCode:"capability-denied"},move:r.canMove?{mode:s?"proxy":"direct",reasonCode:s?"repeat-collection":void 0}:{mode:"unsupported",reasonCode:"capability-denied"},remove:r.canRemove?{mode:s?"proxy":"direct",reasonCode:s?"repeat-collection":void 0}:{mode:"unsupported",reasonCode:"capability-denied"}}}}function ru(e,t,n){return!e.editable||!t.canUpdateText?!1:n?ou(n.editMode):!0}function ou(e){return e==="direct"||e==="proxy"||e==="upstream"}function xy(e){return{finalSource:e.finalSource?{kind:e.finalSource.kind,file:e.finalSource.file,displayPath:e.finalSource.displayPath,externalSource:e.finalSource.externalSource}:null,chain:e.chain.map(t=>({kind:t.kind,file:t.file,displayName:t.displayName,canEditHere:t.canEditHere})),confidence:e.confidence,editMode:e.editMode,diagnostics:e.diagnostics.map(t=>({code:t.code,message:t.message}))}}function Sy(e,t){return t?.finalSource?t.finalSource.kind==="jsx-literal"?{kind:"jsx-node",file:e.file,isProxy:e.isProxy}:t.finalSource.kind==="config-entry"&&t.finalSource.locator?{kind:"value-path",file:t.finalSource.file,isProxy:t.finalSource.file!==e.file,displayPath:t.finalSource.displayPath}:my(t.finalSource.kind)?{kind:"external-entry",file:t.finalSource.file,isProxy:!1,displayPath:t.finalSource.displayPath,sourceType:t.finalSource.externalSource?.sourceType,sourceId:t.finalSource.externalSource?.sourceId}:{kind:"value-path",file:t.finalSource.file,isProxy:t.finalSource.file!==e.file,displayPath:t.finalSource.displayPath}:{kind:e.kind==="route-export"?"route-export":"jsx-node",file:e.file,isProxy:e.isProxy}}function iu(e){let{key:t,element:n,graph:r,provenances:o}=e,i=Ey(t,n,r),s=i?.tag??(Yt(n.tag)?n.tag:n.componentName),a=i?.identity.key??su(n,r)??t,c=ky(i),l=Cy(t,n,r,o,i),u=by(t,n,r,o,a);return{componentName:s,instanceKey:a,templateOwner:vy(i??n,s),...c.length>0?{variantKeys:c}:{},...l.length>0?{slotKeys:l}:{},editableStrategy:u,impactScope:Ry(u),alternativeStrategies:wy(u)}}function by(e,t,n,r,o){for(let i of r.values())if(i?.editMode==="upstream")return"upstream";return ms(e,n)?"instance":!Yt(t.tag)&&t.sourceFile!==n.routeId&&o!==e?"template":"instance"}function su(e,t){if(Yt(e.tag))return e.identity.key;let n=[...t.elements.values()].filter(r=>r.importedFrom===e.sourceFile&&Iy(r,e.componentName));return n.length!==1?null:n[0].identity.key}function Ey(e,t,n){if(Yt(t.tag))return t;let r=ms(e,n);if(r)return r;let o=su(t,n);return o?n.elements.get(o)??null:null}function Iy(e,t){return e.exportName===t||e.tag===t||e.exportName==="default"}function vy(e,t){return Yt(e.tag)&&e.importedFrom?`${e.importedFrom}#${t}`:`${e.sourceFile}#${t}`}function ky(e){if(!e?.attributes)return[];let t=new Set(["variant","size","tone"]);return e.attributes.filter(n=>t.has(n.name)).map(n=>n.name)}function Cy(e,t,n,r,o){let i=new Set,s=ms(e,n);s&&o?.identity.key===s.identity.key&&i.add("children");for(let a of r.values()){let c=a?.chain.find(u=>u.kind==="component-prop");if(!c)continue;let l=c.displayName.split(".").pop();l&&i.add(l)}return i.size===0&&Yt(t.tag)&&t.childKeys.length>0&&i.add("children"),[...i]}function ms(e,t){let n=t.elements.get(e)?.parentKey??null;for(;n;){let r=t.elements.get(n);if(!r)break;if(Yt(r.tag))return r;n=r.parentKey}return null}function Yt(e){return/^[A-Z]/.test(e)}function Ry(e){switch(e){case"template":return"component-template";case"upstream":return"upstream-source";default:return"current-instance"}}function wy(e){switch(e){case"template":return["instance"];case"upstream":return["template"];default:return["template"]}}var Ny=new Set(["markdown","body","content","value","document"]),au=[];function lu(e){if(!(!Ty(e.tag)||!e.attributes))for(let t of e.attributes){if(!Ny.has(t.name))continue;if(Ay(t))return{kind:"markdown",field:t.name,schema:"markdown",valuePath:t.source?.expression,operationBoundary:au};let n=Py(t.resolvedValue);if(n==="prosemirror-doc"||n==="node-array")return{kind:"rich-text-json",field:t.name,valuePath:t.source?.expression,schema:n,operationBoundary:au};if(n==="unsupported-json-tree")return{kind:"rich-text-json",field:t.name,valuePath:t.source?.expression,schema:"unsupported-json-tree",operationBoundary:[],diagnostics:[{code:"unsupported-schema",field:t.name,message:'Only top-level node arrays and { type: "doc", content: [] } rich-text JSON are editable in stage D'}]}}}function Py(e){if(e){if(Array.isArray(e)&&e.every(t=>cu(t)))return"node-array";if(cu(e)){if(e.type==="doc"&&Array.isArray(e.content))return"prosemirror-doc";if(Array.isArray(e.content)||Array.isArray(e.children))return"unsupported-json-tree"}}}function cu(e){return!Array.isArray(e)&&typeof e=="object"&&e!==null}function Ay(e){return e.name==="markdown"}function Ty(e){return/^[A-Z]/.test(e)}var _y=["src","alt","poster","caption","width","height"];function uu(e){let t=e.attributes?.filter(i=>_y.includes(i.name))??[];if(t.length===0)return;let n=t.map(i=>i.name),r=Object.fromEntries(t.filter(i=>i.source?.expression).map(i=>[i.name,i.source.expression])),o=My(t.map(i=>i.value));return{kind:Fy(e.tag,n),sourceType:o,fields:n,editableFields:[],operationBoundary:[],...Object.keys(r).length>0?{valuePaths:r}:{}}}function Fy(e,t){return e==="img"?"image":e==="video"||t.includes("poster")?"video":"media"}function My(e){return e.some(t=>t.startsWith("cms:"))?"cms-media-field":e.some(t=>/^(\.?\/|\/)/.test(t))?"local-file-reference":"asset-id"}var gs=["set-class-name-source","apply-style-draft"];function du(e){let t=e.attributes?.find(n=>n.name==="className");if(!t)return{kind:"class-name-source",className:"",sourceKind:"missing",editable:!0,operationBoundary:gs,diagnostics:[{code:"missing-class-name",message:"No className attribute is present on this element"}]};if(t.source?.expression){let n=t.source.expression,r=typeof t.resolvedValue=="string"?t.resolvedValue:t.value!==n?t.value:void 0;return typeof r!="string"?{kind:"class-name-source",className:"",sourceKind:"dynamic-expression",editable:!1,operationBoundary:[],sourcePath:n,diagnostics:[{code:t.resolvedValue===void 0?"dynamic-binding":"non-string-binding",message:t.resolvedValue===void 0?"Style binding is dynamic and cannot be edited":"Style binding must resolve to a static string before it can be edited"}]}:{kind:"class-name-source",className:r,sourceKind:"static-expression",editable:!0,operationBoundary:gs,sourcePath:n}}return{kind:"class-name-source",className:t.value,sourceKind:t.resolvedValue===void 0?"static-attribute":"static-expression",editable:!0,operationBoundary:gs}}import{createHash as Oy}from"node:crypto";var er=class{constructor(t){this.original=new Map,this.files=new Map,this.versions=new Map;for(let n of t)this.original.set(n.path,n.content),this.files.set(n.path,n.content),this.versions.set(n.path,n.version??1)}async readFile(t){let n=this.files.get(t);if(n===void 0)throw new Error(`Snapshot file not found: ${t}`);return n}async readFileBytes(t){return Buffer.from(await this.readFile(t),"utf8")}async getFileInfo(t){let n=this.files.get(t);return n===void 0?null:{path:t,sizeBytes:Buffer.byteLength(n,"utf8")}}async writeFile(t,n){this.files.set(t,n)}async createExclusive(t,n){if(this.files.has(t))throw Object.assign(new Error(`Snapshot file already exists: ${t}`),{code:"EEXIST"});this.files.set(t,n)}async deleteFile(t){this.files.delete(t)}async exists(t){return this.files.has(t)}async listFiles(t={}){let n=t.roots??[],r=[...this.files.keys()].filter(a=>n.length===0?!0:n.some(c=>a===c||a.startsWith(`${c}/`))),o=[],i=new Set,s=0;for(let a of r.sort()){let c=Buffer.byteLength(this.files.get(a)??"","utf8"),l=a.split("/").length;if(t.maxDepth!==void 0&&l>t.maxDepth){i.add("max-depth");continue}if(t.maxFiles!==void 0&&o.length>=t.maxFiles){i.add("max-files");break}if(t.maxTotalBytes!==void 0&&s+c>t.maxTotalBytes){i.add("max-total-bytes");break}o.push({path:a,sizeBytes:c}),s+=c}return i.size>0?{files:o,truncated:{reasons:[...i]}}:{files:o}}getVersion(t){return this.versions.get(t)??0}bumpVersion(t){let n=this.getVersion(t)+1;return this.versions.set(t,n),n}getChangedFiles(){let t=new Set([...this.original.keys(),...this.files.keys()]),n=[];for(let r of[...t].sort()){let o=this.original.get(r),i=this.files.get(r);o!==i&&n.push({path:r,before:o,after:i})}return n}};function le(e){return`sha256:${Oy("sha256").update(e).digest("hex")}`}function mu(e){let t=e.route.graph.elements.get(e.key);if(!t)return{key:e.key,composition:e.route.composition,filePath:"",componentName:"",sourceKind:"missing",attrRaw:null,valueRaw:null,attrRange:null,openingElementRange:{start:0,end:0},version:{documentVersion:e.route.graph.version,contentHash:le(e.route.source)},diagnostics:[{code:"source-locator-warning",message:`Key not found: ${e.key}`}]};let n=Dy(e.route.source,t);if(!n)return{key:e.key,composition:e.route.composition,filePath:t.sourceFile,componentName:t.componentName,sourceKind:"missing",attrRaw:null,valueRaw:null,attrRange:null,openingElementRange:{start:0,end:0},version:{documentVersion:e.route.graph.version,contentHash:le(e.route.source)},diagnostics:[{code:"source-locator-warning",message:`Unable to locate JSX element for key ${t.identity.key}`}]};let r=n.openingElement,o=r.attributes.find(c=>c.type==="JSXAttribute"&&c.name.type==="JSXIdentifier"&&c.name.name==="className"),i={key:e.key,composition:e.route.composition,filePath:t.sourceFile,componentName:t.componentName,openingElementRange:pu(r),version:{documentVersion:e.route.graph.version,contentHash:le(e.route.source)}};if(!o)return{...i,sourceKind:"missing",attrRaw:null,valueRaw:null,attrRange:null,diagnostics:[{code:"missing-class-name",message:"No className attribute is present on this element."}]};let s=o.value,a=s?.type==="StringLiteral"?"stringLiteral":"expression";return{...i,sourceKind:a,attrRaw:fu(e.route.source,o),valueRaw:s?fu(e.route.source,s):null,attrRange:pu(o),diagnostics:[]}}function gu(e){let{source:t,oldAttrRange:n,openingElementRange:r,newAttrRaw:o}=e;if(n){let a=n.start>0&&/\s/.test(t[n.start-1]??"")?n.start-1:n.start,c=o?`${a<n.start?" ":""}${o}`:"";return t.slice(0,a)+c+t.slice(n.end)}if(!o)return t;let i=r.end,s=t.slice(Math.max(0,i-2),i)==="/>"?i-2:i-1;return t.slice(0,s)+` ${o}`+t.slice(s)}function Dy(e,t){let n=at({source:e,profile:Xt({filePath:t.sourceFile,source:e})});if(!n.ok)return null;let r=oe(n.ast,{kind:"jsx-node",strategy:"structural-path",file:t.identity.file,component:t.identity.component,structuralPath:t.identity.structuralPath,expectedRange:Ly(t.sourceRange)});return!r.ok||r.match.node.type!=="JSXElement"?null:r.match.node}function hu(e){let t=at({source:`const __v = <div ${e} />;`,profile:"tsx-module"});if(!t.ok)return!1;let n=t.ast.program.body[0],o=(n?.type==="VariableDeclaration"?n.declarations[0]:null)?.init;if(o?.type!=="JSXElement")return!1;let i=o.openingElement.attributes;return i.length===1&&i[0]?.type==="JSXAttribute"&&i[0].name.type==="JSXIdentifier"&&i[0].name.name==="className"}function fu(e,t){return t.start==null||t.end==null?"":e.slice(t.start,t.end)}function pu(e){if(e.start==null||e.end==null)throw new Error("AST node does not include offsets.");return{start:e.start,end:e.end}}function Ly(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}import*as _s from"@babel/parser";import bs from"@babel/traverse";import*as b from"@babel/types";import*as St from"node:path";import*as Eu from"@babel/parser";import xs from"@babel/traverse";import*as _n from"@babel/types";import*as H from"@babel/types";function ko(e,t=[]){if(e.isIdentifier()){let n=e.scope.getBinding(e.node.name);return n?Io(n,t):null}if(e.isMemberExpression()){let n=Ky(e.node),r=By(e.node);if(!n||r===null)return null;let o=e.scope.getBinding(n);return o?Io(o,[...r,...t]):null}return e.isAwaitExpression()||ys(e.node)?Ft(Xy(e.node),t,"awaited or fetched expression"):null}function By(e){let t=[],n=e;for(;H.isMemberExpression(n);){if(n.computed)if(H.isNumericLiteral(n.property))t.unshift({kind:"index",index:n.property.value});else if(H.isStringLiteral(n.property))t.unshift({kind:"property",name:n.property.value});else return null;else if(H.isIdentifier(n.property))t.unshift({kind:"property",name:n.property.name});else return null;n=n.object}return H.isIdentifier(n)?t:null}function Io(e,t=[]){let n=jy(e,t);if(n)return n;let r=$y(e,t);if(r)return r;let o=Vy(e,t);return o||null}function nr(e){return e?.kind==="api-source"}function jy(e,t){if(e.path.isVariableDeclarator()&&H.isIdentifier(e.path.node.id)){let s=e.path.get("init");if(s?.isCallExpression()&&hs(s.node)&&t[0]?.kind==="property"&&t[0].name==="data")return Ft(e.identifier.name,t,"query hook result.data binding")}if(e.path.isVariableDeclarator()&&H.isObjectPattern(e.path.node.id)){let s=e.path.node.id.properties.find(c=>H.isObjectProperty(c)&&Su(c)==="data"&&tr(c.value,e.identifier.name)),a=e.path.get("init");if(s&&a?.isCallExpression()&&hs(a.node))return Ft(e.identifier.name,t,"query hook data binding")}let n=Uy(e);if(!n||Su(n.node)!=="data")return null;let o=n.findParent(s=>s.isVariableDeclarator());if(!o?.isVariableDeclarator())return null;let i=o.get("init");return!i?.isCallExpression()||!hs(i.node)?null:Ft(e.identifier.name,t,"query hook data binding")}function $y(e,t){if(e.path.isVariableDeclarator()&&H.isArrayPattern(e.path.node.id)){let a=e.path.get("init");if(!a?.isCallExpression()||!xu(a.node))return null;let[c,l]=e.path.node.id.elements;return!H.isIdentifier(c)||c.name!==e.identifier.name||!H.isIdentifier(l)?null:yu(e,l.name)?Ft(e.identifier.name,t,"state setter is updated by API data"):null}if(!e.path.isIdentifier())return null;let n=e.path.parentPath;if(!n?.isArrayPattern())return null;let r=n.parentPath;if(!r?.isVariableDeclarator())return null;let o=r.get("init");if(!o?.isCallExpression()||!xu(o.node)||n.node.elements.findIndex(a=>a===e.path.node)!==0)return null;let s=n.node.elements[1];return H.isIdentifier(s)&&yu(e,s.name)?Ft(e.identifier.name,t,"state setter is updated by API data"):null}function Vy(e,t){let n=e.path.isVariableDeclarator()?e.path:e.path.findParent(o=>o.isVariableDeclarator());if(!n?.isVariableDeclarator())return null;let r=n.get("init");return r?.isExpression()?r.isAwaitExpression()?Ft(e.identifier.name,t,"awaited binding result"):ys(r.node)?Ft(e.identifier.name,t,"fetch-backed binding result"):null:null}function Uy(e){if(!e.path.isIdentifier())return null;let t=e.path.parentPath;return t?.isObjectProperty()?t:t?.isAssignmentPattern()&&t.parentPath?.isObjectProperty()?t.parentPath:null}function tr(e,t){return H.isIdentifier(e)?e.name===t:H.isAssignmentPattern(e)?tr(e.left,t):H.isObjectPattern(e)?e.properties.some(n=>H.isObjectProperty(n)?tr(n.value,t):tr(n.argument,t)):H.isArrayPattern(e)?e.elements.some(n=>!!n&&tr(H.isRestElement(n)?n.argument:n,t)):!1}function yu(e,t){let n=!1,r=!1;return e.scope.path.traverse({CallExpression(i){ys(i.node)&&(n=!0),(Jy(i.node.callee,t)||i.node.arguments.some(s=>H.isIdentifier(s)&&s.name===t))&&(r=!0)}}),n&&r}function hs(e){let t=Co(e.callee);return t==="useQuery"||t==="useSWR"||t==="useSuspenseQuery"}function xu(e){return Co(e.callee)==="useState"}function ys(e){return vo(e,t=>H.isCallExpression(t)&&Co(t.callee)==="fetch")}function Ky(e){let t=e;for(;H.isMemberExpression(t);)t=t.object;return H.isIdentifier(t)?t.name:null}function Su(e){return e.computed?null:H.isIdentifier(e.key)?e.key.name:H.isStringLiteral(e.key)?e.key.value:null}function Co(e){return H.isIdentifier(e)?e.name:H.isMemberExpression(e)&&H.isIdentifier(e.property)?e.property.name:null}function Jy(e,t){return vo(e,n=>H.isIdentifier(n)&&n.name===t)}function vo(e,t){if(t(e))return!0;let n=H.VISITOR_KEYS[e.type];if(!n)return!1;for(let r of n){let o=e[r];if(Array.isArray(o)){for(let i of o)if(H.isNode(i)&&vo(i,t))return!0;continue}if(H.isNode(o)&&vo(o,t))return!0}return!1}function Xy(e){return H.isIdentifier(e)?e.name:H.isCallExpression(e)?Co(e.callee)??"api":H.isAwaitExpression(e)?"awaited-api":"api"}function Ft(e,t,n){return{kind:"api-source",readonly:!0,sourceId:e,displayPath:zy(e,t),reason:n}}function zy(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}var Iu=typeof xs=="function"?xs:xs.default;function vu(e,t){let n=Cu(e);if(!n)return{allowed:!0};let r=!1;return Iu(n,{CallExpression(o){if(!Ru(o.node,t.sourceRange)||!Wy(o.node))return;let i=o.get("callee");if(!i.isMemberExpression())return;let s=i.get("object");Array.isArray(s)||!s.isExpression()||nr(ko(s))&&(r=!0,o.stop())}}),r?{allowed:!1,reason:"Cannot add data-backed items to a dynamic API list"}:{allowed:!0}}function ku(e,t){let n=Cu(e);if(!n)return{allowed:!0};let r=!1;return Iu(n,{JSXExpressionContainer(o){Ru(o.node,t.sourceRange)&&(_n.isJSXEmptyExpression(o.node.expression)||(r=!0,o.stop()))}}),r?{allowed:!1,reason:"Cannot move subtree across files because it depends on local binding expressions"}:{allowed:!0}}function Cu(e){try{return Eu.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Wy(e){let t=e.callee;return _n.isMemberExpression(t)&&_n.isIdentifier(t.property)&&t.property.name==="map"}function Ru(e,t){let n=e.loc;return n?bu({line:n.start.line,column:n.start.column},{line:t.startLine,column:t.startColumn})>=0&&bu({line:n.end.line,column:n.end.column},{line:t.endLine,column:t.endColumn})<=0:!1}function bu(e,t){return e.line!==t.line?e.line<t.line?-1:1:e.column!==t.column?e.column<t.column?-1:1:0}import*as se from"@babel/types";function wu(e){if(e.path.isVariableDeclarator()){let n=e.path.get("init");return n?.isExpression()?{expressionPath:n}:null}if(!e.path.isIdentifier()||!e.path.parentPath?.isVariableDeclarator())return null;let t=e.path.parentPath.get("init");return t?.isExpression()?{expressionPath:t}:null}function ut(e){if(e.path.isObjectPattern()||e.path.isArrayPattern())return Zt(e.path.node,e.identifier.name);if(e.path.isVariableDeclarator()){let n=e.path.node.id;if(se.isObjectPattern(n)||se.isArrayPattern(n))return Zt(n,e.identifier.name)}if(!e.path.isIdentifier())return!1;let t=e.path.parentPath;for(;t;){if(t.isAssignmentPattern()){let n=t.get("left");if(Gy(e.path,n))return!0}if(t.isFunction()||t.isVariableDeclarator())return!1;t=t.parentPath}return!1}function Zt(e,t,n=!1){return se.isIdentifier(e)?e.name===t&&n:se.isObjectPattern(e)?e.properties.some(r=>se.isObjectProperty(r)?Zt(r.value,t,n):Zt(r.argument,t,n)):se.isArrayPattern(e)?e.elements.some(r=>{if(!r)return!1;let o=se.isRestElement(r)?r.argument:r;return Zt(o,t,n)}):se.isAssignmentPattern(e)?Zt(e.left,t,!0):se.isRestElement(e)?Zt(e.argument,t,n):!1}function Fn(e,t){if(e.path.isObjectPattern()){if(t){let r=Qe(e.path.node,t.base),[o,...i]=r??[];if(o?.kind==="property")return{propName:o.name,remainingPath:[...i,...t.path],hasDefault:ut(e)}}return t?{propName:t.base,remainingPath:t.path,hasDefault:ut(e)}:null}if(e.path.isVariableDeclarator()){let r=e.path.get("init");if(r?.isExpression()){let o=Nu(r),i=!1,s=o?o.initBinding&&Ss(o.initBinding)?(i=ut(o.initBinding),[...o.initPathPrefix]):o.initBinding?(()=>{let c=Fn(o.initBinding,{kind:"identifier",expression:o.initBinding.identifier.name,base:o.initBinding.identifier.name,path:[]});return i=c?.hasDefault??!1,c?[{kind:"property",name:c.propName},...c.remainingPath,...o.initPathPrefix]:null})():null:null,a=Qe(e.path.node.id,e.identifier.name);if(s&&a){let c=[...s,...a],[l,...u]=c;return!l||l.kind!=="property"?null:{propName:l.name,remainingPath:[...u,...t?.path??[]],hasDefault:i||ut(e)}}}}let n=Qy(e);if(n){let r=Hy(n,e);if(r){let[s,...a]=r.path;return!s||s.kind!=="property"?null:{propName:s.name,remainingPath:[...a,...t?.path??[]],hasDefault:r.hasDefault||ut(e)}}if(n.findParent(s=>s.isVariableDeclarator()))return null;let o=Yy(e);if(o){let[s,...a]=o;return!s||s.kind!=="property"?null:{propName:s.name,remainingPath:[...a,...t?.path??[]],hasDefault:ut(e)}}let i=rr(n.node);return i?{propName:i,remainingPath:t?.path??[],hasDefault:ut(e)}:null}if(Ss(e)){let[r,...o]=t?.path??[];return!r||r.kind!=="property"?null:{propName:r.name,remainingPath:o,hasDefault:ut(e)}}return null}function Hy(e,t){let n=e.findParent(u=>u.isVariableDeclarator());if(!n?.isVariableDeclarator())return null;let r=n.get("init");if(!r?.isExpression())return null;let o=Nu(r);if(!o)return null;let{initBinding:i,initPathPrefix:s}=o;if(!i)return null;let a=!1,c=Ss(i)?(a=ut(i),[...s]):(()=>{let u=Fn(i,{kind:"identifier",expression:i.identifier.name,base:i.identifier.name,path:[]});return a=u?.hasDefault??!1,u?[{kind:"property",name:u.propName},...u.remainingPath,...s]:null})();if(!c)return null;let l=Qe(n.node.id,t.identifier.name);return l?{path:[...c,...l],hasDefault:a||ut(t)}:null}function Nu(e){if(e.isIdentifier())return{initBinding:e.scope.getBinding(e.node.name),initPathPrefix:[]};if(!e.isMemberExpression())return null;let t=qy(e.node);return t?{initBinding:e.scope.getBinding(t.base),initPathPrefix:t.path}:null}function Ss(e){return e.path.isIdentifier()&&e.path.key===0&&Array.isArray(e.path.container)&&e.path.parentPath?.isFunction()===!0}function Gy(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentPath}return!1}function Yy(e){let t=e.identifier.name,n=e.path.getFunctionParent();if(!n)return null;let r=n.get("params"),o=Array.isArray(r)?r:[r];for(let i of o){let a=Qe(i.node,t);if(a)return a}return null}function Pu(e,t,n){if(e.path.isVariableDeclarator()){let a=e.path.get("id");if(!Array.isArray(a)&&(a.isObjectPattern()||a.isArrayPattern())){let c=Ro(a,e.identifier.name);if(c&&(!n||c.propName===n))return{propName:c.propName,componentName:t,expressionPath:c.expressionPath,displayPath:`${t}.${c.propName}.default`}}}if(e.path.isObjectPattern())for(let a of e.path.get("properties")){if(!a.isObjectProperty())continue;let c=rr(a.node);if(!c||n&&c!==n)continue;let l=a.get("value");if(!l.isAssignmentPattern())continue;let u=l.get("right");if(u.isExpression())return{propName:c,componentName:t,expressionPath:u,displayPath:`${t}.${c}.default`}}let r=Zy(e);if(!r)return null;let o=r.parentPath;if(!o?.isObjectProperty())return null;let i=rr(o.node);if(!i||n&&i!==n)return null;let s=r.get("right");return s.isExpression()?{propName:i,componentName:t,expressionPath:s,displayPath:`${t}.${i}.default`}:null}function Ro(e,t){if(e.isObjectPattern()){for(let n of e.get("properties"))if(n.isObjectProperty()){let r=rr(n.node),o=n.get("value");if(o.isAssignmentPattern()){let i=o.get("left"),s=o.get("right");if(r&&!Array.isArray(i)&&Qe(i.node,t)&&!Array.isArray(s)&&s.isExpression())return{propName:r,expressionPath:s}}if(!Array.isArray(o)&&(o.isObjectPattern()||o.isArrayPattern())){let i=Ro(o,t);if(i)return i}}else if(n.isRestElement()){let r=n.get("argument");if(!Array.isArray(r)&&(r.isObjectPattern()||r.isArrayPattern())){let o=Ro(r,t);if(o)return o}}}if(e.isArrayPattern())for(let n of e.get("elements")){if(!n)continue;let r=n.isRestElement()&&!Array.isArray(n.get("argument"))?n.get("argument"):n;if(!Array.isArray(r)&&(r.isObjectPattern()||r.isArrayPattern())){let o=Ro(r,t);if(o)return o}}return null}function Qe(e,t,n=[]){if(se.isIdentifier(e))return e.name===t?n:null;if(se.isObjectPattern(e)){for(let r of e.properties)if(se.isObjectProperty(r)){let o=rr(r);if(!o)continue;let i=Qe(r.value,t,[...n,{kind:"property",name:o}]);if(i)return i}else if(se.isRestElement(r)){let o=Qe(r.argument,t,n);if(o)return o}}if(se.isArrayPattern(e))for(let r=0;r<e.elements.length;r+=1){let o=e.elements[r];if(!o)continue;let i=se.isRestElement(o)?o.argument:o,s=Qe(i,t,[...n,{kind:"index",index:r}]);if(s)return s}return se.isAssignmentPattern(e)?Qe(e.left,t,n):null}function Zy(e){if(!e.path.isIdentifier())return null;let t=e.path.parentPath;return t?.isAssignmentPattern()&&t.node.left===e.path.node?t:null}function Qy(e){if(!e.path.isIdentifier())return null;let t=e.path.parentPath;if(t?.isObjectProperty()&&t.parentPath?.isObjectPattern())return t;let n=t?.isAssignmentPattern()?t.parentPath:null;return n?.isObjectProperty()&&n.parentPath?.isObjectPattern()?n:null}function rr(e){return e.computed?null:se.isIdentifier(e.key)?e.key.name:se.isStringLiteral(e.key)?e.key.value:null}function qy(e){let t=[],n=e;for(;se.isMemberExpression(n);){if(n.computed)if(se.isNumericLiteral(n.property))t.unshift({kind:"index",index:n.property.value});else if(se.isStringLiteral(n.property))t.unshift({kind:"property",name:n.property.value});else return null;else if(se.isIdentifier(n.property))t.unshift({kind:"property",name:n.property.name});else return null;n=n.object}return se.isIdentifier(n)?{base:n.name,path:t}:null}var Bt=typeof bs=="function"?bs:bs.default;function fe(e){return e.structuralPath.includes("#repeat:")||e.isRepeatItemRoot||e.isRepeatRegion?{kind:"jsx-node",strategy:"source-range",sourceRange:e.sourceRange}:{kind:"jsx-node",strategy:"structural-path",file:e.file,component:e.component,structuralPath:e.structuralPath,expectedRange:e.sourceRange}}function Mn(e){return{file:e.file,component:e.component}}function ex(e){return e.target.kind==="node"?e.target.key:null}function tx(e){return"kind"in e}function wo(e){return!tx(e)}function Rs(e,t){let n=St.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=St.relative(n,r);return o=o.replace(/\\/g,"/"),o.startsWith(".")||(o=`./${o}`),o}function Es(e,t){let n=e.getFileContent(t.file);if(!n)return;let r=ht(n,fe(t));if(r.ok)return n.slice(r.match.start,r.match.end)}function Fs(e){if(!e.component)return"Component";if(e.component.exportName!=="default")return e.component.exportName;let t=e.component.source.replace(/\\/g,"/").replace(/\/$/,""),n=t.split("/").pop()||"Component",i=(n==="index"?t.split("/").slice(-2,-1)[0]||"Component":n).replace(/\.[^.]+$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean);return i.length===0?"Component":i.map(s=>s.charAt(0).toUpperCase()+s.slice(1)).join("")}function We(e){try{return _s.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function nx(e){if(e.isNumericLiteral())return!0;if(!e.isUnaryExpression({operator:"-"}))return!1;let t=e.get("argument");return!Array.isArray(t)&&t.isNumericLiteral()}function rx(e){let t=e.trim();if(!/^[+-]?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:[eE][+-]?\d+)?$/.test(t))return null;let n=Number(t);return Number.isFinite(n)?n:null}function ce(e){return typeof e.start=="number"&&typeof e.end=="number"?{start:e.start,end:e.end}:null}function en(e,t){let n=ce(e);return!!(n&&qe(t,n))}function qe(e,t){return t.start>=e.start&&t.end<=e.end}function Xu(e){if(b.isJSXIdentifier(e))return/^[A-Z]/.test(e.name)?e.name:null;if(b.isJSXMemberExpression(e)){let t=e;for(;b.isJSXMemberExpression(t);)t=t.object;return t.name}return null}function ox(e,t){let n=ce(e.node);if(!n)return[];let r=new Set,o=(i,s)=>{let a=s.scope.getBinding(i);if(!a||en(a.path.node,n))return;t.scope.getBinding(i)!==a&&r.add(i)};return e.traverse({ReferencedIdentifier(i){o(i.node.name,i)},JSXOpeningElement(i){let s=Xu(i.node.name);s&&o(s,i)}}),[...r].sort()}function Au(e,t,n){let r=We(e);if(!r)return{ok:!0};let o=oe(r,fe(t));if(!o.ok||!o.match.path.isJSXElement())return{ok:!0};let i=oe(r,fe(n));if(!i.ok||!i.match.path.isJSXElement())return{ok:!0};if(sd(o.match.path,i.match.path))return{ok:!1,bindingNames:[],reason:"Cannot move node out of its conditional branch"};let s=ox(o.match.path,i.match.path);return s.length>0?{ok:!1,bindingNames:s}:{ok:!0}}function Tu(e,t,n){let r=Mt(t,n);return r?xt(e,r):null}function Mt(e,t){let n=oe(e,fe(t));return n.ok&&n.match.path.isJSXElement()?n.match.path:Ts(e,t)}function xt(e,t){let n=t.findParent(S=>S.isArrowFunctionExpression()||S.isFunctionExpression());if(!n||!n.isArrowFunctionExpression()&&!n.isFunctionExpression())return null;let r=n,o=r.parentPath;if(!o||!o.isCallExpression()&&!o.isOptionalCallExpression())return null;let i=o;if(i.node.arguments.findIndex(S=>S===r.node)!==0)return null;let a=i.get("callee");if(!a.isMemberExpression()&&!a.isOptionalMemberExpression())return null;let c=a.node,l=c.property;if(!b.isIdentifier(l)||l.name!=="map"||c.computed)return null;let u=a.get("object"),d=To(e,u.node),p=r.node.params.map(S=>To(e,S)),m=ce(i.node),g=ce(r.node);return!d||p.some(S=>S.length===0)||!m||!g?null:{callStart:m.start,callEnd:m.end,callbackStart:g.start,callbackEnd:g.end,collectionExpression:d,callbackParams:p,mapOperator:b.isOptionalMemberExpression(c)&&c.optional?"?.map":".map",collectionNeedsParens:Ls(u.node),callbackPath:r,collectionPath:u}}function To(e,t){let n=ce(t);return n?e.slice(n.start,n.end):""}function No(e,t){return!!(e&&t&&e.callStart===t.callStart&&e.callEnd===t.callEnd&&e.callbackStart===t.callbackStart&&e.callbackEnd===t.callbackEnd)}function ix(e,t){let n=ce(e.node);return n?sx(t).some(r=>{let o=ce(r);return r===e.node||!!(o&&o.start===n.start&&o.end===n.end)}):!1}function sx(e){let t=e.callbackPath.node.body;return b.isBlockStatement(t)?Ot(t.body):Lt(t)}function Ot(e){let t=[];for(let n of e){if(b.isReturnStatement(n)){n.argument&&t.push(...Lt(n.argument));continue}if(b.isBlockStatement(n)){t.push(...Ot(n.body));continue}if(b.isIfStatement(n)){let r=b.isBlockStatement(n.consequent)?n.consequent.body:[n.consequent];if(t.push(...Ot(r)),n.alternate){let o=b.isBlockStatement(n.alternate)?n.alternate.body:[n.alternate];t.push(...Ot(o))}continue}if(b.isSwitchStatement(n)){for(let r of n.cases)t.push(...Ot(r.consequent));continue}b.isTryStatement(n)&&(t.push(...Ot(n.block.body)),n.handler&&t.push(...Ot(n.handler.body.body)),n.finalizer&&t.push(...Ot(n.finalizer.body)))}return t}function Lt(e){return b.isJSXElement(e)?ax(e)?_u(e.children):[e]:b.isJSXFragment(e)?_u(e.children):b.isParenthesizedExpression(e)||b.isTSAsExpression(e)||b.isTSSatisfiesExpression(e)||b.isTSNonNullExpression(e)||b.isTSTypeAssertion(e)?Lt(e.expression):b.isConditionalExpression(e)?[...Lt(e.consequent),...Lt(e.alternate)]:b.isLogicalExpression(e)&&cd(e.operator)?Lt(e.right):[]}function _u(e){return e.flatMap(t=>b.isJSXElement(t)||b.isJSXFragment(t)?Lt(t):b.isJSXExpressionContainer(t)&&(b.isJSXElement(t.expression)||b.isJSXFragment(t.expression)||b.isConditionalExpression(t.expression)||b.isLogicalExpression(t.expression))?Lt(t.expression):[])}function ax(e){let t=e.openingElement.name;return b.isJSXIdentifier(t)?t.name==="Fragment":b.isJSXMemberExpression(t)&&t.property.name==="Fragment"}function cx(e,t){return!!(e&&t&&e.callbackStart<t.callbackStart&&e.callbackEnd>t.callbackEnd)}function Is(e){return e==="Cannot edit repeat-backed child node structure with a generic node operation"}function Fu(e,t,n,r={}){if(!r.preserveConditionalBoundary&&sd(e,t))return{ok:!1,bindingNames:[],reason:"Cannot move node out of its conditional branch"};let o=ce(e.node);if(!o)return{ok:!0};let i=new Set(n.callbackPath.node.params.flatMap(c=>Ds(c)).map(c=>n.callbackPath.scope.getBinding(c)?.path.node).filter(Boolean)),s=new Set,a=(c,l)=>{let u=l.scope.getBinding(c);if(!u||en(u.path.node,o)||i.has(u.path.node))return;t.scope.getBinding(c)!==u&&s.add(c)};return e.traverse({ReferencedIdentifier(c){a(c.node.name,c)},JSXOpeningElement(c){let l=Xu(c.node.name);l&&a(l,c)}}),s.size>0?{ok:!1,bindingNames:[...s].sort()}:{ok:!0}}function Mu(e,t,n){let r=ce(e.node);if(!r)return{ok:!0};let o=new Set(n.callbackPath.node.params.flatMap(s=>Ds(s)).map(s=>n.callbackPath.scope.getBinding(s)?.path.node).filter(Boolean)),i=new Set;return Ms(e,s=>{let a=s.scope.getBinding(s.node.name);if(!a||en(a.path.node,r)||o.has(a.path.node))return;t.scope.getBinding(s.node.name)!==a&&i.add(s.node.name)}),i.size>0?{ok:!1,bindingNames:[...i].sort()}:{ok:!0}}function lx(e,t){let n=new Set(e.callbackPath.node.params.flatMap(a=>Ds(a)).map(a=>e.callbackPath.scope.getBinding(a)?.path.node).filter(Boolean)),r=new Set,o=(a,c)=>{let l=c.scope.getBinding(a);if(!l||n.has(l.path.node))return;t.scope.getBinding(a)!==l&&r.add(a)},i=e.callbackPath.get("params"),s=Array.isArray(i)?i:[i];for(let a of s)a.traverse({ReferencedIdentifier(c){o(c.node.name,c)},TSTypeReference(c){let l=c.node.typeName;if(b.isIdentifier(l))o(l.name,c);else{let u=ux(l);u&&o(u,c)}}});return r.size>0?{ok:!1,bindingNames:[...r].sort()}:{ok:!0}}function ux(e){let t=e;for(;b.isTSQualifiedName(t);)t=t.left;return b.isIdentifier(t)?t.name:null}function zu(e,t){let n=ce(e.node),r=new Set;return Ms(e,o=>{let i=o.scope.getBinding(o.node.name);if(!i||n&&en(i.path.node,n))return;t.scope.getBinding(o.node.name)!==i&&r.add(o.node.name)}),r.size>0?{ok:!1,bindingNames:[...r].sort(),reason:"Cannot move repeat-backed child because the repeat collection is not visible at the target"}:{ok:!0}}function Ms(e,t){e.isIdentifier()&&e.isReferencedIdentifier()&&t(e),e.traverse({ReferencedIdentifier(n){n.isIdentifier()&&t(n)}})}function dx(e){let t=fx(e.ast,e.sourceNode.component,e.targetParent.component);if(!t.ok)return{ok:!1,reason:t.reason};let n=ld(t.path,e.targetParentPath);if(!n.ok)return{ok:!1,reason:n.reason};let r=Cx({source:e.source,sourceContext:e.sourceContext,callSitePath:t.path,targetParentPath:e.targetParentPath});if(!r.ok)return r;let o=id(r.collectionExpression);return{ok:!0,context:{...e.sourceContext,collectionExpression:r.collectionExpression,collectionNeedsParens:o?Ls(o):!0}}}function fx(e,t,n){let r=Gu(e,t);if(Yu(e,r),Zu(e,r))return{ok:!1,reason:"Cannot move prop-backed repeat child because the component is referenced through an unsupported value usage"};let o=[];return Bt(e,{JSXElement(s){rd(s,r)&&o.push(s)}}),o.length!==1?{ok:!1,reason:"Cannot move prop-backed repeat child without a single unambiguous component call site"}:Os(o[0])!==n?{ok:!1,reason:"Cannot move prop-backed repeat child because the call site is outside the target component"}:{ok:!0,path:o[0]}}function px(e){if(!e.knownSourceFiles)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without project-wide source visibility"};if(!e.routeEntryFiles)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without registered route visibility"};let t=new Set(e.knownSourceFiles.map(a=>ir(a.file)));if(!t.has(ir(e.sourceFile))||!t.has(ir(e.targetFile)))return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without source and target file visibility"};for(let a of e.routeEntryFiles)if(!t.has(ir(a)))return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component until all registered route entries are loaded"};let n=yx(e.sourceAst,e.sourceComponent);if(!n)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without an exported source component identity"};let r=[];for(let a of e.knownSourceFiles){let c=We(a.content);if(!c)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component because a loaded source file cannot be parsed"};r.push({file:a.file,ast:c})}let o=mx(r,{file:e.sourceFile,exportName:n.exportName}),i=[];for(let a of r){let c=Wu({ast:a.ast,file:a.file,sourceFile:e.sourceFile,sourceComponent:e.sourceComponent,componentIdentities:o});if(c.hasUnsafeReference)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component because the component has unsupported value usages"};i.push(...c.callSites)}if(i.length!==1)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without a single project-wide component call site"};let[s]=i;return!et(s.file,e.targetFile)||Os(s.path)!==e.targetComponent?{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component because the only call site is outside the target component"}:{ok:!0,callSitePath:s.path}}function mx(e,t){let n=new Map,r=i=>{let s=On(i);return n.has(s)?!1:(n.set(s,i),!0)};r(t);let o=!0;for(;o;){o=!1;for(let i of e)for(let s of gx(i,n))o=r(s)||o}return[...n.values()]}function gx(e,t){let n=[],r=hx(e,t);for(let o of e.ast.program.body){if(b.isExportDefaultDeclaration(o)&&b.isIdentifier(o.declaration)&&(r.get(o.declaration.name)?.length??0)>0){let i=r.get(o.declaration.name)??[];for(let s of i){if(s.namespace){let a=ar(s.namespace,o.declaration.name,"default");a&&n.push({file:e.file,namespace:a,exportName:s.exportName});continue}n.push({file:e.file,exportName:"default"})}continue}if(b.isExportNamedDeclaration(o)&&o.source&&typeof o.source.value=="string"){let i=cr(e.file,o.source.value);for(let s of o.specifiers){if(b.isExportNamespaceSpecifier(s)){let l=Dt(s.exported);for(let u of t.values())et(u.file,i)&&n.push({file:e.file,namespace:ws(l,u.namespace),exportName:u.exportName});continue}if(!b.isExportSpecifier(s))continue;let a=Dt(s.local),c=[...t.values()].filter(l=>et(l.file,i)&&Qt(l.namespace,a));if(c.length>0){let l=Dt(s.exported);for(let u of c){let d=ar(u.namespace,a,l);d&&n.push({file:e.file,namespace:d,exportName:u.exportName})}continue}t.has(On({file:i,exportName:a}))&&n.push({file:e.file,exportName:Dt(s.exported)})}continue}if(b.isExportNamedDeclaration(o)&&!o.source){for(let i of o.specifiers){if(!b.isExportSpecifier(i))continue;let s=Dt(i.local),a=r.get(s)??[];if(a.length>0){let c=Dt(i.exported);n.push({file:e.file,exportName:c});for(let l of a){let u=ar(l.namespace,s,c);u&&n.push({file:e.file,namespace:u,exportName:l.exportName})}}}continue}if(b.isExportAllDeclaration(o)&&typeof o.source.value=="string"){let i=cr(e.file,o.source.value),s=o.exported;if(s){let a=Dt(s);for(let c of t.values())et(c.file,i)&&n.push({file:e.file,namespace:ws(a,c.namespace),exportName:c.exportName});continue}for(let a of t.values())et(a.file,i)&&(a.namespace||a.exportName!=="default")&&n.push({file:e.file,namespace:a.namespace,exportName:a.exportName})}}return n}function ws(e,t){return t?`${e}.${t}`:e}function Qt(e,t){return e===t||e?.startsWith(`${t}.`)===!0}function ar(e,t,n){return!Qt(e,t)||!e?null:e===t?n:`${n}${e.slice(t.length)}`}function hx(e,t){let n=new Map,r=(i,s)=>{let a=n.get(i)??[];a.push(s),n.set(i,a)};for(let i of e.ast.program.body){if(!b.isImportDeclaration(i)||typeof i.source.value!="string")continue;let s=cr(e.file,i.source.value);for(let a of i.specifiers){if(b.isImportDefaultSpecifier(a)){let c=t.get(On({file:s,exportName:"default"}));c&&r(a.local.name,c);let l=[...t.values()].filter(u=>et(u.file,s)&&Qt(u.namespace,"default"));for(let u of l){let d=ar(u.namespace,"default",a.local.name);d&&r(a.local.name,{...u,namespace:d})}continue}if(b.isImportSpecifier(a)){let c=Dt(a.imported),l=[...t.values()].filter(d=>et(d.file,s)&&Qt(d.namespace,c));for(let d of l)r(a.local.name,d);let u=t.get(On({file:s,exportName:c}));u&&r(a.local.name,u);continue}if(b.isImportNamespaceSpecifier(a))for(let c of t.values())et(c.file,s)&&r(a.local.name,{...c,namespace:ws(a.local.name,c.namespace)})}}let o=!0;for(;o;){o=!1;for(let i of e.ast.program.body)if(b.isVariableDeclaration(i))for(let s of i.declarations){if(!b.isIdentifier(s.id)||!s.init)continue;let a=Dn(s.init);if(!a||!b.isIdentifier(a))continue;let c=n.get(a.name)??[];if(c.length===0)continue;let l=n.get(s.id.name)??[],u=new Set(l.map(On));for(let d of c){let p=ar(d.namespace,a.name,s.id.name),m=p?{...d,namespace:p}:d,g=On(m);u.has(g)||(r(s.id.name,m),u.add(g),o=!0)}}}return n}function On(e){let t=e.namespace?`${e.namespace}.${e.exportName}`:e.exportName;return`${Ps(e.file)}#${t}`}function Dt(e){return b.isIdentifier(e)?e.name:e.value}function yx(e,t){for(let n of e.program.body){if(b.isExportDefaultDeclaration(n)){let o=n.declaration;if((b.isFunctionDeclaration(o)||b.isClassDeclaration(o))&&o.id?.name===t)return{exportName:"default"};if(b.isIdentifier(o)&&o.name===t)return{exportName:"default"}}if(!b.isExportNamedDeclaration(n))continue;let r=n.declaration;if((b.isFunctionDeclaration(r)||b.isClassDeclaration(r))&&r.id?.name===t)return{exportName:t};if(b.isVariableDeclaration(r)){for(let o of r.declarations)if(b.isIdentifier(o.id,{name:t}))return{exportName:t}}for(let o of n.specifiers){if(!b.isExportSpecifier(o)||o.local.name!==t)continue;return{exportName:b.isIdentifier(o.exported)?o.exported.name:o.exported.value}}}return null}function Wu(e){let t=xx(e),n=[],r=Zu(e.ast,t);return Bt(e.ast,{JSXElement(o){et(e.file,e.sourceFile)&&Os(o)===e.sourceComponent||rd(o,t)&&n.push({file:e.file,path:o})}}),{callSites:n,hasUnsafeReference:r}}function Hu(){return{localBindings:new Set,namespaceMembers:new Map,hasUnsupportedAlias:!1}}function Gu(e,t){let n=Hu();return Bt(e,{Program(r){let o=r.scope.getBinding(t);o&&n.localBindings.add(o),r.stop()}}),n}function xx(e){let t=Hu();return et(e.file,e.sourceFile)&&Sx(t,Gu(e.ast,e.sourceComponent)),Bt(e.ast,{ImportDeclaration(n){let r=n.node,o=r.source.value;if(typeof o!="string")return;let i=cr(e.file,o),s=e.componentIdentities.filter(a=>et(a.file,i));if(s.length!==0)for(let a of r.specifiers){let c=n.scope.getBinding(a.local.name);if(c){if(b.isImportDefaultSpecifier(a)&&s.some(l=>l.exportName==="default")&&t.localBindings.add(c),b.isImportDefaultSpecifier(a)){let l=s.filter(u=>Qt(u.namespace,"default"));if(l.length>0){let u=t.namespaceMembers.get(c)??new Set;for(let d of l){let p=Du(d,"default");p&&u.add(p)}t.namespaceMembers.set(c,u)}continue}if(b.isImportSpecifier(a)){let l=b.isIdentifier(a.imported)?a.imported.name:a.imported.value,u=s.filter(d=>Qt(d.namespace,l));if(u.length>0){let d=t.namespaceMembers.get(c)??new Set;for(let p of u){let m=Du(p,l);m&&d.add(m)}t.namespaceMembers.set(c,d);continue}s.some(d=>!d.namespace&&d.exportName===l)&&t.localBindings.add(c);continue}if(b.isImportNamespaceSpecifier(a))for(let l of s){let u=l.namespace?`${l.namespace}.${l.exportName}`:l.exportName,d=t.namespaceMembers.get(c)??new Set;d.add(u),t.namespaceMembers.set(c,d)}}}}}),Yu(e.ast,t),t}function Sx(e,t){e.hasUnsupportedAlias||=t.hasUnsupportedAlias;for(let n of t.localBindings)e.localBindings.add(n);for(let[n,r]of t.namespaceMembers){let o=e.namespaceMembers.get(n)??new Set;for(let i of r)o.add(i);e.namespaceMembers.set(n,o)}}function Yu(e,t){Bt(e,{VariableDeclarator(n){if(!n.node.init)return;let r=Dn(n.node.init);if(r){if(b.isIdentifier(n.node.id)){let o=qt(r,t,n),i=n.scope.getBinding(n.node.id.name);o&&i&&Ns(t,i,o);return}if(b.isObjectPattern(n.node.id)){let o=qt(r,t,n);o?.unsupported||o?.local?t.hasUnsupportedAlias=!0:o&&o.namespaceMembers.size>0&&ed(n.node.id,o.namespaceMembers,t,n)}}}})}function Zu(e,t){if(t.hasUnsupportedAlias)return!0;let n=!1;return Bt(e,{ReferencedIdentifier(r){if(n){r.stop();return}bx(r)||!r.isIdentifier()||!Qu(r,t)||Ex(r,t)||Ix(r)||(n=!0,r.stop())}}),n}function bx(e){let t=e;for(;t.parentPath?.isJSXMemberExpression();)t=t.parentPath;let n=t.parentPath;return!!(n?.isJSXOpeningElement()&&n.node.name===t.node||n?.isJSXClosingElement()&&n.node.name===t.node)}function Qu(e,t){let n=e.scope.getBinding(e.node.name);if(!n)return null;let r=e;for(;r.parentPath?.isMemberExpression()&&r.parentPath.node.object===r.node&&!r.parentPath.node.computed;)r=r.parentPath;return t.localBindings.has(n)||t.namespaceMembers.has(n)&&qt(r.node,t,r)?r:null}function Ex(e,t){let n=e.findParent(c=>c.isVariableDeclarator());if(!n?.isVariableDeclarator())return!1;let r=n.get("init");if(!r?.isExpression()||!Ou(e,r))return!1;let o=Qu(e,t);if(!o)return!1;if(Dn(r.node)===o.node)return!!qt(r.node,t,r);let s=e.findParent(c=>c.isObjectProperty());if(!s?.isObjectProperty())return!1;let a=s.get("value");return a.isExpression()&&Ou(e,a)&&!!qt(a.node,t,a)}function Ix(e){let t=e.parentPath;return t?.isExportDefaultDeclaration()&&t.node.declaration===e.node?!0:!!(t?.isExportSpecifier()&&t.node.local===e.node)}function Ou(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentPath}return!1}function qt(e,t,n){let r=Dn(e);if(!r)return null;if(b.isIdentifier(r)){let a=n.scope.getBinding(r.name);if(!a)return null;let c=t.namespaceMembers.get(a);return t.localBindings.has(a)?{local:!0,namespaceMembers:new Set,unsupported:!1}:c?{local:!1,namespaceMembers:new Set(c),unsupported:!1}:null}if(b.isObjectExpression(r))return vx(r,t,n);let o=nd(r);if(!o||o.length===0)return null;let i=n.scope.getBinding(o[0]);if(!i)return null;let s=t.namespaceMembers.get(i);return s?qu(s,o.slice(1).join(".")):null}function vx(e,t,n){let r=new Set,o=!1;for(let i of e.properties){if(!b.isObjectProperty(i))continue;let s=td(i);if(!s||!b.isExpression(i.value)){b.isExpression(i.value)&&(o||=qt(i.value,t,n)!==null);continue}let a=qt(i.value,t,n);if(a){o||=a.unsupported,a.local&&r.add(s);for(let c of a.namespaceMembers)r.add(`${s}.${c}`)}}return r.size>0||o?{local:!1,namespaceMembers:r,unsupported:o}:null}function qu(e,t){if(!t)return{local:!1,namespaceMembers:new Set(e),unsupported:!1};let n=new Set,r=!1;for(let o of e){if(o===t){r=!0;continue}o.startsWith(`${t}.`)&&n.add(o.slice(t.length+1))}return r||n.size>0?{local:r,namespaceMembers:n,unsupported:!1}:null}function Ns(e,t,n){if(e.hasUnsupportedAlias||=n.unsupported,n.local&&e.localBindings.add(t),n.namespaceMembers.size>0){let r=e.namespaceMembers.get(t)??new Set;for(let o of n.namespaceMembers)r.add(o);e.namespaceMembers.set(t,r)}}function ed(e,t,n,r){for(let o of e.properties){if(b.isRestElement(o)){if(b.isIdentifier(o.argument)){let c=r.scope.getBinding(o.argument.name);c&&Ns(n,c,{local:!1,namespaceMembers:new Set(t),unsupported:!1})}else n.hasUnsupportedAlias=!0;continue}if(!b.isObjectProperty(o))continue;let i=td(o);if(!i){n.hasUnsupportedAlias=!0;continue}let s=qu(t,i);if(!s)continue;n.hasUnsupportedAlias||=s.unsupported;let a=b.isAssignmentPattern(o.value)?o.value.left:o.value;if(b.isIdentifier(a)){let c=r.scope.getBinding(a.name);c&&Ns(n,c,s);continue}if(b.isObjectPattern(a)&&s.namespaceMembers.size>0){ed(a,s.namespaceMembers,n,r);continue}n.hasUnsupportedAlias=!0}}function td(e){return e.computed?b.isStringLiteral(e.key)||b.isNumericLiteral(e.key)?String(e.key.value):null:kx(e.key)}function kx(e){return b.isIdentifier(e)?e.name:b.isStringLiteral(e)||b.isNumericLiteral(e)?String(e.value):null}function Dn(e){return b.isParenthesizedExpression(e)||b.isTSAsExpression(e)||b.isTSSatisfiesExpression(e)||b.isTSNonNullExpression(e)||b.isTSTypeAssertion(e)?Dn(e.expression):b.isExpression(e)?e:null}function nd(e){if(b.isIdentifier(e))return[e.name];if((b.isMemberExpression(e)||b.isOptionalMemberExpression(e))&&!e.computed&&b.isIdentifier(e.property)){let t=Dn(e.object),n=t?nd(t):null;return n?[...n,e.property.name]:null}return null}function Du(e,t){if(!Qt(e.namespace,t))return null;if(e.namespace===t)return e.exportName;let n=e.namespace?.slice(t.length+1);return n?`${n}.${e.exportName}`:e.exportName}function rd(e,t){let n=e.node.openingElement.name;if(b.isJSXIdentifier(n)){let o=e.scope.getBinding(n.name);return!!(o&&t.localBindings.has(o))}let r=od(n);if(r&&r.length>1){let o=e.scope.getBinding(r[0]);return o?t.namespaceMembers.get(o)?.has(r.slice(1).join("."))===!0:!1}return!1}function od(e){if(b.isJSXIdentifier(e))return[e.name];if(b.isJSXMemberExpression(e)){let t=od(e.object);return t?[...t,e.property.name]:null}return null}function Os(e){let t=e.getFunctionParent();if(!t)return null;if(t.isFunctionDeclaration())return t.node.id?.name??null;if(t.isArrowFunctionExpression()||t.isFunctionExpression()){let n=t.parentPath;if(n?.isVariableDeclarator()&&b.isIdentifier(n.node.id))return n.node.id.name}return null}function Cx(e){let t=ce(e.sourceContext.collectionPath.node);if(!t)return{ok:!1,reason:"Cannot move prop-backed repeat child because the collection expression cannot be mapped"};let n=new Map,r=new Set,o=null,i=s=>{if(o)return;let a=s.scope.getBinding(s.node.name);if(!a||en(a.path.node,t))return;let c=Nx(s,a,t);if(c){if(c.hasDefault){o="Cannot move prop-backed repeat child because the collection prop has a default value that cannot be preserved safely";return}let u=Ax(e.callSitePath,c.propName,e.source);if(!u.ok){o=u.reason;return}let d=Rx(u.expression,c.remainingPath);if(!d){o="Cannot move prop-backed repeat child because the mapped prop path is not a portable expression";return}let p=zu(u.expressionPath,e.targetParentPath);if(!p.ok){o=p.reason??`Cannot move prop-backed repeat child because the mapped prop source is not visible at the target: ${p.bindingNames.join(", ")}`;return}n.set(`${c.range.start}:${c.range.end}`,{...c.range,text:d});return}e.targetParentPath.scope.getBinding(s.node.name)!==a&&r.add(s.node.name)};return e.sourceContext.collectionPath.isIdentifier()&&e.sourceContext.collectionPath.isReferencedIdentifier()&&i(e.sourceContext.collectionPath),e.sourceContext.collectionPath.traverse({ReferencedIdentifier(s){s.isIdentifier()&&i(s)}}),o?{ok:!1,reason:o}:r.size>0?{ok:!1,reason:`Cannot move prop-backed repeat child because the collection depends on bindings outside the target scope: ${[...r].sort().join(", ")}`}:n.size===0?{ok:!1,reason:"Cannot move repeat-backed child out of its component without an explicit prop mapping"}:{ok:!0,collectionExpression:Tx(e.source,t,[...n.values()])}}function Rx(e,t){if(t.length===0)return e;let n=id(e);if(!n)return null;let r=Ls(n)?`(${e})`:e;for(let o of t){if(o.kind==="property"){r=wx(o.name)?`${r}.${o.name}`:`${r}[${JSON.stringify(o.name)}]`;continue}r=`${r}[${o.index}]`}return r}function wx(e){return/^[$A-Z_a-z][$\w]*$/.test(e)}function Nx(e,t,n){let r=Px(e,n),o=r?{kind:"member-expression",expression:e.node.name,base:e.node.name,path:[{kind:"property",name:r.propertyName}]}:{kind:"identifier",expression:e.node.name,base:e.node.name,path:[]},i=Fn(t,o);if(!i)return null;let s=r?.range??ce(e.node);return s?{propName:i.propName,remainingPath:i.remainingPath,hasDefault:i.hasDefault,range:s}:null}function Px(e,t){let n=e.parentPath;if(!n||!n.isMemberExpression()&&!n.isOptionalMemberExpression()||n.node.object!==e.node||!en(n.node,t)||n.node.computed||!b.isIdentifier(n.node.property))return null;let r=ce(n.node);return r?{propertyName:n.node.property.name,range:r}:null}function Ax(e,t,n){let r=e.get("openingElement").get("attributes");if(r.some(c=>c.isJSXSpreadAttribute()))return{ok:!1,reason:"Cannot move prop-backed repeat child through spread props; use an explicit prop mapping"};let o=r.find(c=>c.isJSXAttribute()&&b.isJSXIdentifier(c.node.name)&&c.node.name.name===t);if(!o?.isJSXAttribute())return{ok:!1,reason:`Cannot move prop-backed repeat child because prop '${t}' is not passed explicitly`};let i=o.get("value");if(!i.isJSXExpressionContainer())return{ok:!1,reason:`Cannot move prop-backed repeat child because prop '${t}' is not an expression`};let s=i.get("expression");if(!s.isExpression())return{ok:!1,reason:`Cannot move prop-backed repeat child because prop '${t}' is not a usable expression`};let a=To(n,s.node);return a?{ok:!0,expression:a,expressionPath:s}:{ok:!1,reason:`Cannot move prop-backed repeat child because prop '${t}' cannot be read`}}function Tx(e,t,n){let r=e.slice(t.start,t.end),o=[...n].sort((i,s)=>s.start-i.start);for(let i of o)r=r.slice(0,i.start-t.start)+i.text+r.slice(i.end-t.start);return r}function id(e){try{let n=_s.parse(`const __VD_EXPR__ = (${e});`,{sourceType:"module",plugins:["jsx","typescript"]}).program.body[0],r=b.isVariableDeclaration(n)?n.declarations[0]?.init:null;return r&&b.isExpression(r)?r:null}catch{return null}}function _x(e){let t=ce(e.sourceContext.collectionPath.node);if(!t)return{ok:!1,reason:"Cannot move cross-file repeat child because the collection expression cannot be inspected"};let n=new Map,r=new Set,o=i=>{let s=i.scope.getBinding(i.node.name);if(!s||en(s.path.node,t))return;let a=Lu(s,e.sourceFile,e.targetFile);if(a){let c=e.targetParentPath.scope.getBinding(a.localName);if(c){let u=Lu(c,e.targetFile,e.targetFile);(!u||u.moduleFile!==a.moduleFile||!Fx(u.importSpec,a.importSpec))&&r.add(a.localName);return}let l=n.get(a.moduleSpecifier)??[];l.some(u=>JSON.stringify(u)===JSON.stringify(a.importSpec))||l.push(a.importSpec),n.set(a.moduleSpecifier,l);return}r.add(i.node.name)};return Ms(e.sourceContext.collectionPath,o),r.size>0?{ok:!1,reason:`Cannot move cross-file repeat child because the collection depends on non-importable bindings: ${[...r].sort().join(", ")}`}:{ok:!0,imports:[...n.entries()].map(([i,s])=>({moduleSpecifier:i,imports:s}))}}function Fx(e,t){return e.kind!==t.kind?!1:e.kind==="named"&&t.kind==="named"?e.imported===t.imported&&e.local===t.local:e.kind==="default"&&t.kind==="default"||e.kind==="namespace"&&t.kind==="namespace"?e.local===t.local:!1}function Lu(e,t,n){let r=Mx(e),o=r?.parentPath;if(!r||!o?.isImportDeclaration())return null;let i=o.node.source.value;if(typeof i!="string")return null;let s=cr(t,i),a=i.startsWith(".")?Rs(n,s):i;if(r.isImportDefaultSpecifier()){let c=r.node.local.name;return{localName:c,moduleFile:s,moduleSpecifier:a,importSpec:{kind:"default",local:c}}}if(r.isImportNamespaceSpecifier()){let c=r.node.local.name;return{localName:c,moduleFile:s,moduleSpecifier:a,importSpec:{kind:"namespace",local:c}}}if(r.isImportSpecifier()){let c=b.isIdentifier(r.node.imported)?r.node.imported.name:r.node.imported.value,l=r.node.local.name;return{localName:l,moduleFile:s,moduleSpecifier:a,importSpec:{kind:"named",imported:c,local:l===c?void 0:l}}}return null}function Mx(e){let t=e.path;for(;t&&!t.isImportDeclaration();){if(t.isImportSpecifier()||t.isImportDefaultSpecifier()||t.isImportNamespaceSpecifier())return t;t=t.parentPath}return null}function cr(e,t){return t.startsWith("@/")?t.slice(2).replace(/\\/g,"/"):t.startsWith(".")?St.normalize(St.join(St.dirname(e),t)).replace(/\\/g,"/"):t}function et(e,t){return Ps(e)===Ps(t)}function Ps(e){let t=ir(e);return t.endsWith("/index")?t.slice(0,-6):t}function ir(e){return e.replace(/\.(tsx|ts|jsx|js)$/,"")}function Ds(e){let t=[],n=r=>{if(r){if(b.isIdentifier(r)){t.push(r.name);return}if(b.isObjectPattern(r)){for(let o of r.properties){if(b.isRestElement(o)){n(o.argument);continue}b.isObjectProperty(o)&&n(o.value)}return}if(b.isArrayPattern(r)){for(let o of r.elements)n(o);return}if(b.isAssignmentPattern(r)){n(r.left);return}if(b.isRestElement(r)){n(r.argument);return}b.isTSParameterProperty(r)&&n(r.parameter)}};return n(e),t}function Ox(e){let t=[];for(let n of e.callbackPath.node.params){if(b.isIdentifier(n)){t.push(n.name);continue}if(b.isRestElement(n)&&b.isIdentifier(n.argument)){t.push(`...${n.argument.name}`);continue}return{ok:!1,reason:"Cannot move cross-file repeat child because the callback parameters are not portable to the target file"}}return{ok:!0,callbackParams:t}}function Dx(e,t){return{...e,callbackParams:t}}function Bu(e,t){return`${e.collectionNeedsParens?`(${e.collectionExpression})`:e.collectionExpression}${e.mapOperator}((${e.callbackParams.join(", ")}) => ${t})`}function Ls(e){return!(b.isIdentifier(e)||b.isThisExpression(e)||b.isMemberExpression(e)||b.isOptionalMemberExpression(e)||b.isCallExpression(e)||b.isOptionalCallExpression(e))}function sd(e,t){return ad(e,t).length>0}function vs(e,t){let n=ce(e.node),r=ce(t.node);if(!n||!r)return!1;let o=e.parentPath;for(;o;){if((o.isIfStatement()||o.isSwitchCase())&&(!!!t.findParent(s=>s.node===o?.node)||o.isIfStatement()&&!Lx(o,n,r)))return!0;o=o.parentPath}return!1}function Lx(e,t,n){let r=ce(e.node.consequent);if(r&&qe(r,t)&&!qe(r,n))return!1;let o=e.node.alternate?ce(e.node.alternate):null;return!(o&&qe(o,t)&&!qe(o,n))}function ad(e,t){let n=ce(e.node);if(!n)return[];let r=[],o=e.parentPath;for(;o;){let i=!!t.findParent(s=>s.node===o?.node);if(!i&&o.isConditionalExpression()){let s=ce(o.node.consequent),a=ce(o.node.alternate);s&&n.start>=s.start&&n.end<=s.end?r.push({kind:"conditional",path:o,conditionPath:o.get("test"),branch:"consequent"}):a&&n.start>=a.start&&n.end<=a.end&&r.push({kind:"conditional",path:o,conditionPath:o.get("test"),branch:"alternate"})}else if(!i&&o.isLogicalExpression()&&cd(o.node.operator)){let s=ce(o.node.right);s&&n.start>=s.start&&n.end<=s.end&&r.push({kind:"logical",path:o,conditionPath:o.get("left"),operator:o.node.operator})}o=o.parentPath}return r}function ju(e,t,n,r){let o=ad(t,n);if(o.length===0)return{sourceJsx:r,conditionPaths:[]};let i=r,s=[];for(let a of o){let c=To(e,a.conditionPath.node);if(!c)return{sourceJsx:r,conditionPaths:[]};let l=Bx(a.conditionPath,c);if(s.push(a.conditionPath),a.kind==="logical"){i=`${l} ${a.operator} ${$x(i)}`;continue}i=a.branch==="consequent"?`${l} ? ${i} : null`:`${l} ? null : ${i}`}return{sourceJsx:i,conditionPaths:s}}function Bx(e,t){return jx(e.node)?t:`(${t})`}function jx(e){return b.isIdentifier(e)||b.isThisExpression(e)||b.isSuper(e)||b.isMemberExpression(e)||b.isOptionalMemberExpression(e)||b.isCallExpression(e)||b.isOptionalCallExpression(e)||b.isBooleanLiteral(e)||b.isNumericLiteral(e)||b.isStringLiteral(e)||b.isNullLiteral(e)||b.isUnaryExpression(e)}function cd(e){return e==="&&"||e==="||"||e==="??"}function $x(e){return e.trim().startsWith("<")?e:`(${e})`}function ld(e,t){let n=ce(e.node),r=ce(t.node);if(!n||!r)return{ok:!1,reason:"Cannot move repeat-backed child out of a component without proving the component call-site render scope"};let o=$u(e),i=$u(t);if(!o||!i||!Vx(o,i))return{ok:!1,reason:"Cannot move repeat-backed child out of a component because the component call site is rendered in a different return branch"};let s=e.parentPath;for(;s;){if(s.isConditionalExpression()){let a=Ux(s.node,n);if(a&&!qe(a,r))return{ok:!1,reason:"Cannot move repeat-backed child out of a component because the component call site is conditionally rendered outside the target scope"}}else if(s.isLogicalExpression()){let a=ce(s.node.right);if(a&&qe(a,n)&&!qe(a,r))return{ok:!1,reason:"Cannot move repeat-backed child out of a component because the component call site is conditionally rendered outside the target scope"}}else if((s.isArrowFunctionExpression()||s.isFunctionExpression())&&Kx(s)){let a=ce(s.node.body)??ce(s.node);if(a&&!qe(a,r))return{ok:!1,reason:"Cannot move repeat-backed child out of a component because the component call site is repeated outside the target scope"}}s=s.parentPath}return{ok:!0}}function $u(e){let t=e;for(;t;){if(t.isReturnStatement())return t.node.argument?ce(t.node.argument):null;if(t.isArrowFunctionExpression()&&(b.isJSXElement(t.node.body)||b.isJSXFragment(t.node.body)||b.isConditionalExpression(t.node.body)||b.isLogicalExpression(t.node.body)))return ce(t.node.body);t=t.parentPath}return null}function Vx(e,t){return e.start===t.start&&e.end===t.end}function Ux(e,t){let n=ce(e.consequent);if(n&&qe(n,t))return n;let r=ce(e.alternate);return r&&qe(r,t)?r:null}function Kx(e){let t=e.parentPath;if(!t||!t.isCallExpression()&&!t.isOptionalCallExpression()||t.node.arguments[0]!==e.node)return!1;let n=t.node.callee;return(b.isMemberExpression(n)||b.isOptionalMemberExpression(n))&&b.isIdentifier(n.property)&&n.property.name==="map"&&!n.computed}var Jx={table:new Set(["caption","colgroup","thead","tbody","tfoot","tr"]),thead:new Set(["tr"]),tbody:new Set(["tr"]),tfoot:new Set(["tr"]),tr:new Set(["th","td"]),ul:new Set(["li"]),ol:new Set(["li"]),select:new Set(["option","optgroup"]),optgroup:new Set(["option"])};function Po(e,t){if(t.kind!=="native-tag")return null;let n=e.tag?.toLowerCase();if(!n||n!==e.tag||n.startsWith("component:"))return null;let r=Jx[n];if(!r)return null;let o=t.tag.toLowerCase();return r.has(o)?null:`Cannot insert <${t.tag}> into <${e.tag}>; expected ${[...r].map(i=>`<${i}>`).join(", ")}`}function Xx(e,t){for(let n of e.program.body){if(!b.isImportDeclaration(n)||n.source.value!==t)continue;let r=n.specifiers.find(o=>b.isImportDefaultSpecifier(o));if(r&&b.isImportDefaultSpecifier(r))return r.local.name}return null}function zx(e,t,n){for(let r of e.program.body){if(!b.isImportDeclaration(r)||r.source.value!==t)continue;let o=r.specifiers.find(i=>b.isImportSpecifier(i)&&(b.isIdentifier(i.imported)?i.imported.name:i.imported.value)===n);if(o&&b.isImportSpecifier(o))return o.local.name}return null}function Vu(e){let t=new Set;return Bt(e,{Program(n){for(let r of Object.keys(n.scope.bindings))t.add(r);n.stop()}}),t}function Uu(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}${n}`);)n+=1;return`${e}${n}`}function Wx(e,t){if(!e.component)return{localName:"Component"};let n=e.component,r=Fs(e),o=We(t);if(n.exportName!=="default"){let a=o?zx(o,n.source,n.exportName):null;if(a)return{localName:a};let c=o?Uu(r,Vu(o)):r;return{localName:c,importStep:ks(e,c)}}if(!o)return{localName:r,importStep:ks(e,r)};let i=Xx(o,n.source);if(i)return{localName:i};let s=Uu(r,Vu(o));return{localName:s,importStep:ks(e,s)}}function Hx(e,t){if(e.kind==="native-tag")return e.text?`<${e.tag}>${e.text}</${e.tag}>`:`<${e.tag} />`;let n=t??Fs(e);if(e.props&&Object.keys(e.props).length>0){let r=Object.entries(e.props).map(([o,i])=>typeof i=="string"?`${o}="${i}"`:`${o}={${JSON.stringify(i)}}`).join(" ");return`<${n} ${r} />`}return`<${n} />`}function Gx(e){if(e.kind==="native-tag")return e.text===void 0?{kind:e.kind,tag:e.tag}:{kind:e.kind,tag:e.tag,text:e.text};if(!e.component)return{kind:e.kind};let t=e.props?Yx(e.props):void 0;return{kind:e.kind,component:{source:e.component.source,exportName:e.component.exportName},...t?{props:t}:{}}}function Yx(e){return Object.fromEntries(Object.entries(e).filter(t=>As(t[1])))}function As(e){return e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean"?!0:Array.isArray(e)?e.every(As):typeof e=="object"?Object.values(e).every(As):!1}function Zx(e,t){let n=We(e);if(!n||!t.tag||!t.importedFrom||!t.exportName)return Number.POSITIVE_INFINITY;let r=Wu({ast:n,file:t.file,sourceFile:t.file,sourceComponent:t.tag,componentIdentities:[{file:t.importedFrom,exportName:t.exportName}]});return r.hasUnsafeReference?Number.POSITIVE_INFINITY:r.callSites.length}function ks(e,t=Fs(e)){if(!e.component)throw new Error("Materialized component calls do not have a component import");return{moduleSpecifier:e.component.source,imports:e.component.exportName==="default"?[{kind:"default",local:t}]:[{kind:"named",imported:e.component.exportName,...t!==e.component.exportName?{local:t}:{}}]}}function Ku(e,t){if("kind"in e)return{parentNode:null,anchorNode:null,placement:e.relation};if("parentKey"in e)return{parentNode:t.getNode(e.parentKey),anchorNode:null,placement:e.relation};let n=t.getNode(e.anchorKey);return{parentNode:n?.parentKey?t.getNode(n.parentKey)??n:n,anchorNode:n,placement:e.relation}}function Qx(e,t,n){let r=e;for(;r;){if(r===t)return!0;r=n.getNode(r)?.parentKey}return!1}function or(e,t){return`Operation kind '${e}' does not match params.kind '${t}'`}function Bs(e,t=e.path){return{kind:"value",root:e.root,path:t&&t.length>0?t:void 0,expectedRange:e.expectedRange}}function sr(e){let t=e.path??[];for(let n=t.length-1;n>=0;n-=1){let r=t[n];if(r.kind==="index")return{locator:Bs(e,t.slice(0,n)),index:r.index}}return null}function Cs(e,t){return e.locator?e.collectionPathMap?.[t]?Bs(e.locator,e.collectionPathMap[t]):sr(e.locator)?eS(e.locator,tS(t,e.collectionIndexMap)):null:null}function qx(e,t){let n=e.path??[],r=n.findLastIndex(i=>i.kind==="index");if(r===-1)return;let o=n.slice(r+1);return o.length===0?t:ud(o,t)}function ud(e,t){let[n,...r]=e;if(!n)return t;if(n.kind!=="property")return;let o=ud(r,t);return o===void 0?void 0:{[n.name]:o}}function Ao(e,t,n){return n?.finalSource?.kind==="component-prop"?"Cannot edit prop-backed node structure with a generic node operation":t?.kind==="value-binding"&&t.sourceKind==="repeat-template"&&!e.isRepeatItemRoot?"Cannot edit repeat-backed child node structure with a generic node operation":t?.kind==="value-binding"&&t.file!==e.file&&t.sourceKind!=="repeat-template"?"Cannot edit upstream-bound node structure with a generic node operation":null}function eS(e,t){let n=e.path??[];for(let r=n.length-1;r>=0;r-=1)if(n[r].kind==="index"){let i=[...n];return i[r]={kind:"index",index:t},Bs(e,i)}return null}function tS(e,t){return t?.[e]??e}function Ju(e,t){return!t||t.length===0?e:e<=0?t[0]??0:e>=t.length?(t[t.length-1]??t.length-1)+1:t[e]??e}function nS(e,t){return rS(e.root,t.root)&&iS(e.path??[],t.path??[])}function rS(e,t){if(e.kind!==t.kind)return!1;switch(e.kind){case"binding":case"hook-state":case"named-export":return"name"in t&&e.name===t.name;case"default-export":return!0;case"expression":return"sourceRange"in t&&oS(e.sourceRange,t.sourceRange)}}function oS(e,t){return e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}function Ts(e,t){let n=null;return Bt(e,{JSXElement(r){let o=r.node.loc;o&&o.start.line===t.sourceRange.startLine&&o.start.column===t.sourceRange.startColumn&&o.end.line===t.sourceRange.endLine&&o.end.column===t.sourceRange.endColumn&&(n=r,r.stop())}}),n}function iS(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],o=t[n];if(r.kind!==o.kind)return!1;if(r.kind==="property"){if(o.kind!=="property"||r.name!==o.name)return!1;continue}if(o.kind!=="index"||r.index!==o.index)return!1}return!0}var _o=class{constructor(t){this.operationCounter=0,this.graph=t}async plan(t){let n=`op-${++this.operationCounter}-${Date.now()}`;switch(t.kind){case"update-text":{if(t.params.kind!=="update-text")return{ok:!1,errorCode:"unknown",reason:or(t.kind,t.params.kind)};let r=t,o=this.resolveNodeRequest(t);if(!o.ok)return o.result;let i=o.node,s=this.graph.getFileVersion(i.file);return t.documentVersion!==s?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${s})`}:this.planUpdateText(n,r,i,this.graph.getCapability(i.key),await this.graph.getTextWriteTarget(i.key,r.params.segmentIndex))}case"update-array-item":{if(t.params.kind!=="update-array-item")return{ok:!1,errorCode:"unknown",reason:or(t.kind,t.params.kind)};let r=t,o=this.resolveNodeRequest(t);if(!o.ok)return o.result;let i=o.node,s=this.graph.getFileVersion(i.file);return t.documentVersion!==s?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${s})`}:this.planUpdateArrayItem(n,r,this.graph.getCapability(i.key),await this.graph.getTextWriteTarget(i.key,r.params.segmentIndex))}case"remove-node":{if(t.params.kind!=="remove-node")return{ok:!1,errorCode:"unknown",reason:or(t.kind,t.params.kind)};let r=t,o=this.resolveNodeRequest(t);if(!o.ok)return o.result;let i=o.node,s=this.graph.getFileVersion(i.file);return t.documentVersion!==s?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${s})`}:this.planRemoveNode(n,r,i,this.graph.getCapability(i.key))}case"insert-child":{if(t.params.kind!=="insert-child")return{ok:!1,errorCode:"unknown",reason:or(t.kind,t.params.kind)};let r=t;if(!wo(r.params.position))return{ok:!1,errorCode:"unsupported-operation",reason:"Page composition insert-child requires the page composition transaction planner"};let o=Ku(r.params.position,this.graph);if(!o.parentNode)return{ok:!1,errorCode:"locator-miss",reason:`Insert target parent for request '${t.id}' not found in graph`};let i=this.graph.getFileVersion(o.parentNode.file);return t.documentVersion!==i?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${i})`}:this.planInsertChild(n,r,o.parentNode,this.graph.getCapability(o.parentNode.key),o.anchorNode)}case"move-node":{if(t.params.kind!=="move-node")return{ok:!1,errorCode:"unknown",reason:or(t.kind,t.params.kind)};let r=t,o=this.resolveNodeRequest(t);if(!o.ok)return o.result;let i=o.node,s=this.graph.getFileVersion(i.file);return t.documentVersion!==s?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${s})`}:this.planMoveNode(n,r,i,this.graph.getCapability(i.key))}case"set-class-name-source":{let r=this.resolveNodeRequest(t);if(!r.ok)return r.result;let o=this.graph.getFileVersion(r.node.file);return t.documentVersion!==o?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${o})`}:this.planNodeAttributeOperation(n,t,r.node)}case"set-props":{let r=this.resolveNodeRequest(t);if(!r.ok)return r.result;let o=this.graph.getFileVersion(r.node.file);return t.documentVersion!==o?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${o})`}:await this.planSetProps(n,t,r.node)}case"apply-style-draft":{let r=this.resolveNodeRequest(t);if(!r.ok)return r.result;let o=this.graph.getFileVersion(r.node.file);return t.documentVersion!==o?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${o})`}:await this.planApplyStyleDraft(n,t,r.node)}default:return{ok:!1,errorCode:"unknown",reason:`Unknown operation kind: ${t.kind}`}}}resolveNodeRequest(t){let n=ex(t);if(!n)return{ok:!1,result:{ok:!1,errorCode:"invalid-target",reason:`Operation '${t.kind}' requires a node target`}};let r=this.graph.getNode(n);return r?{ok:!0,node:r}:{ok:!1,result:{ok:!1,errorCode:"locator-miss",reason:`Target key '${n}' not found in graph`}}}planNodeAttributeOperation(t,n,r){let o=r.file,i=this.graph.getCapability(r.key);return n.params.filePath!==o?{ok:!1,errorCode:"stale-version",reason:"The className source file changed before save."}:this.buildPlan(t,n,[{order:0,file:o,type:"set-class-name-source",request:{...n.params,key:r.key}}],i)}async planSetProps(t,n,r){let o=this.graph.getCapability(r.key),i=await this.buildSetPropsSteps({initialOrder:0,node:r,props:n.params.props,request:n});return i.ok?this.buildPlan(t,n,i.steps,o):i}async planApplyStyleDraft(t,n,r){let o=r.file,i=this.graph.getCapability(r.key),s=[];if(n.params.className){if(n.params.className.filePath!==o)return{ok:!1,errorCode:"stale-version",reason:"The className source file changed before save."};s.push({order:s.length,file:o,type:"set-class-name-source",request:{kind:"set-class-name-source",...n.params.className,key:r.key}})}if(n.params.props){let a=await this.buildSetPropsSteps({initialOrder:s.length,node:r,props:n.params.props,request:n});if(!a.ok)return a;s.push(...a.steps)}return this.buildPlan(t,n,s,i)}async buildSetPropsSteps(t){let{initialOrder:n,node:r,props:o,request:i}=t,s=r.file,a=[],c={};for(let[l,u]of Object.entries(o)){if(u===void 0)continue;let d=await this.graph.getElementPropertyWriteTarget?.(r.key,l),p=r.attributes?.find(m=>m.name===l);if(!(typeof p?.resolvedValue=="string"&&p.resolvedValue===u||p?.source===null&&p.value===u)){if(d?.kind==="external-entry")return{ok:!1,errorCode:"capability-denied",reason:`set-props cannot overwrite readonly external property '${l}'`};if(d?.kind==="value-binding"&&d.locator){let m=d.locator;if(d.sourceKind==="repeat-template"&&typeof i.selectionRef?.instanceIndex=="number"){let g=Cs(d,i.selectionRef.instanceIndex);if(!g)return{ok:!1,errorCode:"invalid-params",reason:"set-props could not resolve the selected repeat item"};m=g}a.push({order:n+a.length,file:d.file,type:"update-value",locator:m,value:u});continue}c[l]=u}}return Object.keys(c).length>0&&a.push({order:n+a.length,file:s,type:"set-props",locator:fe(r),props:c}),{ok:!0,steps:a}}buildTextRewriteSteps(t,n,r,o,i){if(o?.kind==="value-binding"&&o.locator){if(o.sourceKind==="repeat-template"&&typeof i?.instanceIndex=="number"){let a=Cs(o,i.instanceIndex);if(!a)return{ok:!1,errorCode:"invalid-params",reason:"update-text could not resolve the selected repeat item"};let c=this.coerceTextValueForValueTarget(o.file,a,r);return c.ok?{ok:!0,steps:[{order:0,file:o.file,type:"update-array-item",locator:a,value:c.value}]}:c}let s=this.coerceTextValueForValueTarget(o.file,o.locator,r);return s.ok?{ok:!0,steps:[{order:0,file:o.file,type:"update-value",locator:o.locator,value:s.value}]}:s}return{ok:!0,steps:o?.kind==="external-entry"?[{order:0,file:`external:${o.sourceId}`,type:"invoke-external-adapter",sourceType:o.sourceType,sourceId:o.sourceId,adapterId:o.adapterId,capability:"write-text",value:r}]:[{order:0,file:t.file,type:"update-text",locator:fe(t),segmentIndex:n,newText:r}]}}coerceTextValueForValueTarget(t,n,r,o="update-text"){let i=this.graph.getFileContent(t),s=We(i);if(!s)return{ok:!1,errorCode:"invalid-params",reason:`${o} could not inspect the value source`};let a=oe(s,n);if(!a.ok)return{ok:!1,errorCode:"invalid-params",reason:`${o} could not resolve the value source`};if(!nx(a.match.path))return{ok:!0,value:r};let c=rx(r);return c===null?{ok:!1,errorCode:"invalid-params",reason:`${o} value must be a valid number for numeric source`}:{ok:!0,value:c}}planUpdateArrayItem(t,n,r,o){if(!r.canUpdateText)return{ok:!1,errorCode:"capability-denied",reason:"Cannot update repeated text on this node"};if(o?.kind!=="value-binding"||o.sourceKind!=="repeat-template"||!o.locator)return{ok:!1,errorCode:"invalid-params",reason:"update-array-item requires a writable repeat-template source"};let{index:i,value:s}=n.params,a=o.collectionPathMap?.length??o.collectionIndexMap?.length;if(a!==void 0&&i>=a)return{ok:!1,errorCode:"invalid-params",reason:`update-array-item index ${i} is outside the repeated source`};let c=Cs(o,i);if(!c)return{ok:!1,errorCode:"invalid-params",reason:"update-array-item could not resolve the selected repeat item"};let l=this.coerceTextValueForValueTarget(o.file,c,s,"update-array-item");return l.ok?this.isValueTargetUnchanged(o.file,c,l.value)?{ok:!1,errorCode:"invalid-params",reason:"update-array-item value is unchanged"}:this.buildPlan(t,n,[{order:0,file:o.file,type:"update-array-item",locator:c,value:l.value}],r):l}isValueTargetUnchanged(t,n,r){let o=We(this.graph.getFileContent(t));if(!o)return!1;let i=oe(o,n);if(!i.ok)return!1;let s=i.match.path;if(s.isStringLiteral())return typeof r=="string"&&s.node.value===r;if(s.isNumericLiteral())return typeof r=="number"&&Object.is(s.node.value,r);if(s.isBooleanLiteral())return typeof r=="boolean"&&s.node.value===r;if(s.isNullLiteral())return r===null;if(s.isUnaryExpression({operator:"-"})){let a=s.get("argument");return typeof r=="number"&&!Array.isArray(a)&&a.isNumericLiteral()&&Object.is(-a.node.value,r)}return!1}planUpdateText(t,n,r,o,i){if(!o.canUpdateText)return{ok:!1,errorCode:"capability-denied",reason:"Cannot update text on this node"};let s=this.buildTextRewriteSteps(r,n.params.segmentIndex,n.params.value,i,n.selectionRef);return s.ok?this.buildPlan(t,n,s.steps,o):s}async planRemoveNode(t,n,r,o){if(!o.canRemove)return{ok:!1,errorCode:"capability-denied",reason:"Cannot remove this node"};let i=await this.graph.getTextWriteTarget(r.key,0);if(i?.kind==="external-entry")return this.buildPlan(t,n,[{order:0,file:`external:${i.sourceId}`,type:"invoke-external-adapter",sourceType:i.sourceType,sourceId:i.sourceId,adapterId:i.adapterId,capability:"remove-node",value:{operation:"remove-node"}}],o);if(r.isRepeatItemRoot){let d=i;if(d?.kind==="value-binding"&&d.locator){let p=sr(d.locator);if(p)return this.buildPlan(t,n,[{order:0,file:d.file,type:"remove-bound-array-item",locator:p.locator,index:p.index}],o)}return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed node removal requires a writable array target"}}let s=Ao(r,i,this.graph.getTextProvenance?.(r.key,0)??null);if(s)return{ok:!1,errorCode:"unsupported-operation",reason:s};let a=this.getRepeatBackedTemplateStructureReason(r);if(a)return{ok:!1,errorCode:"unsupported-operation",reason:a};let c=await this.getUpstreamBackedDescendantReason(r);if(c)return{ok:!1,errorCode:"unsupported-operation",reason:c};let l=[{order:0,file:r.file,type:"remove-node",locator:fe(r),removeWhitespace:!0}],u=this.buildRemoveComponentImportStep(r);return u&&l.push({...u,order:l.length}),this.buildPlan(t,n,l,o)}buildRemoveComponentImportStep(t,n=this.graph.getFileContent(t.file)){if(!t.importedFrom||!t.exportName||!t.tag||Zx(n,t)>1)return null;let r=Rs(t.file,t.importedFrom);return{order:0,file:t.file,type:"remove-import",moduleSpecifier:r,imports:t.exportName==="default"?[{kind:"default"}]:[{kind:"named",imported:t.exportName}]}}async planInsertChild(t,n,r,o,i){if(!wo(n.params.position))return{ok:!1,errorCode:"unsupported-operation",reason:"Page composition insert-child requires the page composition transaction planner"};if(n.params.node.kind==="component-call"&&!n.params.node.component)return{ok:!1,errorCode:"unsupported-operation",reason:"Materialized component insertion requires the materialization transaction planner"};if(!o.canInsertChild)return{ok:!1,errorCode:"capability-denied",reason:"Cannot insert child into this node"};let s=this.graph.getEditableTextSegmentIndex(r.key),a=s!==null?await this.graph.getTextWriteTarget(r.key,s):null,c=Ao(r,a,s!==null?this.graph.getTextProvenance?.(r.key,s)??null:null);if(c)return{ok:!1,errorCode:"unsupported-operation",reason:c};let l=await this.getUpstreamBackedDescendantReason(r);if(l)return{ok:!1,errorCode:"unsupported-operation",reason:l};let u=await this.planExternalBackedInsertChild(t,n,r,o,i,a);if(u)return u;let d=await this.planRepeatBackedInsertChild(t,n,r,o);if(d)return d;let p=this.getRepeatBackedTemplateStructureReason(r);if(p)return{ok:!1,errorCode:"unsupported-operation",reason:p};let m=vu(this.graph.getFileContent(r.file),r);if(!m.allowed)return{ok:!1,errorCode:"unsupported-operation",reason:m.reason??"Cannot insert child into this node"};let g=Po(r,n.params.node);if(g)return{ok:!1,errorCode:"unsupported-operation",reason:g};let S=[],C=0,v=n.params.node.kind==="component-call"?Wx(n.params.node,this.graph.getFileContent(r.file)):void 0,P=v?.importStep;return P&&S.push({order:C++,file:r.file,type:"add-import",moduleSpecifier:P.moduleSpecifier,imports:P.imports}),S.push({order:C++,file:r.file,type:"insert-child",parentLocator:fe(r),node:{jsx:Hx(n.params.node,v?.localName)},placement:n.params.position.relation,anchorLocator:i?fe(i):void 0}),this.buildPlan(t,n,S,o)}async planExternalBackedInsertChild(t,n,r,o,i,s){if(!wo(n.params.position))return{ok:!1,errorCode:"unsupported-operation",reason:"Page composition insert-child requires the page composition transaction planner"};let a=s?.kind==="external-entry"?s:await this.findExternalInsertContext(r,i);if(!a)return null;let c=i?await this.graph.getTextWriteTarget(i.key,0):null;return this.buildPlan(t,n,[{order:0,file:`external:${a.sourceId}`,type:"invoke-external-adapter",sourceType:a.sourceType,sourceId:a.sourceId,adapterId:a.adapterId,capability:"insert-child",value:{operation:"insert-child",relation:n.params.position.relation,parentKey:r.key,anchorSourceId:c?.kind==="external-entry"?c.sourceId:null,node:Gx(n.params.node)}}],o)}async findExternalInsertContext(t,n){if(n){let o=await this.graph.getTextWriteTarget(n.key,0);if(o?.kind==="external-entry")return o}if(!this.graph.getChildNodes)return null;let r=[...this.graph.getChildNodes(t.key)];for(;r.length>0;){let o=r.shift();if(!o)continue;let i=await this.graph.getTextWriteTarget(o.key,0);if(i?.kind==="external-entry")return i;let s=this.graph.getTextProvenance?.(o.key,0)?.finalSource?.externalSource;if(s)return{kind:"external-entry",file:`external:${s.sourceId}`,sourceType:s.sourceType,sourceId:s.sourceId,adapterId:s.adapterId,displayExpression:s.sourceId};r.push(...this.graph.getChildNodes(o.key))}return null}async planRepeatBackedInsertChild(t,n,r,o){if(!wo(n.params.position))return{ok:!1,errorCode:"unsupported-operation",reason:"Page composition insert-child requires the page composition transaction planner"};if(n.params.position.relation!=="append"&&n.params.position.relation!=="prepend")return null;let i=n.params.node;if(i.kind!=="native-tag"||i.text===void 0||!this.graph.getChildNodes)return null;let s=this.graph.getChildNodes(r.key).find(d=>d.isRepeatItemRoot&&d.tag?.toLowerCase()===i.tag.toLowerCase());if(!s)return null;let a=await this.graph.getTextWriteTarget(s.key,0);if(!a||a.kind!=="value-binding"||!a.locator)return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed insert-child requires a writable value target"};let c=sr(a.locator);if(!c)return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed insert-child requires an array-backed target"};let l=qx(a.locator,i.text);if(l===void 0)return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed insert-child could not infer an item shape from the template"};let u=n.params.position.relation==="prepend"?Ju(0,a.collectionIndexMap):Ju(a.collectionIndexMap?.length??c.index+1,a.collectionIndexMap);return this.buildPlan(t,n,[{order:0,file:a.file,type:"insert-bound-array-item",locator:c.locator,index:u,value:l}],o)}async getUpstreamBackedDescendantReason(t){if(!this.graph.getChildNodes)return null;let n=[...this.graph.getChildNodes(t.key)];for(;n.length>0;){let r=n.shift();if(!r)continue;let o=this.graph.getEditableTextSegmentIndex(r.key),i=o!==null?await this.graph.getTextWriteTarget(r.key,o):null,s=Ao(r,i,o!==null?this.graph.getTextProvenance?.(r.key,o)??null:null);if(s)return s;n.push(...this.graph.getChildNodes(r.key))}return null}getRepeatBackedTemplateStructureReason(t){if(t.isRepeatItemRoot)return this.isRepeatTemplateRootNode(t)?"Cannot edit repeat-backed item template structure with a generic node operation":"Cannot edit repeat-backed child node structure with a generic node operation";if(t.structuralPath.includes("#repeat:")||this.isInsideMapCallback(t))return"Cannot edit repeat-backed child node structure with a generic node operation";let n=t.parentKey;for(;n;){let r=this.graph.getNode(n);if(!r)return null;if(r.isRepeatItemRoot||r.isRepeatRegion)return"Cannot edit repeat-backed child node structure with a generic node operation";n=r.parentKey}return null}isRepeatTemplateRootNode(t){let n=We(this.graph.getFileContent(t.file));if(!n)return t.isRepeatItemRoot===!0;let r=oe(n,fe(t)),o=r.ok&&r.match.path.isJSXElement()?r.match.path:Ts(n,t);if(!o)return t.isRepeatItemRoot===!0;let i=xt(this.graph.getFileContent(t.file),o);return i?ix(o,i):t.isRepeatItemRoot===!0}isInsideMapCallback(t){let n=We(this.graph.getFileContent(t.file));if(!n)return!1;let r=oe(n,fe(t)),o=r.ok&&r.match.path.isJSXElement()?r.match.path:Ts(n,t);return o?!!o.findParent(i=>{if(!i.isCallExpression()&&!i.isOptionalCallExpression())return!1;let s=i.node.callee;return(b.isMemberExpression(s)||b.isOptionalMemberExpression(s))&&b.isIdentifier(s.property)&&s.property.name==="map"}):!1}planRepeatTemplateInternalMove(t,n,r,o,i,s,a){if(r.isRepeatItemRoot&&this.isRepeatTemplateRootNode(r)||r.file!==o.file)return null;let c=this.graph.getFileContent(r.file),l=We(c);if(!l)return null;let u=Mt(l,r),d=Mt(l,o);if(!u||!d)return null;let p=xt(c,u),m=xt(c,d);if(!No(p,m))return null;if(a&&(s==="before"||s==="after")){let S=Mt(l,a),C=S?xt(c,S):null;if(!No(p,C))return null}if(vs(u,d))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child across statement-level conditional branches"};let g=Au(c,r,o);return g.ok?this.buildPlan(t,n,[{order:0,file:r.file,type:"move-node",locator:fe(r),targetParentLocator:fe(o),placement:s,anchorLocator:a?fe(a):void 0,selectionContext:Mn(o)}],i):{ok:!1,errorCode:"unsupported-operation",reason:g.reason??`Cannot move node because it depends on bindings outside the target scope: ${g.bindingNames.join(", ")}`}}planRepeatTemplateHoistMove(t,n,r,o,i,s,a){if(r.isRepeatItemRoot&&this.isRepeatTemplateRootNode(r)||r.file!==o.file)return null;let c=this.graph.getFileContent(r.file),l=We(c);if(!l)return null;let u=Mt(l,r),d=Mt(l,o);if(!u||!d)return null;let p=xt(c,u);if(!p)return null;let m=xt(c,d);if(No(p,m))return null;if(m&&!cx(m,p))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child into a different repeat template"};if(a&&(s==="before"||s==="after")){let w=Tu(c,l,a);if(m&&!No(m,w)||!m&&w)return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child relative to a repeat-template anchor outside the target scope"}}if(r.tag&&r.tag.toLowerCase()===r.tag){let w=Po(o,{kind:"native-tag",tag:r.tag});if(w)return{ok:!1,errorCode:"unsupported-operation",reason:w}}let g=Es(this.graph,r);if(!g)return{ok:!1,errorCode:"locator-miss",reason:"Cannot move repeat-backed child outside its repeat template without preserving the repeat expression"};if(vs(u,d))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child out of a statement-level conditional branch"};let S=ju(c,u,d,g);for(let w of S.conditionPaths){let B=Mu(w,d,p);if(!B.ok)return{ok:!1,errorCode:"unsupported-operation",reason:`Cannot move repeat-backed child because its condition depends on bindings outside the target scope: ${B.bindingNames.join(", ")}`}}let C=Fu(u,d,p,{preserveConditionalBoundary:S.conditionPaths.length>0});if(!C.ok)return{ok:!1,errorCode:"unsupported-operation",reason:C.reason??`Cannot move repeat-backed child because it depends on callback-local bindings: ${C.bindingNames.join(", ")}`};let v=lx(p,d);if(!v.ok)return{ok:!1,errorCode:"unsupported-operation",reason:`Cannot move repeat-backed child because its callback parameters depend on bindings outside the target scope: ${v.bindingNames.join(", ")}`};let P=p;if(r.component!==o.component){let w=dx({source:c,ast:l,sourceContext:p,sourceNode:r,targetParent:o,targetParentPath:d});if(!w.ok)return{ok:!1,errorCode:"unsupported-operation",reason:w.reason};P=w.context}else{let w=zu(p.collectionPath,d);if(!w.ok)return{ok:!1,errorCode:"unsupported-operation",reason:w.reason??`Cannot move repeat-backed child because the repeat collection is not visible at the target: ${w.bindingNames.join(", ")}`}}return this.buildPlan(t,n,[{order:0,file:r.file,type:"move-repeat-template-child",locator:fe(r),targetParentLocator:fe(o),placement:s,anchorLocator:a?fe(a):void 0,repeatExpression:Bu(P,S.sourceJsx),selectionContext:Mn(o)}],i)}planCrossFileRepeatTemplateHoistMove(t,n,r,o,i,s,a){if(r.isRepeatItemRoot&&this.isRepeatTemplateRootNode(r)||r.file===o.file)return null;let c=this.graph.getFileContent(r.file),l=this.graph.getFileContent(o.file),u=We(c),d=We(l);if(!u||!d)return null;let p=px({knownSourceFiles:this.graph.getKnownSourceFiles?.(),routeEntryFiles:this.graph.getRouteEntryFiles?.(),sourceAst:u,sourceFile:r.file,targetFile:o.file,sourceComponent:r.component,targetComponent:o.component});if(!p.ok)return{ok:!1,errorCode:"unsupported-operation",reason:p.reason};let m=Mt(u,r),g=Mt(d,o);if(!m||!g)return null;let S=ld(p.callSitePath,g);if(!S.ok)return{ok:!1,errorCode:"unsupported-operation",reason:S.reason};let C=xt(c,m);if(!C)return null;if(xt(l,g))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child into a different repeat template"};if(a&&(s==="before"||s==="after")&&Tu(l,d,a))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child relative to a repeat-template anchor outside the target scope"};if(r.tag&&r.tag.toLowerCase()===r.tag){let F=Po(o,{kind:"native-tag",tag:r.tag});if(F)return{ok:!1,errorCode:"unsupported-operation",reason:F}}let P=Es(this.graph,r);if(!P)return{ok:!1,errorCode:"locator-miss",reason:"Cannot move repeat-backed child outside its repeat template without preserving the repeat expression"};if(vs(m,g))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child out of a statement-level conditional branch"};let w=ju(c,m,g,P);for(let F of w.conditionPaths){let L=Mu(F,g,C);if(!L.ok)return{ok:!1,errorCode:"unsupported-operation",reason:`Cannot move repeat-backed child because its condition depends on bindings outside the target scope: ${L.bindingNames.join(", ")}`}}let B=Fu(m,g,C,{preserveConditionalBoundary:w.conditionPaths.length>0});if(!B.ok)return{ok:!1,errorCode:"unsupported-operation",reason:B.reason??`Cannot move repeat-backed child because it depends on callback-local bindings: ${B.bindingNames.join(", ")}`};let re=_x({sourceFile:r.file,targetFile:o.file,sourceContext:C,targetParentPath:g});if(!re.ok)return{ok:!1,errorCode:"unsupported-operation",reason:re.reason};let ee=Ox(C);if(!ee.ok)return{ok:!1,errorCode:"unsupported-operation",reason:ee.reason};let N=Dx(C,ee.callbackParams),J=[{order:0,file:r.file,type:"remove-node",locator:fe(r),removeWhitespace:!0}];for(let F of re.imports)J.push({order:J.length,file:o.file,type:"add-import",moduleSpecifier:F.moduleSpecifier,imports:F.imports});return J.push({order:J.length,file:o.file,type:"insert-jsx-expression-child",parentLocator:fe(o),expression:Bu(N,w.sourceJsx),placement:s,anchorLocator:a?fe(a):void 0,selectionContext:Mn(o)}),this.buildPlan(t,n,J,i)}async planMoveNode(t,n,r,o){if(!o.canMove)return{ok:!1,errorCode:"capability-denied",reason:"Cannot move this node"};let i=Ku(n.params.target,this.graph),s=i.parentNode;if(!s)return{ok:!1,errorCode:"locator-miss",reason:`Target parent for request '${n.id}' not found in graph`};if(Qx(s.key,r.key,this.graph))return{ok:!1,errorCode:"capability-denied",reason:"Cannot move node into its own subtree"};if(r.isRepeatRegion&&s.isBoundary)return{ok:!1,errorCode:"capability-denied",reason:"Cannot move repeat-region node across boundary"};if(!this.graph.getCapability(s.key).canInsertChild)return{ok:!1,errorCode:"capability-denied",reason:"Cannot move node into this parent"};let a=await this.graph.getTextWriteTarget(r.key,0);if(a?.kind==="external-entry"){let v=n.params.target.relation,P=i.anchorNode&&(v==="before"||v==="after")?await this.graph.getTextWriteTarget(i.anchorNode.key,0):null;return this.buildPlan(t,n,[{order:0,file:`external:${a.sourceId}`,type:"invoke-external-adapter",sourceType:a.sourceType,sourceId:a.sourceId,adapterId:a.adapterId,capability:"move-node",value:{operation:"move-node",relation:v,anchorSourceId:P?.kind==="external-entry"?P.sourceId:null,parentKey:"parentKey"in n.params.target?n.params.target.parentKey:null}}],o)}let c=r.file!==s.file,l=n.params.target.relation,u=i.anchorNode,d=Ao(r,a,this.graph.getTextProvenance?.(r.key,0)??null);if(d&&!Is(d))return{ok:!1,errorCode:"unsupported-operation",reason:d};if(r.isRepeatItemRoot&&u?.isRepeatItemRoot&&r.repeatOwnerKey&&r.repeatOwnerKey===u.repeatOwnerKey&&(l==="before"||l==="after")){let v=a,P=await this.graph.getTextWriteTarget(u.key,0);if(v?.kind==="value-binding"&&P?.kind==="value-binding"&&v.locator&&P.locator){let w=sr(v.locator),B=sr(P.locator);if(w&&B&&v.file===P.file&&nS(w.locator,B.locator)){let re=w.index,ee=B.index,N=l==="before"?ee-(re<ee?1:0):ee+(re<ee?0:1);return this.buildPlan(t,n,[{order:0,file:v.file,type:"move-array-item",locator:w.locator,fromIndex:re,toIndex:N}],o)}}}if(r.isRepeatItemRoot&&this.isRepeatTemplateRootNode(r))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed item outside its collection"};let p=this.getRepeatBackedTemplateStructureReason(r),m=Is(d)?d:p;if(m&&Is(m)){let v=this.planRepeatTemplateInternalMove(t,n,r,s,o,l,u);if(v)return v;let P=this.planRepeatTemplateHoistMove(t,n,r,s,o,l,u);if(P)return P;let w=this.planCrossFileRepeatTemplateHoistMove(t,n,r,s,o,l,u);return w||{ok:!1,errorCode:"unsupported-operation",reason:m}}if(p)return{ok:!1,errorCode:"unsupported-operation",reason:p};let g=await this.getUpstreamBackedDescendantReason(r);if(g)return{ok:!1,errorCode:"unsupported-operation",reason:g};if(r.tag&&r.tag.toLowerCase()===r.tag){let v=Po(s,{kind:"native-tag",tag:r.tag});if(v)return{ok:!1,errorCode:"unsupported-operation",reason:v}}if(c)return this.planCrossFileMove(t,n,r,s,o,l,u);let S=Au(this.graph.getFileContent(r.file),r,s);if(!S.ok)return{ok:!1,errorCode:"unsupported-operation",reason:S.reason??`Cannot move node because it depends on bindings outside the target scope: ${S.bindingNames.join(", ")}`};let C=[{order:0,file:r.file,type:"move-node",locator:fe(r),targetParentLocator:fe(s),placement:l,anchorLocator:u?fe(u):void 0,selectionContext:Mn(s)}];return this.buildPlan(t,n,C,o)}planCrossFileMove(t,n,r,o,i,s,a){let c=[],l=0,u=this.graph.getFileContent(r.file),d=Es(this.graph,r)??`<${r.component} />`,p=ku(u,r);if(!p.allowed)return{ok:!1,errorCode:"unsupported-operation",reason:p.reason??"Cannot move subtree across files"};if(c.push({order:l++,file:r.file,type:"remove-node",locator:fe(r),removeWhitespace:!0}),r.importedFrom&&r.exportName){let g=r.tag??r.component,C={moduleSpecifier:Rs(o.file,r.importedFrom),imports:r.exportName==="default"?[{kind:"default",local:g}]:[{kind:"named",imported:r.exportName,local:g===r.exportName?void 0:g}]};c.push({order:l++,file:o.file,type:"add-import",moduleSpecifier:C.moduleSpecifier,imports:C.imports}),c.push({order:l++,file:o.file,type:"insert-child",parentLocator:fe(o),node:{jsx:d},placement:s,anchorLocator:a?fe(a):void 0,selectionContext:Mn(o)})}else c.push({order:l++,file:o.file,type:"insert-child",parentLocator:fe(o),node:{jsx:d},placement:s,anchorLocator:a?fe(a):void 0,selectionContext:Mn(o)});let m=this.buildRemoveComponentImportStep(r,u);return m&&c.push({...m,order:l++}),this.buildPlan(t,n,c,i)}buildPlan(t,n,r,o){let s=[...new Set(r.map(a=>a.file))].map(a=>({file:a,content:this.graph.getFileContent(a),version:this.graph.getFileVersion(a),exists:!0,sha256:le(this.graph.getFileContent(a))}));return{ok:!0,plan:{operationId:t,kind:n.kind,target:n.target,documentVersion:n.documentVersion,steps:r,preSnapshots:s,validatedCapability:o}}}};import lr from"node:path";import*as Ed from"@babel/parser";import js from"@babel/traverse";import*as E from"@babel/types";var Id=typeof js=="function"?js:js.default;function vd(e){return new Map([...e].map(t=>[t.file,{source:t.source,ast:t.ast}]))}var dd=new WeakMap;function fd(e,t,n){return{kind:"external",file:e,sourceType:"api-field",sourceId:t,displayPath:n,editMode:"readonly",diagnostics:[{code:"external-source-readonly",message:"Dynamic API data is read-only for content edits"}]}}async function kd(e){let{file:t,source:n,segment:r,readFile:o,exists:i}=e,s=e.fileCache??new Map,a=Zs(s,t,n);if(!a)return null;let c=Qs(a,r.sourceRange);if(!c)return null;let l=r.source??await rt({expression:c.node,scope:c.scope,source:n,currentFile:t,readFile:o,exists:i,fileCache:s,visited:new Set});if(!l){let m=await ia({currentFile:t,expressionPath:c,readFile:o,exists:i,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:s,visited:new Set});if(!m)return null;if(m.kind==="external")return{kind:"external-entry",file:m.file,sourceType:m.sourceType,sourceId:m.sourceId,adapterId:m.adapterId,displayExpression:m.displayPath};let g={kind:"value",root:m.root,path:m.path.length>0?m.path:[]};return{kind:"value-binding",file:m.file,locator:g,root:m.root,path:m.path,displayExpression:m.displayExpression??fr(c.node,n),sourceKind:m.sourceKind,...m.collectionIndexMap?{collectionIndexMap:m.collectionIndexMap}:{},...m.collectionPathMap?{collectionPathMap:m.collectionPathMap}:{}}}let u=new Set,d=await FS({currentFile:t,expressionPath:c,segment:{...r,source:l},readFile:o,exists:i,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:s,visited:u});if(!d)return null;if(d.kind==="external")return{kind:"external-entry",file:d.file,sourceType:d.sourceType,sourceId:d.sourceId,adapterId:d.adapterId,displayExpression:d.displayPath};let p={kind:"value",root:d.root,path:d.path.length>0?d.path:[]};return{kind:"value-binding",file:d.file,locator:p,root:d.root,path:d.path,displayExpression:d.displayExpression??l.expression,sourceKind:d.sourceKind,...d.collectionIndexMap?{collectionIndexMap:d.collectionIndexMap}:{},...d.collectionPathMap?{collectionPathMap:d.collectionPathMap}:{}}}async function Cd(e){let{file:t,source:n,readFile:r,exists:o}=e,i=e.fileCache??new Map,s=Zs(i,t,n);if(!s)return null;let a=e.expression!==void 0?(e.sourceRange?Pd(s,n,e.expression,e.sourceRange):null)??ta(s,n,e.expression):e.sourceRange?Qs(s,e.sourceRange):null;if(!a)return null;let c=lS(a),l=new Set,u=e.sourceInfo??await rt({expression:c.node,scope:c.scope,source:n,currentFile:t,readFile:r,exists:o,fileCache:i,visited:l}),d=u?await je({currentFile:t,expressionPath:c,sourceInfo:u,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:l}):await WS({currentFile:t,expressionPath:c,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:l});return cS(d,e.expression??fr(c.node,n))}async function Ys(e){let{file:t,source:n,readFile:r,exists:o}=e,i=e.fileCache??new Map,s=Zs(i,t,n);if(!s)return Be("unsupported-expression","Unable to parse source for provenance resolution");let a=new Set;return e.target.kind==="text-segment"?uS({file:t,source:n,ast:s,segment:e.target.segment,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:a}):dS({file:t,source:n,ast:s,candidate:e.target.candidate,readFile:r,exists:o,graph:e.graph,fileCache:i,visited:a})}function Rd(e){try{return Ed.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Zs(e,t,n){let r=e.get(t);if(r?.source===n)return r.ast;let o=Rd(n);return e.set(t,{source:n,ast:o}),o}function Qs(e,t){let n=null,r=-1;for(let o of dr(e).expressions){let i=o.node.loc;if(!i||!qs(i,t))continue;let s=(o.node.end??0)-(o.node.start??0);s>=r&&(n=o,r=s)}return n}function sS(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let o of dr(e).expressions){if(!aS(o.node.loc,t))continue;let i=(o.node.end??0)-(o.node.start??0);i<=r&&(n=o,r=i)}return n}function wd(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let o of dr(e).jsxElements){let i=o.node.loc;if(!i||!qs(i,t))continue;let s=(o.node.end??0)-(o.node.start??0);s<=r&&(n=o,r=s)}return n}function dr(e){let t=dd.get(e);if(t)return t;let n={expressions:[],jsxElements:[]};return Id(e,{Expression(r){n.expressions.push(r)},JSXElement(r){n.jsxElements.push(r)}}),dd.set(e,n),n}function aS(e,t){return e?e.start.line===t.startLine&&e.start.column===t.startColumn&&e.end.line===t.endLine&&e.end.column===t.endColumn:!1}function qs(e,t){let n=pd({line:e.start.line,column:e.start.column},{line:t.startLine,column:t.startColumn}),r=pd({line:e.end.line,column:e.end.column},{line:t.endLine,column:t.endColumn});return n>=0&&r<=0}function Nd(e){return e.loc?{startLine:e.loc.start.line,startColumn:e.loc.start.column,endLine:e.loc.end.line,endColumn:e.loc.end.column}:null}function pd(e,t){return e.line!==t.line?e.line<t.line?-1:1:e.column!==t.column?e.column<t.column?-1:1:0}async function rt(e){if(E.isIdentifier(e.expression))return{kind:"identifier",expression:e.expression.name,base:e.expression.name,path:[]};if(!E.isMemberExpression(e.expression))return null;let t=await $d(e.expression,e.scope,e.currentFile,e.readFile,e.exists,e.fileCache,e.visited);return t?{kind:t.path.some(n=>n.kind==="index")?"index-expression":"member-expression",expression:fr(e.expression,e.source),base:t.base,path:t.path}:null}function cS(e,t){if(!e)return null;if(e.kind==="external")return{kind:"external-entry",file:e.file,sourceType:e.sourceType,sourceId:e.sourceId,adapterId:e.adapterId,displayExpression:e.displayPath};let n={kind:"value",root:e.root,path:e.path.length>0?e.path:[]};return{kind:"value-binding",file:e.file,locator:n,root:e.root,path:e.path,displayExpression:e.displayExpression??t,sourceKind:e.sourceKind,...e.collectionIndexMap?{collectionIndexMap:e.collectionIndexMap}:{},...e.collectionPathMap?{collectionPathMap:e.collectionPathMap}:{}}}function lS(e){if(e.isLogicalExpression()&&(e.node.operator==="||"||e.node.operator==="??")){let t=e.get("left");if(!Array.isArray(t)&&t.isExpression())return t}return e}function fr(e,t){if(t)return ea(e,t);let n=nb(e);return n?n.path.reduce((r,o)=>o.kind==="property"?`${r}.${o.name}`:`${r}[${o.index}]`,n.base):""}function ea(e,t){return e.start==null||e.end==null?"":t.slice(e.start,e.end)}function ta(e,t,n){let r=null,o=Number.POSITIVE_INFINITY;for(let i of dr(e).expressions){if(ea(i.node,t)!==n)continue;let s=(i.node.end??0)-(i.node.start??0);s<=o&&(r=i,o=s)}return r}function Pd(e,t,n,r){let o=null,i=Number.POSITIVE_INFINITY;for(let s of dr(e).expressions){if(ea(s.node,t)!==n)continue;let a=s.node.loc;if(!a||!qs(a,r))continue;let c=(s.node.end??0)-(s.node.start??0);c<=i&&(o=s,i=c)}return o}async function uS(e){let{file:t,source:n,ast:r,segment:o,readFile:i,exists:s,fileCache:a,visited:c}=e,l=Qs(r,o.sourceRange),u=o.source??(l?await rt({expression:l.node,scope:l.scope,source:n,currentFile:t,readFile:i,exists:s,fileCache:a,visited:c}):null);if(!u){if(!l)return fS(t,o.value);let p=await ia({currentFile:t,expressionPath:l,readFile:i,exists:s,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:a,visited:c});return p?p.kind==="external"?xd(t,p):Xs(t,fr(l.node,n),p):pS({expression:l.node,scope:l.scope,currentFile:t,source:n,readFile:i,exists:s,fileCache:a,visited:c,functionCallContracts:e.functionCallContracts})}if(!l)return Be("unsupported-expression","Unable to locate text expression for provenance resolution");let d=await je({currentFile:t,expressionPath:l,sourceInfo:u,readFile:i,exists:s,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:a,visited:c});if(!d){let p=Js(l.node);if(p)return Be(p.code,p.message);let m=l.scope.getBinding(u.base);if(m?.path.isVariableDeclarator()){let g=Js(m.path.node.init);if(g)return Be(g.code,g.message)}return m?.path.isVariableDeclarator()&&E.isCallExpression(m.path.node.init)?mS("unsupported-expression",Md(m.path.node.init,e.functionCallContracts)):Be("unsupported-expression",`Unable to resolve provenance for expression "${u.expression}"`)}return d.kind==="external"?xd(t,d):Xs(t,u.expression,d)}async function dS(e){let{file:t,source:n,ast:r,candidate:o,readFile:i,exists:s,fileCache:a,visited:c}=e;if(!o.conditionSource)return Be("conditional-branch-unresolved",`Unable to resolve conditional branch source for "${o.conditionExpression}"`);let l=ta(r,n,o.conditionExpression);if(!l)return Be("conditional-branch-unresolved",`Unable to locate conditional expression "${o.conditionExpression}"`);let u=await je({currentFile:t,expressionPath:l,sourceInfo:o.conditionSource,readFile:i,exists:s,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:a,visited:c});if(!u)return Be("conditional-branch-unresolved",`Unable to resolve conditional branch source for "${o.conditionExpression}"`);if(u.kind==="external")return Be("conditional-branch-unresolved",`Unable to resolve conditional branch source for "${o.conditionExpression}"`);let d=Xs(t,o.conditionExpression,u);return d.finalSource?{...d,finalSource:{...d.finalSource,kind:"conditional-branch",displayPath:o.conditionExpression},chain:[...d.chain,{kind:"conditional-branch",file:u.file,displayName:o.conditionExpression,canEditHere:!0}]}:d}function fS(e,t){return{finalSource:{kind:"jsx-literal",file:e,locator:null,displayPath:t},chain:[{kind:"jsx-literal",file:e,displayName:t,canEditHere:!0}],confidence:"exact",editMode:"direct",diagnostics:[]}}async function pS(e){let t=await Td(e);if(t.length===0)return Be("unsupported-expression",`Unsupported expression type: ${e.expression.type}`);if(gS(e.expression))return Ad(t);if(Fd(e.expression))return Be("unsupported-expression","i18n helpers require a static message id string");if(E.isMemberExpression(e.expression)&&e.expression.computed&&!E.isNumericLiteral(e.expression.property)&&!E.isStringLiteral(e.expression.property))return Be("dynamic-key","Computed member expressions are not supported for provenance resolution");let[n]=t;return Be(n.code,n.message)}function Be(e,t){return{finalSource:null,chain:[],confidence:"unknown",editMode:"unsupported",diagnostics:[{code:e,message:t}]}}function mS(e,t){return Ad([{code:e,message:t}])}function Ad(e){return{finalSource:null,chain:[],confidence:"partial",editMode:"readonly",diagnostics:e}}function gS(e){return E.isCallExpression(e)||E.isConditionalExpression(e)||E.isLogicalExpression(e)||E.isBinaryExpression(e)}function ur(e){let t=new Set;return e.filter(n=>{let r=`${n.code}:${n.message}`;return t.has(r)?!1:(t.add(r),!0)})}async function Td(e){let{expression:t,scope:n,currentFile:r,readFile:o,exists:i,fileCache:s,visited:a,functionCallContracts:c}=e,l=Js(t);if(l)return[l];if(E.isCallExpression(t))return[{code:"unsupported-expression",message:Md(t,c)}];if(E.isMemberExpression(t)&&t.computed){let u=t.property;if(!E.isNumericLiteral(u)&&!E.isStringLiteral(u)){if(!E.isExpression(u))return[{code:"dynamic-key",message:"Computed member expressions are not supported for provenance resolution"}];let p=await ot(u,n,r,o,i,s,a);if(typeof p!="string"&&!Number.isInteger(p))return[{code:"dynamic-key",message:"Computed member expressions are not supported for provenance resolution"}]}}return E.isBinaryExpression(t)?ur([...await $s(t.left,t.right,e),{code:"unsupported-expression",message:"Mixed expressions are recognized but remain readonly until a safer composition editing strategy is available"}]):E.isLogicalExpression(t)?ur([...await $s(t.left,t.right,e),{code:"unsupported-expression",message:t.operator==="??"||t.operator==="||"?"Fallback expressions are recognized but remain readonly until a safer composition editing strategy is available":"Complex conditional expressions are recognized but remain readonly until a safer editing strategy is available"}]):E.isConditionalExpression(t)?ur([...await $s(t.test,t.consequent,t.alternate,e),{code:"unsupported-expression",message:"Complex conditional expressions are recognized but remain readonly until a safer editing strategy is available"}]):[]}function Js(e){return Fd(e)?md("i18n helpers require a static message id string"):bS(e)?md("CMS helpers require static entry id and field path string arguments"):null}async function $s(...e){let t=e[e.length-1],n=e.slice(0,-1),r=[];for(let o of n)r.push(...await Td({...t,expression:o}));return r}function hS(e,t){let n=(t??[]).filter(r=>r.sourceType===e.sourceType&&(r.capabilities===void 0||r.capabilities.includes("write-text")));if(e.adapterId){let r=n.find(o=>o.adapterId===e.adapterId);if(r)return{adapterId:r.adapterId,editMode:"proxy",diagnostics:[]}}else if(n.length>0)return{adapterId:n[0]?.adapterId,editMode:"proxy",diagnostics:[]};return{adapterId:void 0,editMode:"readonly",diagnostics:[yS(e.sourceType)]}}async function na(e){for(let n of kS){if(!gd(e.expressionPath,n.helperNames))continue;let r=await n.resolve(e);if(r)return yd(hd(r),e.externalAdapters)}let t={currentFile:e.currentFile,expressionPath:e.expressionPath,readFile:e.readFile,exists:e.exists,graph:e.graph};for(let n of e.externalSourceResolvers??[]){if(!gd(e.expressionPath,n.helperNames))continue;let r=await n.resolve(t);if(r)return yd(hd(r),e.externalAdapters)}return null}function yS(e){return{code:"missing-adapter",message:`No external adapter is registered for ${e}`}}function xS(e){return{code:"external-source-readonly",message:e}}function md(e){return{code:"unsupported-expression",message:e}}function ra(e){return!e||!E.isCallExpression(e)?null:E.isIdentifier(e.callee)?e.callee.name:E.isMemberExpression(e.callee)&&!e.callee.computed&&E.isIdentifier(e.callee.object)&&E.isIdentifier(e.callee.property)?`${e.callee.object.name}.${e.callee.property.name}`:null}function gd(e,t){if(!t||t.length===0)return!0;let n=ra(e.node);return n?t.includes(n):!1}function hd(e){return"match"in e?{match:e.match,editMode:e.editMode,diagnostics:ur(e.diagnostics??[])}:{match:e,diagnostics:[]}}function yd(e,t){let n=hS(e.match,t);return{kind:"external",file:e.match.file,sourceType:e.match.sourceType,sourceId:e.match.sourceId,adapterId:e.match.adapterId??n.adapterId,displayPath:e.match.displayPath,editMode:e.editMode==="readonly"?"readonly":n.editMode,diagnostics:ur([...e.diagnostics,...e.editMode==="readonly"||n.editMode==="readonly"?n.diagnostics:[]])}}function SS(e){if(!e.isCallExpression())return null;let t=e.node.callee;if(!E.isIdentifier(t)||t.name!=="getCmsField")return null;let[n,r]=e.node.arguments;if(!n||!r||!E.isStringLiteral(n)||!E.isStringLiteral(r))return null;let o=n.value,i=r.value;return{sourceType:"cms-field",sourceId:`${o}:${i}`,file:`cms://${o}/${i.replace(/\./g,"/")}`,displayPath:`${o}.${i}`}}function bS(e){return!!e&&E.isCallExpression(e)&&E.isIdentifier(e.callee)&&e.callee.name==="getCmsField"&&(e.arguments.length<2||!E.isStringLiteral(e.arguments[0])||!E.isStringLiteral(e.arguments[1]))}function _d(e){if(!(!e||!E.isCallExpression(e))){if(E.isIdentifier(e.callee)&&e.callee.name==="t"){let[t]=e.arguments;return t&&E.isStringLiteral(t)?t.value:null}if(E.isMemberExpression(e.callee)&&!e.callee.computed&&E.isIdentifier(e.callee.object)&&e.callee.object.name==="intl"&&E.isIdentifier(e.callee.property)&&e.callee.property.name==="formatMessage"){let[t]=e.arguments;if(!t||!E.isObjectExpression(t))return null;for(let n of t.properties)if(E.isObjectProperty(n)&&!n.computed&&(E.isIdentifier(n.key)&&n.key.name==="id"||E.isStringLiteral(n.key)&&n.key.value==="id")&&E.isStringLiteral(n.value))return n.value.value;return null}}}function Fd(e){return _d(e)===null}async function ES(e,t,n){let r=new Set,o=lr.posix.dirname(e);for(;r.add(o),!(o==="."||o==="/");){let i=lr.posix.dirname(o);if(i===o){r.add(".");break}o=i}r.add("src"),r.add(".");for(let i of r){let s=i==="."?["locales","messages"]:[lr.posix.join(i,"locales"),lr.posix.join(i,"messages")];for(let a of s){let c=lr.posix.join(a,`${t}.json`);if(await n(c))return c}}return null}async function IS(e){let t=_d(e.expressionPath.node);if(typeof t!="string"||t.length===0)return null;let n="en",r=await ES(e.currentFile,n,e.exists);return r?{sourceType:"i18n-message",sourceId:`${n}:${t}`,file:r,displayPath:t}:null}async function vS(e){if(!e.expressionPath.isCallExpression())return null;let t=e.expressionPath.node.callee;if(!E.isIdentifier(t)||t.name!=="apiField")return null;let[n,r]=e.expressionPath.node.arguments;if(!n||!E.isExpression(n))return null;let o=await ot(n,e.expressionPath.scope,e.currentFile,e.readFile,e.exists,e.fileCache,e.visited);if(typeof o!="string"||o.length===0)return null;let i={sourceType:"api-field",sourceId:o,file:`api://${o}`,displayPath:o};return r?{match:i,editMode:"readonly",diagnostics:[xS("API mapping transforms must stay readonly until a reversible mapping strategy is registered")]}:i}var kS=[{helperNames:["getCmsField"],resolve:({expressionPath:e})=>SS(e)},{helperNames:["apiField"],resolve:e=>vS(e)},{helperNames:["t","intl.formatMessage"],resolve:({currentFile:e,expressionPath:t,exists:n})=>IS({currentFile:e,expressionPath:t,exists:n})}];function xd(e,t){return{finalSource:{kind:t.sourceType,file:t.file,locator:null,displayPath:t.displayPath,externalSource:{sourceType:t.sourceType,sourceId:t.sourceId,adapterId:t.adapterId}},chain:[...t.chainPrefix??[],{kind:t.sourceType,file:t.file,displayName:t.displayPath,canEditHere:t.editMode!=="readonly"}],confidence:"exact",editMode:t.editMode==="direct"?t.file===e?"direct":"proxy":t.editMode,diagnostics:t.diagnostics}}function Xs(e,t,n){let r={kind:"value",root:n.root,path:n.path.length>0?n.path:[]},o=n.path.some(l=>l.kind==="index"),i=_S(n),s;n.semanticKind?s=n.semanticKind:i?s="config-entry":n.sourceKind==="repeat-template"?s="repeat-template":n.path.length===0?s=n.sourceKind==="imported-binding"?"imported-binding":"binding":s=o?"array-item":"object-field";let a=n.displayExpression??t,c=[...n.chainPrefix??[]];return n.sourceKind==="binding"?c.push({kind:"binding",file:n.file,displayName:n.root.kind==="binding"?n.root.name:a,canEditHere:!0}):n.sourceKind==="imported-binding"?c.push({kind:"imported-binding",file:n.file,displayName:n.root.kind==="named-export"?n.root.name:"default",canEditHere:!0}):n.sourceKind==="repeat-template"&&c.push({kind:"repeat-template",file:n.file,displayName:t,canEditHere:!0}),n.path.length>0&&n.sourceKind!=="repeat-template"&&c.push({kind:o?"array-item":"object-field",file:n.file,displayName:a,canEditHere:!0}),i&&c.push({kind:"config-entry",file:n.file,displayName:i.displayPath,canEditHere:!0}),{finalSource:{kind:s,file:n.file,locator:r,root:n.root,path:n.path,displayPath:a,externalSource:i?{sourceType:"config-entry",sourceId:i.sourceId}:void 0},chain:c,confidence:n.sourceKind==="repeat-template"?"safe-derived":"exact",editMode:n.editMode??(n.file===e?"direct":"proxy"),diagnostics:n.diagnostics??[]}}var CS=[{helperName:"formatPrice",purity:"pure",sourceArgIndex:0},{helperName:"formatDate",purity:"pure",sourceArgIndex:0},{helperName:"pickLabel",purity:"pure",sourceArgIndex:0}];function oa(e,t){let n=[...CS,...t??[]];for(let r=n.length-1;r>=0;r-=1){let o=n[r];if(o?.helperName===e)return o}return null}function Md(e,t){let n=e.callee;return E.isIdentifier(n)&&oa(n.name,t)?.purity==="side-effect"?`Helper "${n.name}" is registered as side-effectful and remains readonly`:"Function calls are recognized but remain readonly until a pure-call strategy is registered"}async function ia(e){let t=await na(e);if(t)return t;let n=await Od({...e,expressionPath:e.expressionPath});if(n)return n;if(e.expressionPath.isTemplateLiteral()){let r=e.expressionPath.node.expressions[0],o=e.expressionPath.get("expressions.0");if(e.expressionPath.node.expressions.length===1&&r&&o&&!Array.isArray(o)&&o.isExpression()){let i=await rt({expression:o.node,scope:o.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(i){let s=await je({...e,expressionPath:o,sourceInfo:i});if(s&&s.kind==="value")return{...s,displayExpression:i.expression,editMode:"readonly",diagnostics:[{code:"unsupported-expression",message:"Mixed expressions are recognized but remain readonly until a safer composition editing strategy is available"}]}}}}return await AS(e)}async function Od(e){let t=await tt({...e,allowComposed:!1});return t?.kind==="source"?t.provenance:null}async function tt(e){let t=RS(e.expressionPath),n=PS(e.currentFile,t.node);if(n&&e.visited.has(n))return null;n&&e.visited.add(n);try{if(t.isStringLiteral()||t.isNumericLiteral()||t.isBooleanLiteral()||t.isNullLiteral())return{kind:"none"};if(t.isIdentifier()){let r=await rt({expression:t.node,scope:t.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(!r)return null;let o=await je({currentFile:e.currentFile,expressionPath:t,sourceInfo:r,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return!o||o.kind==="external"?null:{kind:"source",provenance:o}}if(t.isMemberExpression()){let r=await rt({expression:t.node,scope:t.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(!r)return null;let o=await je({currentFile:e.currentFile,expressionPath:t,sourceInfo:r,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return!o||o.kind==="external"?null:{kind:"source",provenance:o}}if(t.isConditionalExpression()){let r=t.get("test"),o=t.get("consequent"),i=t.get("alternate");if(Array.isArray(r)||Array.isArray(o)||Array.isArray(i)||!r.isExpression()||!o.isExpression()||!i.isExpression())return null;let s=await tt({...e,expressionPath:r,allowComposed:!0}),a=await tt({...e,expressionPath:o,allowComposed:!1}),c=await tt({...e,expressionPath:i,allowComposed:!1});return Vs(s,a,c)}if(t.isCallExpression())return wS({...e,expressionPath:t});if(!e.allowComposed)return null;if(t.isBinaryExpression()){let r=t.get("left"),o=t.get("right");if(Array.isArray(r)||Array.isArray(o)||!r.isExpression()||!o.isExpression())return null;let i=await tt({...e,expressionPath:r,allowComposed:!0}),s=await tt({...e,expressionPath:o,allowComposed:!0});return Vs(i,s)}if(t.isLogicalExpression()){let r=t.get("left"),o=t.get("right");if(Array.isArray(r)||Array.isArray(o)||!r.isExpression()||!o.isExpression())return null;let i=await tt({...e,expressionPath:r,allowComposed:!0}),s=await tt({...e,expressionPath:o,allowComposed:!0});return Vs(i,s)}if(t.isUnaryExpression()){let r=t.get("argument");return Array.isArray(r)||!r.isExpression()?null:tt({...e,expressionPath:r,allowComposed:!0})}return null}finally{n&&e.visited.delete(n)}}function RS(e){let t=e;for(;t.isParenthesizedExpression()||t.isTSAsExpression()||t.isTSSatisfiesExpression()||t.isTSNonNullExpression()||t.isTSTypeAssertion();){let n=t.get("expression");if(Array.isArray(n)||!n.isExpression())return t;t=n}return t}async function wS(e){let t=ra(e.expressionPath.node);if(t==="Math.round"||t==="Math.floor"||t==="Math.ceil"||t==="Math.trunc"||t==="useCountUp"){let r=e.expressionPath.get("arguments.0");return!r||Array.isArray(r)||!r.isExpression()?null:tt({...e,expressionPath:r,allowComposed:!1})}let n=e.expressionPath.get("callee");if(n.isMemberExpression()&&!n.node.computed){let r=n.node.property;if(E.isIdentifier(r)&&(r.name==="toFixed"||r.name==="toString")){let o=n.get("object");return Array.isArray(o)||!o.isExpression()?null:tt({...e,expressionPath:o,allowComposed:!1})}}return null}function Vs(...e){let t=null;for(let n of e){if(!n)return null;if(n.kind!=="none"){if(!t){t=n.provenance;continue}if(!NS(t,n.provenance))return null}}return t?{kind:"source",provenance:t}:{kind:"none"}}function NS(e,t){return e.file===t.file&&e.sourceKind===t.sourceKind&&JSON.stringify(e.root)===JSON.stringify(t.root)&&JSON.stringify(e.path)===JSON.stringify(t.path)&&JSON.stringify(e.collectionIndexMap??null)===JSON.stringify(t.collectionIndexMap??null)&&JSON.stringify(e.collectionPathMap??null)===JSON.stringify(t.collectionPathMap??null)}function PS(e,t){return t.start==null||t.end==null?null:`safe-derived:${e}:${t.start}:${t.end}`}async function AS(e){if(!e.expressionPath.isCallExpression())return null;let t=ra(e.expressionPath.node);if(!t)return null;let n=oa(t,e.functionCallContracts);if(!n||n.purity!=="pure")return null;let r=n.sourceArgIndex??0,o=e.expressionPath.get(`arguments.${r}`);return!o||Array.isArray(o)||!o.isExpression()?null:await Dd({currentFile:e.currentFile,argumentPath:o,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited})}async function Dd(e){let t=await na({currentFile:e.currentFile,expressionPath:e.argumentPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(t)return t;let n=await rt({expression:e.argumentPath.node,scope:e.argumentPath.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(n){let r=await je({currentFile:e.currentFile,expressionPath:e.argumentPath,sourceInfo:n,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return!r||r.kind==="external"?r:{...r,displayExpression:n.expression}}return await ia({currentFile:e.currentFile,expressionPath:e.argumentPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited})}async function TS(e){if(!e.binding.path.isVariableDeclarator())return null;let t=e.binding.path.node.init;if(!t||!E.isCallExpression(t))return null;let n=t.callee;if(!E.isIdentifier(n))return null;let r=oa(n.name,e.functionCallContracts);if(!r||r.purity!=="pure")return null;let o=r.sourceArgIndex??0,i=e.binding.path.get("init");if(!i||Array.isArray(i)||!i.isCallExpression())return null;let s=i.get(`arguments.${o}`);return!s||Array.isArray(s)||!s.isExpression()?null:await Dd({currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited,argumentPath:s})}function _S(e){if(e.sourceKind!=="imported-binding")return null;let t=e.root.kind==="binding"||e.root.kind==="named-export"?e.root.name:e.root.kind==="default-export"?"default":null;if(!t)return null;let n=/(^|[\/.-])(config|settings)([\/.-]|$)/i.test(e.file),r=/config|settings/i.test(t);if(!n&&!r)return null;let o=Mo(t,e.path);return{sourceId:o,displayPath:o}}async function FS(e){let t=e.segment.source;return t?je({currentFile:e.currentFile,expressionPath:e.expressionPath,sourceInfo:t,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited}):null}async function je(e){let t=e.sourceInfo,n=Ld(e.expressionPath,t.base);if(n){let l=await Bd({currentFile:e.currentFile,callPath:n.callPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,fileCache:e.fileCache,visited:e.visited});if(!l){let S=OS(n.callPath,[...n.basePath,...t.path]);return nr(S)?fd(e.currentFile,S.sourceId,S.displayPath):null}let u=rb(l,[...n.basePath,...t.path]),d=l.collectionIndexMap?.[0]??0,p=[...l.pathPrefix??[],{kind:"index",index:d},...n.basePath,...t.path],m=[{kind:"index",index:0},...n.basePath,...t.path];return nt(l.value,m)===void 0?null:{kind:"value",file:l.file,root:l.root,path:u?.[0]??p,sourceKind:"repeat-template",collectionIndexMap:l.collectionIndexMap,...u?{collectionPathMap:u}:{}}}let r=e.expressionPath.scope.getBinding(t.base);if(!r)return null;if(r.path.isImportNamespaceSpecifier()){let l=t.path[0],u=r.path.parentPath;if(!l||l.kind!=="property"||!u?.isImportDeclaration())return null;let d=await yn(e.currentFile,u.node.source.value,e.exists);if(!d)return null;let p=await Fo({file:d,exportName:l.name,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!p||p.kind==="external")return null;let m=t.path.slice(1);return nt(p.value,m)===void 0?null:{kind:"value",file:p.file,root:p.root,path:m,sourceKind:"imported-binding",collectionIndexMap:p.collectionIndexMap}}let o=wu(r);if(o){let l=o.expressionPath,u=await rt({expression:l.node,scope:l.scope,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(u){let d=await je({...e,expressionPath:l,sourceInfo:{...u,expression:Mo(u.expression,t.path),path:[...u.path,...t.path]}});if(d)return d}if(t.path.length===0){let d=await Od({currentFile:e.currentFile,expressionPath:l,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(d)return d}}if(r.kind==="param")return QS({currentFile:e.currentFile,binding:r,sourceInfo:t,graph:e.graph,readFile:e.readFile,exists:e.exists,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});let i=await TS({currentFile:e.currentFile,binding:r,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(i)return i;let s=Io(r,t.path);if(nr(s))return fd(e.currentFile,s.sourceId,s.displayPath);let a=await nn({currentFile:e.currentFile,binding:r,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return a?a.kind==="external"?t.path.length===0?a:null:nt(a.value,t.path)===void 0?null:{kind:"value",file:a.file,root:a.root,path:t.path,sourceKind:a.sourceKind,collectionIndexMap:a.collectionIndexMap}:null}function Ld(e,t){let n=e.scope.getBinding(t);if(!n)return null;let r=n.path.getFunctionParent();if(!r||!r.isArrowFunctionExpression()&&!r.isFunctionExpression())return null;let o=r.node.params[0],i=Qe(o,t);if(!i)return null;let s=r.parentPath;return!s||!s.isCallExpression()||!MS(s,r)?null:{callPath:s,basePath:i}}function MS(e,t){let n=e.node.callee;return!E.isMemberExpression(n)||!E.isIdentifier(n.property)||n.property.name!=="map"?!1:e.node.arguments.some(r=>r===t.node)}async function Bd(e){let{currentFile:t,callPath:n,readFile:r,exists:o,fileCache:i,visited:s}=e,a=n.node.callee;if(!E.isMemberExpression(a)||!E.isIdentifier(a.property)||a.property.name!=="map")return null;let c=n.get("callee");if(!c.isMemberExpression())return null;let l=c.get("object");if(Array.isArray(l)||!l.isExpression())return null;let u=await pr({currentFile:t,expressionPath:l,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});return!u||!Array.isArray(u.value)||u.value.length===0?null:u}function OS(e,t){let n=e.get("callee");if(!n.isMemberExpression())return null;let r=n.get("object");return Array.isArray(r)||!r.isExpression()?null:ko(r,t)}async function pr(e){let{currentFile:t,expressionPath:n,readFile:r,exists:o,fileCache:i,visited:s}=e;if(n.isIdentifier()){let a=n.scope.getBinding(n.node.name);if(!a)return null;let c=await nn({currentFile:t,binding:a,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});return c?.kind==="static"?c:null}if(n.isCallExpression())return jd({currentFile:t,callPath:n,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(n.isTSAsExpression()||n.isTSSatisfiesExpression()||n.isTSNonNullExpression()){let a=n.get("expression");if(!Array.isArray(a)&&a.isExpression())return pr({...e,expressionPath:a})}if(n.isArrayExpression()){let a=Nd(n.node);if(!a)return null;let c=await ot(n.node,n.scope,t,r,o,i,s);return Array.isArray(c)?{kind:"static",file:t,root:{kind:"expression",sourceRange:a},value:c,sourceKind:"binding"}:null}if(n.isMemberExpression()){let a=await rt({expression:n.node,scope:n.scope,currentFile:t,readFile:r,exists:o,fileCache:i,visited:s});if(!a)return null;let c=await je({currentFile:t,expressionPath:n,sourceInfo:a,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(!c||c.kind==="external")return null;let l=await DS({currentFile:t,expressionPath:n,provenance:c,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(!l||l.kind!=="static")return null;if(c.collectionPathMap?.length){let d=ob(l.value,c.collectionPathMap);if(d)return{kind:"static",file:c.file,root:c.root,value:d.value,sourceKind:c.sourceKind,collectionPathMap:d.collectionPathMap}}let u=nt(l.value,c.path);return Array.isArray(u)?{kind:"static",file:c.file,root:c.root,value:u,sourceKind:c.sourceKind,pathPrefix:c.path,collectionIndexMap:c.collectionIndexMap,collectionPathMap:c.collectionPathMap}:null}return null}async function DS(e){let{provenance:t}=e;if(t.root.kind==="binding"){let i=e.expressionPath.scope.getBinding(t.root.name);if(!i&&t.file!==e.currentFile){let s=await jt(t.file,e.readFile,e.fileCache);i=s.ast?Hs(s.ast).getBinding(t.root.name):void 0}return i?await nn({currentFile:t.file,binding:i,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited}):null}if(t.root.kind!=="expression")return null;let n=await jt(t.file,e.readFile,e.fileCache);if(!n.ast)return null;let r=sS(n.ast,t.root.sourceRange);if(!r)return null;let o=await ot(r.node,r.scope,t.file,e.readFile,e.exists,e.fileCache,e.visited);return o===void 0?null:{kind:"static",file:t.file,root:t.root,value:o,sourceKind:t.sourceKind}}async function jd(e){return await LS(e)??await BS(e)??await jS(e)}async function LS(e){let{callPath:t}=e,n=t.node.callee;if(!E.isMemberExpression(n)||!E.isIdentifier(n.property)||n.property.name!=="filter")return null;let r=t.get("callee");if(!r.isMemberExpression())return null;let o=r.get("object");if(Array.isArray(o)||!o.isExpression())return null;let i=await pr({currentFile:e.currentFile,expressionPath:o,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!i||!Array.isArray(i.value))return null;let[s]=t.node.arguments;if(!E.isArrowFunctionExpression(s)&&!E.isFunctionExpression(s))return null;let a=s.params[0];if(!E.isIdentifier(a))return null;let c=$S(s);if(!c)return null;let l=[],u=[],d=[];for(let[p,m]of i.value.entries()){let g=VS(c,a.name,m);if(typeof g!="boolean")return null;if(g){l.push(m),u.push(i.collectionIndexMap?.[p]??p);let S=i.collectionPathMap?.[p];S&&d.push(S)}}return{...i,value:l,pathPrefix:i.pathPrefix,collectionIndexMap:u,...d.length>0?{collectionPathMap:d}:{}}}async function BS(e){let{callPath:t}=e,n=t.node.callee;if(!E.isMemberExpression(n)||!E.isIdentifier(n.property)||n.property.name!=="slice")return null;let r=t.get("callee");if(!r.isMemberExpression())return null;let o=r.get("object");if(Array.isArray(o)||!o.isExpression())return null;let i=await pr({currentFile:e.currentFile,expressionPath:o,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!i||!Array.isArray(i.value))return null;let[s,a]=t.node.arguments,c=Sd(s,0),l=Sd(a,i.value.length);if(c===null||l===null)return null;let u=Math.max(0,c<0?i.value.length+c:c),d=Math.max(0,l<0?i.value.length+l:l),p=i.value.map((g,S)=>i.collectionIndexMap?.[S]??S).slice(u,d),m=i.collectionPathMap?.slice(u,d);return{...i,value:i.value.slice(u,d),pathPrefix:i.pathPrefix,collectionIndexMap:p,...m?{collectionPathMap:m}:{}}}function Sd(e,t){return e?E.isNumericLiteral(e)&&Number.isInteger(e.value)?e.value:null:t}async function jS(e){let{callPath:t}=e,n=t.node.callee;if(!E.isMemberExpression(n)||!E.isIdentifier(n.property)||n.property.name!=="sort"&&n.property.name!=="toSorted")return null;let r=t.get("callee");if(!r.isMemberExpression())return null;let o=r.get("object");if(Array.isArray(o)||!o.isExpression())return null;let i=await pr({currentFile:e.currentFile,expressionPath:o,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!i||!Array.isArray(i.value))return null;let[s]=t.node.arguments;if(!E.isArrowFunctionExpression(s)&&!E.isFunctionExpression(s))return null;let[a,c]=s.params;if(!E.isIdentifier(a)||!E.isIdentifier(c))return null;let l=i.value.map((d,p)=>({value:d,sourceIndex:i.collectionIndexMap?.[p]??p,originalIndex:p})),u=[...l];for(let d of l)for(let p of l)if(bd(s,a.name,c.name,d.value,p.value)===void 0)return null;return u.sort((d,p)=>{let m=bd(s,a.name,c.name,d.value,p.value)??0;return m===0?d.originalIndex-p.originalIndex:m}),{...i,value:u.map(d=>d.value),pathPrefix:i.pathPrefix,collectionIndexMap:u.map(d=>d.sourceIndex),...i.collectionPathMap?{collectionPathMap:u.map(d=>i.collectionPathMap?.[d.originalIndex]).filter(d=>!!d)}:{}}}function bd(e,t,n,r,o){let i=E.isExpression(e.body)?e.body:e.body.body.find(a=>E.isReturnStatement(a))?.argument;if(!i||!E.isExpression(i))return;let s=zs(i,t,n,r,o);return typeof s=="number"?s:void 0}function zs(e,t,n,r,o){if(E.isNumericLiteral(e)||E.isStringLiteral(e)||E.isBooleanLiteral(e))return e.value;if(E.isIdentifier(e))return e.name===t?r:e.name===n?o:void 0;if(E.isMemberExpression(e)){let i=Ws(e,t);if(i)return nt(r,i);let s=Ws(e,n);return s?nt(o,s):void 0}if(E.isBinaryExpression(e)&&e.operator==="-"){let i=E.isExpression(e.left)?zs(e.left,t,n,r,o):void 0,s=E.isExpression(e.right)?zs(e.right,t,n,r,o):void 0;return typeof i=="number"&&typeof s=="number"?i-s:void 0}}function $S(e){if(E.isExpression(e.body))return e.body;for(let t of e.body.body)if(E.isReturnStatement(t)&&t.argument&&E.isExpression(t.argument))return t.argument;return null}function VS(e,t,n){let r=tn(e,t,n);return typeof r=="boolean"?r:void 0}function tn(e,t,n){if(E.isStringLiteral(e)||E.isNumericLiteral(e)||E.isBooleanLiteral(e))return e.value;if(E.isNullLiteral(e))return null;if(E.isIdentifier(e))return e.name===t?n:void 0;if(E.isMemberExpression(e)){let r=Ws(e,t);return r?nt(n,r):void 0}if(E.isUnaryExpression(e)&&e.operator==="!"){let r=tn(e.argument,t,n);return r===void 0?void 0:!r}if(E.isLogicalExpression(e)){let r=tn(e.left,t,n);if(r===void 0)return;if(e.operator==="&&")return r&&tn(e.right,t,n);if(e.operator==="||")return r||tn(e.right,t,n)}if(E.isBinaryExpression(e)){let r=E.isExpression(e.left)?tn(e.left,t,n):void 0,o=E.isExpression(e.right)?tn(e.right,t,n):void 0;if(r===void 0||o===void 0)return;switch(e.operator){case"===":return r===o;case"!==":return r!==o;case"==":return r==o;case"!=":return r!=o;default:return}}}function Ws(e,t){let n=[],r=e;for(;E.isMemberExpression(r);){if(r.computed)if(E.isNumericLiteral(r.property))n.unshift({kind:"index",index:r.property.value});else if(E.isStringLiteral(r.property))n.unshift({kind:"property",name:r.property.value});else return null;else{if(!E.isIdentifier(r.property))return null;n.unshift({kind:"property",name:r.property.name})}r=r.object}return!E.isIdentifier(r)||r.name!==t?null:n}async function nn(e){let{currentFile:t,binding:n,readFile:r,exists:o,fileCache:i,visited:s}=e,a=`${t}::${n.kind}::${n.identifier.name}`;if(s.has(a))return null;s.add(a);try{let c=await US({currentFile:t,binding:n,readFile:r,exists:o,fileCache:i,visited:s});if(c)return c;if(n.path.isImportSpecifier()||n.path.isImportDefaultSpecifier())return await tb({currentFile:t,binding:n,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,fileCache:i,visited:s});if(n.kind==="param")return null;if(n.path.isVariableDeclarator()){let l=n.path.node.init;if(!l||!E.isExpression(l))return null;let u=n.path.get("init");if(u&&!Array.isArray(u)&&u.isExpression()){let p=await na({currentFile:t,expressionPath:u,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(p)return p;if(u.isCallExpression()){let m=await jd({currentFile:t,callPath:u,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(m)return m}}let d=await ot(l,n.path.scope,t,r,o,i,s);return d===void 0?null:{kind:"static",file:t,root:{kind:"binding",name:n.identifier.name},value:d,sourceKind:"binding"}}if(n.path.isIdentifier()&&n.path.parentPath?.isExportDefaultDeclaration()){let l=n.path.parentPath.node.declaration;if(!E.isExpression(l))return null;let u=await ot(l,n.path.scope,t,r,o,i,s);return u===void 0?null:{kind:"static",file:t,root:{kind:"binding",name:n.identifier.name},value:u,sourceKind:"binding"}}return null}finally{s.delete(a)}}async function US(e){let{currentFile:t,binding:n,readFile:r,exists:o,fileCache:i,visited:s}=e;if(!n.path.isVariableDeclarator()||!n.path.get("id").isArrayPattern())return null;let a=n.path,c=a.node.init;if(!c||!E.isCallExpression(c))return null;let l=KS(c);if(!l||!E.isArrayPattern(a.node.id)||a.node.id.elements.findIndex(g=>E.isIdentifier(g)&&g.name===n.identifier.name)!==0)return null;let d=l==="useReducer"?1:0,p=c.arguments[d];if(!p||!E.isExpression(p))return null;let m=await ot(p,a.scope,t,r,o,i,s);return m===void 0?null:{kind:"static",file:t,root:{kind:"hook-state",name:n.identifier.name,hook:l},value:m,sourceKind:"binding"}}function KS(e){return E.isIdentifier(e.callee)&&(e.callee.name==="useState"||e.callee.name==="useReducer")?e.callee.name:E.isMemberExpression(e.callee)&&E.isIdentifier(e.callee.property)&&(e.callee.property.name==="useState"||e.callee.property.name==="useReducer")?e.callee.property.name:null}function JS(e){let t=e.getFunctionParent();if(!t)return null;if(t.isFunctionDeclaration()){let s=t.node.id?.name;if(!s)return null;let a=t.parentPath?.isExportDefaultDeclaration()?"default":(t.parentPath?.isExportNamedDeclaration(),s);return{componentName:s,exportName:a}}if(!t.isArrowFunctionExpression()&&!t.isFunctionExpression())return null;let n=t.parentPath;if(!n?.isVariableDeclarator()||!E.isIdentifier(n.node.id))return null;let r=n.node.id.name,o=n.parentPath,i=o?.parentPath?.isExportDefaultDeclaration()?"default":(o?.parentPath?.isExportNamedDeclaration(),r);return{componentName:r,exportName:i}}function XS(e,t){let n=JS(e.path);if(!n)return null;let r=Fn(e,t);return r?{...n,...r}:null}function Mo(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}function zS(e,t,n,r){return e.importedFrom===t?r?e.exportName===r:!0:e.sourceFile===t&&e.tag===n}async function WS(e){let t=GS(e.expressionPath.node);if(!t||!YS(t.segments))return null;let n=await je({currentFile:e.currentFile,expressionPath:e.expressionPath,sourceInfo:{kind:"identifier",expression:t.base,base:t.base,path:[]},readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!n||n.kind==="external")return n;let r=await HS({...e,rootPath:n.path,segments:t.segments});return r?{...n,path:r.collectionPathMap[0]??n.path,sourceKind:"repeat-template",displayExpression:fr(e.expressionPath.node,e.fileCache.get(e.currentFile)?.source),...r.collectionIndexMap?{collectionIndexMap:r.collectionIndexMap}:{},collectionPathMap:r.collectionPathMap}:null}async function HS(e){let t=null,n,r=[];for(let i of e.segments){if(i.kind!=="dynamic")continue;let s=await rt({expression:i.expression,scope:e.expressionPath.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(!s)return null;let a=Ld(e.expressionPath,s.base);if(!a)return null;let c=await Bd({currentFile:e.currentFile,callPath:a.callPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!c||!Array.isArray(c.value))return null;let l=c.value.map((u,d)=>{let p=nt(c.value,[{kind:"index",index:d},...a.basePath,...s.path]);return ZS(p)});if(l.some(u=>u===null)||t!==null&&t!==l.length)return null;t=l.length,n??=c.collectionIndexMap,r.push(l)}if(t===null||t===0)return null;let o=[];for(let i=0;i<t;i+=1){let s=[...e.rootPath],a=0;for(let c of e.segments){if(c.kind==="dynamic"){let l=r[a]?.[i];if(!l)return null;s.push(l),a+=1;continue}s.push({...c})}o.push(s)}return{...n?{collectionIndexMap:n}:{},collectionPathMap:o}}function GS(e){let t=[],n=e;for(;E.isMemberExpression(n)||E.isOptionalMemberExpression(n);){let r=n.property;if(n.computed)if(E.isNumericLiteral(r))t.unshift({kind:"index",index:r.value});else if(E.isStringLiteral(r))t.unshift({kind:"property",name:r.value});else if(E.isExpression(r))t.unshift({kind:"dynamic",expression:r});else return null;else if(E.isIdentifier(r))t.unshift({kind:"property",name:r.name});else return null;n=n.object}return E.isIdentifier(n)?{base:n.name,segments:t}:null}function YS(e){return e.some(t=>t.kind==="dynamic")}function ZS(e){return typeof e=="string"?{kind:"property",name:e}:Number.isInteger(e)?{kind:"index",index:e}:null}async function QS(e){let t=XS(e.binding,e.sourceInfo);if(!t||!e.graph)return null;let n=[...e.graph.elements.values()].filter(l=>zS(l,e.currentFile,t.componentName,t.exportName));if(n.length!==1)return null;let r=n[0],o=r.attributes?.find(l=>l.name===t.propName);if(o&&!o.source){let l=await qS({caller:r,propName:t.propName,remainingPath:t.remainingPath,readFile:e.readFile,fileCache:e.fileCache});if(l)return Us(l,{componentName:t.componentName,propName:t.propName,file:r.sourceFile})}if(!o?.source){let l=await eb({caller:r,propName:t.propName,remainingPath:t.remainingPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(l)return Us(l,{componentName:t.componentName,propName:t.propName,file:r.sourceFile});let u=Pu(e.binding,t.componentName,t.propName);if(!u||u.propName!==t.propName)return null;let d=await ot(u.expressionPath.node,u.expressionPath.scope,e.currentFile,e.readFile,e.exists,e.fileCache,e.visited);if(d===void 0)return null;let p=t.remainingPath;return p.length>0&&nt(d,p)===void 0?null:{kind:"value",file:e.currentFile,root:{kind:"binding",name:t.propName},path:p,sourceKind:"binding",semanticKind:"component-prop",displayExpression:u.displayPath,chainPrefix:[{kind:"component-prop",file:e.currentFile,displayName:u.displayPath,canEditHere:!0}],editMode:"upstream",diagnostics:[]}}let i=await jt(r.sourceFile,e.readFile,e.fileCache);if(!i.ast)return null;let s=Pd(i.ast,i.source,o.source.expression,o.sourceRange)??ta(i.ast,i.source,o.source.expression);if(!s)return null;let a={...o.source,expression:Mo(o.source.expression,t.remainingPath),path:[...o.source.path,...t.remainingPath]},c=await je({currentFile:r.sourceFile,expressionPath:s,sourceInfo:a,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return c?Us(c.kind==="external"?c:{...c,displayExpression:a.expression},{componentName:t.componentName,propName:t.propName,file:r.sourceFile}):null}async function qS(e){let t=await jt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=wd(t.ast,e.caller.sourceRange);if(!n)return null;let r=n.get("openingElement").get("attributes").find(a=>a.isJSXAttribute()&&a.node.name.type==="JSXIdentifier"&&a.node.name.name===e.propName);if(!r?.isJSXAttribute())return null;let o=r.get("value"),i=o.isStringLiteral()?o:o.isJSXExpressionContainer()?o.get("expression"):null;if(!i?.isExpression())return null;let s=Nd(i.node);return s?{kind:"value",file:e.caller.sourceFile,root:{kind:"expression",sourceRange:s},path:e.remainingPath,sourceKind:"binding",semanticKind:"component-prop",displayExpression:e.propName,editMode:"upstream",diagnostics:[]}:null}async function eb(e){let t=await jt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=wd(t.ast,e.caller.sourceRange);if(!n)return null;let r=n.get("openingElement");for(let o of r.get("attributes")){if(!o.isJSXSpreadAttribute())continue;let i=o.get("argument");if(!i.isExpression())continue;let s=await rt({expression:i.node,scope:i.scope,source:t.source,currentFile:e.caller.sourceFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(!s)continue;let a=[{kind:"property",name:e.propName},...e.remainingPath],c={...s,expression:Mo(s.expression,a),path:[...s.path,...a]},l=await je({currentFile:e.caller.sourceFile,expressionPath:i,sourceInfo:c,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(l)return l.kind==="external"?l:{...l,displayExpression:c.expression}}return null}function Us(e,t){let n=[{kind:"component-prop",file:t.file,displayName:`${t.componentName}.${t.propName}`,canEditHere:!0}];return e.kind==="external"?{...e,chainPrefix:[...n,...e.chainPrefix??[]],editMode:e.editMode==="readonly"?"readonly":"upstream"}:{...e,chainPrefix:[...n,...e.chainPrefix??[]],editMode:"upstream"}}async function tb(e){let{currentFile:t,binding:n,readFile:r,exists:o,fileCache:i,visited:s}=e,a=n.path.parentPath;if(!a||!a.isImportDeclaration())return null;let c=a.node.source.value;if(typeof c!="string")return null;let l=await yn(t,c,o);if(!l)return null;if(n.path.isImportDefaultSpecifier()){let S=await jt(l,r,i),C=S.ast?Gs(S.ast,"default"):null,v=await Fo({file:l,exportName:"default",readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});return!v||v.kind!=="static"?null:{kind:"static",file:C?.kind==="default-expression"?v.file:l,root:C?.kind==="default-expression"?v.root:{kind:"default-export"},value:v.value,sourceKind:"imported-binding"}}if(!n.path.isImportSpecifier())return null;let u=n.path.node.imported,d=E.isIdentifier(u)?u.name:u.value,p=await jt(l,r,i),m=p.ast?Gs(p.ast,d):null,g=await Fo({file:l,exportName:d,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});return g?g.kind==="external"?g:{kind:"static",file:m?.kind==="re-export"?g.file:l,root:m?.kind==="re-export"?g.root:{kind:"named-export",name:d},value:g.value,sourceKind:"imported-binding"}:null}async function Fo(e){let{file:t,exportName:n,readFile:r,exists:o,fileCache:i,visited:s}=e,a=`export::${t}::${n}`;if(!s.has(a)){s.add(a);try{let c=await jt(t,r,i);if(!c.ast)return;let l=Gs(c.ast,n);if(!l)return;if(l.kind==="default-expression"){let m=l.expression;if(!m||!E.isIdentifier(m))return;let g=Hs(c.ast).getBinding(m.name);return g?await nn({currentFile:t,binding:g,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s})??void 0:void 0}if(l.kind==="re-export"){if(!l.source||!l.name)return;let m=await yn(t,l.source,o);return m?Fo({...e,file:m,exportName:l.name}):void 0}let u=l.name;if(!u)return;let d=Hs(c.ast).getBinding(u);return d?await nn({currentFile:t,binding:d,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s})??void 0:void 0}finally{s.delete(a)}}}function Hs(e){let t=null;if(Id(e,{Program(n){t=n.scope,n.stop()}}),!t)throw new Error("Unable to determine program scope");return t}function Gs(e,t){for(let n of e.program.body){if(t==="default"&&E.isExportDefaultDeclaration(n))return E.isExpression(n.declaration)?{kind:"default-expression",expression:n.declaration}:(E.isFunctionDeclaration(n.declaration)||E.isClassDeclaration(n.declaration))&&n.declaration.id?{kind:"default-binding",name:n.declaration.id.name}:null;if(E.isExportNamedDeclaration(n)){if(n.declaration){if(E.isVariableDeclaration(n.declaration)){for(let r of n.declaration.declarations)if(E.isIdentifier(r.id)&&r.id.name===t)return{kind:"local-binding",name:r.id.name}}if((E.isFunctionDeclaration(n.declaration)||E.isClassDeclaration(n.declaration))&&n.declaration.id&&n.declaration.id.name===t)return{kind:"local-binding",name:t}}for(let r of n.specifiers)if((E.isIdentifier(r.exported)?r.exported.name:r.exported.value)===t&&E.isExportSpecifier(r))return n.source?{kind:"re-export",name:r.local.name,source:n.source.value}:{kind:"local-binding",name:r.local.name}}}return null}async function ot(e,t,n,r,o,i,s){if(E.isStringLiteral(e)||E.isNumericLiteral(e)||E.isBooleanLiteral(e))return e.value;if(E.isNullLiteral(e))return null;if(E.isTemplateLiteral(e))return e.expressions.length===0&&e.quasis.length===1?e.quasis[0].value.cooked??e.quasis[0].value.raw:void 0;if(E.isTSAsExpression(e)||E.isTSSatisfiesExpression(e)||E.isTSNonNullExpression(e))return await ot(e.expression,t,n,r,o,i,s);if(E.isIdentifier(e)){let a=t.getBinding(e.name);if(!a)return;let c=await nn({currentFile:n,binding:a,readFile:r,exists:o,fileCache:i,visited:s});return c?.kind==="static"?c.value:void 0}if(E.isArrayExpression(e)){let a=[];for(let c of e.elements){if(!c||E.isSpreadElement(c))return;let l=await Ks(c,t,n,r,o,i,s);if(l===void 0)return;a.push(l)}return a}if(E.isObjectExpression(e)){let a={};for(let c of e.properties){if(!E.isObjectProperty(c)||c.computed)return;let l=null;if(E.isIdentifier(c.key)?l=c.key.name:E.isStringLiteral(c.key)&&(l=c.key.value),!l)return;if(c.shorthand){if(!E.isIdentifier(c.value))return;let d=await Ks(c.value,t,n,r,o,i,s);if(d===void 0)return;a[l]=d;continue}if(!E.isExpression(c.value))return;let u=await Ks(c.value,t,n,r,o,i,s);u!==void 0&&(a[l]=u)}return a}if(E.isMemberExpression(e)){let a=await $d(e,t,n,r,o,i,s);if(!a)return;let c=t.getBinding(a.base);if(!c)return;let l=await nn({currentFile:n,binding:c,readFile:r,exists:o,fileCache:i,visited:s});return!l||l.kind!=="static"?void 0:nt(l.value,a.path)}}async function Ks(e,t,n,r,o,i,s){if(!E.isSpreadElement(e))return await ot(e,t,n,r,o,i,s)}async function $d(e,t,n,r,o,i,s){if(E.isIdentifier(e))return{base:e.name,path:[]};if(!E.isMemberExpression(e))return null;let a=[],c=e;for(;E.isMemberExpression(c);){if(c.computed){let l=c.property;if(E.isNumericLiteral(l))a.unshift({kind:"index",index:l.value});else if(E.isStringLiteral(l))a.unshift({kind:"property",name:l.value});else{let u=E.isExpression(l)?await ot(l,t,n,r,o,i,s):void 0;if(typeof u=="string")a.unshift({kind:"property",name:u});else if(Number.isInteger(u))a.unshift({kind:"index",index:u});else return null}}else{if(!E.isIdentifier(c.property))return null;a.unshift({kind:"property",name:c.property.name})}c=c.object}return E.isIdentifier(c)?{base:c.name,path:a}:null}function nb(e){if(E.isIdentifier(e))return{base:e.name,path:[]};if(!E.isMemberExpression(e))return null;let t=[],n=e;for(;E.isMemberExpression(n);){if(n.computed)if(E.isNumericLiteral(n.property))t.unshift({kind:"index",index:n.property.value});else if(E.isStringLiteral(n.property))t.unshift({kind:"property",name:n.property.value});else return null;else{if(!E.isIdentifier(n.property))return null;t.unshift({kind:"property",name:n.property.name})}n=n.object}return E.isIdentifier(n)?{base:n.name,path:t}:null}function nt(e,t){let n=e;for(let r of t){if(r.kind==="property"){if(n===null||Array.isArray(n)||typeof n!="object"||!(r.name in n))return;n=n[r.name];continue}if(!Array.isArray(n)||r.index<0||r.index>=n.length)return;n=n[r.index]}return n}function rb(e,t){if(!Array.isArray(e.value))return null;let n=e.collectionPathMap?.length?e.collectionPathMap:e.value.map((r,o)=>[...e.pathPrefix??[],{kind:"index",index:e.collectionIndexMap?.[o]??o}]);return n.length>0?n.map(r=>[...r,...t]):null}function ob(e,t){let n=[],r=[];for(let o of t){let i=nt(e,o);if(!Array.isArray(i))return null;for(let[s,a]of i.entries())n.push(a),r.push([...o,{kind:"index",index:s}])}return{value:n,collectionPathMap:r}}async function jt(e,t,n){let r=n.get(e);if(r)return r;let o=await t(e),i=Rd(o),s={source:o,ast:i};return n.set(e,s),s}import ua from"@babel/generator";import{parse as Sb}from"@babel/parser";import da from"@babel/traverse";import*as k from"@babel/types";import*as ft from"@babel/types";import sa from"@babel/generator";import*as ae from"@babel/types";var ib=typeof sa=="function"?sa:sa.default,sb=/(?:token|secret|key|password|authorization|cookie|signature|credential)/i,ab=/^((?:https?:)?\/\/)[^/@\s]+@/i,cb=/(\/(?:token|secret|api[-_]?key|password|credential|signature)\/)[^/?#]+/gi;function Ud(e,t){let n=dt(e.callee);if(!n)return null;if(n==="fetch")return aa(e.arguments[0],"GET",t,["fetch call"]);if(n.startsWith("axios.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if(Vd(r))return aa(e.arguments[0],r,t,["axios client contract"])}if(n.startsWith("ky.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if(Vd(r))return aa(e.arguments[0],r,t,["ky client contract"])}return null}function aa(e,t,n,r){if(!e||ae.isSpreadElement(e)||ae.isJSXNamespacedName(e))return fb(t,n,r,"missing url argument");let o=mr(e);return{sourceKind:db(o),...o?{endpointPattern:o}:{},method:t,confidence:o?"exact":"partial",evidence:[{file:n.file,reason:[...r,o?"endpoint pattern resolved":"endpoint pattern unresolved"].join("; ")}]}}function mr(e){if(ae.isStringLiteral(e))return Oo(e.value);if(ae.isTemplateLiteral(e))return Oo(lb(e));if(ae.isBinaryExpression(e)&&e.operator==="+"){let t=mr(e.left),n=mr(e.right);return!t&&!n?void 0:Oo(`${t??ca(e.left)}${n??ca(e.right)}`)}if(ae.isMemberExpression(e)){let t=Kd(e);if(t)return`env:${t}`}if(!(ae.isCallExpression(e)&&dt(e.callee)==="new URL")){if(ae.isNewExpression(e)&&ae.isIdentifier(e.callee,{name:"URL"})){let[t,n]=e.arguments,r=t&&!ae.isSpreadElement(t)?mr(t):void 0,o=n&&!ae.isSpreadElement(n)?mr(n):void 0;return o&&r?Oo(`${o} + ${r}`):r??o}if(ae.isIdentifier(e))return`:${e.name}`}}function lb(e){let t="";for(let n=0;n<e.quasis.length;n+=1){t+=e.quasis[n]?.value.cooked??e.quasis[n]?.value.raw??"";let r=e.expressions[n];r&&(t+=ca(r))}return t}function ca(e){if(ae.isIdentifier(e))return`:${e.name}`;if(ae.isMemberExpression(e)){let t=Kd(e);if(t)return`env:${t}`}return`:${ub(e)}`}function ub(e){return ib(e,{comments:!1}).code.replace(/[^a-zA-Z0-9_$]+/g,"_").replace(/^_+|_+$/g,"")||"param"}function Oo(e){let[t]=e.split("#"),[n,r]=t.split("?"),o=n.replace(ab,"$1<redacted>@").replace(cb,"$1<redacted>");if(!r)return o;let i=r.split("&").map(s=>{let[a]=s.split("=");return a?sb.test(a)?`${a}=<redacted>`:`${a}=:${a}`:""}).filter(Boolean).join("&");return i?`${o}?${i}`:o}function db(e){return e?e.startsWith("/api/")?"site-api-route":/^(?:https?:)?\/\//.test(e)||e.startsWith("env:")?"external-api":e.startsWith("/")?"site-api-route":"unknown-api":"unknown-api"}function fb(e,t,n,r){return{sourceKind:"unknown-api",method:e,confidence:"partial",evidence:[{file:t.file,reason:[...n,r].join("; ")}]}}function Vd(e){return["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(e)}function Kd(e){return!ae.isMemberExpression(e.object)||!ae.isIdentifier(e.object.object,{name:"process"})||!pb(e.object.property,"env")?null:ae.isIdentifier(e.property)?e.property.name:ae.isStringLiteral(e.property)?e.property.value:null}function pb(e,t){return ae.isIdentifier(e)&&e.name===t}function dt(e){if(ae.isIdentifier(e))return e.name;if(ae.isMemberExpression(e)){let t=dt(e.object),n=ae.isIdentifier(e.property)?e.property.name:ae.isStringLiteral(e.property)?e.property.value:null;if(t&&n)return`${t}.${n}`}return null}var mb=new Set(["list","listStrict","get","getStrict","getByUrl","getByUrlStrict","schema","categories"]),gb=new Set(["getConfig","submit"]);function Jd(e,t){let n=hb(dt(e.callee),t);if(!n)return null;let r="cms.collections.";if(n.startsWith(r)){let i=n.slice(r.length);if(!mb.has(i))return null;let s=la(e,0),a=i==="getByUrl"||i==="getByUrlStrict",c=a?void 0:s,l=a?s??"/:record-url":c?`/collections/${c}`:"/collections/:collection";return{sourceKind:"vcp-cms-collection",sourceType:"cms-field",operation:i,...c?{collection:c}:{},endpointPattern:l,confidence:s?"exact":"partial",evidence:[{file:t.file,symbol:n,reason:"VCP CMS collection facade"}]}}let o="cms.forms.";if(n.startsWith(o)){let i=n.slice(o.length);if(!gb.has(i))return null;let s=la(e,0);return{sourceKind:"vcp-cms-form",sourceType:"cms-field",operation:i,...s?{collection:s}:{},endpointPattern:s?`/forms/${s}`:"/forms/:form",confidence:s?"exact":"partial",evidence:[{file:t.file,symbol:n,reason:"VCP CMS form facade"}]}}if(n==="cmsFetch"||n==="cmsFetchResult"||n==="cmsFetchEnvelope"){let i=la(e,0)??yb(e,0,"path")??"/cms/:path",s=xb(i);return{sourceKind:"vcp-cms-collection",sourceType:"cms-field",operation:n,...s?{collection:s}:{},endpointPattern:i,confidence:i==="/cms/:path"?"partial":"safe-derived",evidence:[{file:t.file,symbol:n,reason:"VCP CMS fetch helper"}]}}return null}function hb(e,t){let n=e?.indexOf(".")??-1;if(!e||n<1)return e;let r=t.imports?.get(e.slice(0,n));return r?.importedName==="collections"&&/(?:^|\/)lib\/cms\/collections(?:\.js)?$/.test(r.source)?`cms.collections${e.slice(n)}`:e}function Xd(e,t){let n=dt(e);return n==="cms.settings"?{sourceKind:"vcp-cms-settings",sourceType:"cms-field",operation:"settings",endpointPattern:"/settings",confidence:"exact",evidence:[{file:t.file,symbol:n,reason:"VCP CMS settings facade"}]}:n==="cms.navigation"?{sourceKind:"vcp-cms-navigation",sourceType:"cms-field",operation:"navigation",endpointPattern:"/navigation",confidence:"exact",evidence:[{file:t.file,symbol:n,reason:"VCP CMS navigation facade"}]}:null}function zd(e){let t=dt(e.callee);return typeof t=="string"&&t.startsWith("cms.field.")}function la(e,t){let n=e.arguments[t];return ft.isStringLiteral(n)?n.value:null}function yb(e,t,n){let r=e.arguments[t];if(!ft.isObjectExpression(r))return null;for(let o of r.properties)if(ft.isObjectProperty(o)&&!o.computed&&(ft.isIdentifier(o.key)&&o.key.name===n||ft.isStringLiteral(o.key)&&o.key.value===n)&&ft.isStringLiteral(o.value))return o.value.value;return null}function xb(e){return/^\/collections\/([^/]+)(?:\/|$)/.exec(e)?.[1]??null}var pa=typeof da=="function"?da:da.default,jN=typeof ua=="function"?ua:ua.default,bb={maxFunctionDepth:8,maxImportDepth:6},Eb=new Set(["src","href","alt","poster","content","title","aria-label"]);async function Qd(e){let t=e.fileCache??new Map,n=ha(e.file,e.source,t),r={file:e.file,analysis:n,readFile:e.readFile,exists:e.exists,fileCache:t,options:{...bb,...e.options},variableCache:new Map,functionDepth:0,importDepth:0,paramSources:new Map,resolvingVariables:new Set,resolvingComponentProps:new Set,scopeVariables:pf(n,e.element.componentName)};await qd(e.element.componentName,e.graph,r);let o=[];o.push(...await Rb(e.element,e.graph,r),...await wb(e.element,e.graph,r));for(let s of e.element.textSegments){let a=await Nb(s,e.element,e.graph,r);a&&o.push(Bo(a,"text","children"))}for(let s of e.element.attributes??[]){let a=Cb(s,e.element);if(!a)continue;let c=await nf(s.source,e.element,e.graph,r);c&&o.push(Bo(c,a,s.name))}let i=Kb(o).sort(df);return{hasDynamicData:i.length>0,bindings:i}}async function qd(e,t,n){if(n.importDepth>=n.options.maxImportDepth)return;let r=n.analysis.functions.get(e)??n.analysis.functions.get("default"),o=r?.params[0];if(!r||!o)return;let i=n.analysis.functions.get("default")===r?"default":e,s=[];for(let l of t.elements.values()){if(l.sourceFile===n.file&&l.tag===e){s.push(l);continue}!l.importedFrom||!l.exportName||l.importedFrom===n.file&&l.exportName!==i||(l.importedFrom===n.file||await ef(l.importedFrom,l.exportName,n.file,n))&&s.push(l)}if(s.length===0)return;let a=new Map;for(let l of s){let u=`${n.file}#${e}<-${l.identity.key}`;if(!n.resolvingComponentProps.has(u)){n.resolvingComponentProps.add(u);try{let d=await tf(l.sourceFile,n);if(!d)continue;let p=$o(d,n,{importDepth:n.importDepth+1});p.paramSources.clear(),p.scopeVariables=pf(d,l.componentName),await qd(l.componentName,t,p);let m=await Ib(l,p);for(let[g,S]of m){if(!S)continue;let C=a.get(g)??[];C.push(S),a.set(g,C)}}finally{n.resolvingComponentProps.delete(u)}}}let c=new Map;for(let[l,u]of a){let d=lf(u);d.length===1&&c.set(l,d[0])}kb(o,c,n)}async function ef(e,t,n,r,o=new Set){if(e===n)return!0;if(o.size>=r.options.maxImportDepth||o.has(`${e}#${t}`))return!1;o.add(`${e}#${t}`);let s=(await tf(e,r))?.imports.get(t);if(!s||!ct(s.source))return!1;let a=await hf(e,s.source,r.exists);return a?a===n?!0:ef(a,s.importedName,n,r,o):!1}async function Ib(e,t){let n=new Map;pa(t.analysis.ast,{JSXElement(o){if(vb(o.node,e.sourceRange)){for(let i of o.node.openingElement.attributes)!k.isJSXAttribute(i)||!k.isJSXIdentifier(i.name)||!k.isJSXExpressionContainer(i.value)||!k.isExpression(i.value.expression)||n.set(i.name.name,i.value.expression);o.stop()}}});let r=new Map;for(let[o,i]of n){let s=await Ce(i,t);s&&r.set(o,s)}return r}function vb(e,t){return e.loc?.start.line===t.startLine&&e.loc.start.column===t.startColumn&&e.loc.end.line===t.endLine&&e.loc.end.column===t.endColumn}async function tf(e,t){let n=t.fileCache.get(e);if(n)return n;if(!await t.exists(e))return null;let r=await t.readFile(e);return ha(e,r,t.fileCache)}function kb(e,t,n){if(k.isIdentifier(e)){t.size>0&&n.paramSources.set(e.name,ga(Object.fromEntries(t),n.file));return}if(k.isObjectPattern(e))for(let r of e.properties){if(!k.isObjectProperty(r)||r.computed||!k.isIdentifier(r.key))continue;let o=t.get(r.key.name);if(!o)continue;let i=k.isAssignmentPattern(r.value)?r.value.left:r.value;k.isIdentifier(i)&&n.paramSources.set(i.name,Ne(o))}}function Cb(e,t){return e.name==="dangerouslySetInnerHTML"?"richtext":Eb.has(e.name)?"attribute":t.importedFrom||/^[A-Z]/.test(t.tag)?"component-prop":null}async function Rb(e,t,n){let r=[];for(let o of t.regions){if(o.kind!=="repeat-region"||o.ownerKey!==e.identity.key)continue;let i=o.sourceCandidates?.find(a=>a.kind==="repeat-template");if(!i)continue;let s=await jo(i.collectionSource,n);s&&r.push(Bo(rn(s),"repeat-region",i.collectionExpression))}return r}async function wb(e,t,n){let r=[];for(let o of t.regions){if(o.kind!=="conditional-region"||o.ownerKey!==e.identity.key)continue;let i=o.sourceCandidates?.find(a=>a.kind==="conditional-branch");if(!i)continue;let s=await jo(i.conditionSource,n);s&&r.push(Bo(rn(s),"conditional-region",i.conditionExpression))}return r}async function Nb(e,t,n,r){return nf(e.source,t,n,r)}async function nf(e,t,n,r){let o=await Pb(e,t,n,r);return o||jo(e,r)}async function Pb(e,t,n,r){if(!e)return null;let o=Ab(e.base,t,n);if(!o)return null;let i=await jo(o.collectionSource,r);return i?xr(i,e.path,!0):null}function Ab(e,t,n){let r=t.identity.key;for(;r;){for(let o of n.regions){if(o.kind!=="repeat-region"||!o.childKeys.includes(r))continue;let i=o.sourceCandidates?.find(s=>s.kind==="repeat-template"&&s.itemParamName===e);if(i)return i}r=n.elements.get(r)?.parentKey??null}return null}async function jo(e,t){if(!e)return null;let n=await rf(e.base,t);return n?xr(n,e.path,!1):null}async function rf(e,t){let n=t.paramSources.get(e);if(n)return Ne(n);if(t.variableCache.has(e))return Jb(t.variableCache.get(e)??null);if(t.resolvingVariables.has(e))return null;t.resolvingVariables.add(e);let r=await Tb(e,t);if(r)return t.variableCache.set(e,Ne(r)),t.resolvingVariables.delete(e),r;let o=t.scopeVariables?.get(e)??t.analysis.variables.get(e);if(o){let s=await Ce(o,t);return t.variableCache.set(e,s?Ne(s):null),t.resolvingVariables.delete(e),s}let i=t.analysis.imports.get(e);if(i&&t.importDepth<t.options.maxImportDepth){let s=await mf(i,t);if(s){let a=$o(s,t,{importDepth:t.importDepth+1}),c=gf(i,s);if(c){let d=(await on(c,[],a)).returnSource;return t.variableCache.set(e,d?Ne(d):null),t.resolvingVariables.delete(e),d}let l=s.variables.get(i.importedName);if(l){let u=await Ce(l,a);return t.variableCache.set(e,u?Ne(u):null),t.resolvingVariables.delete(e),u}}}return t.variableCache.set(e,null),t.resolvingVariables.delete(e),null}async function Tb(e,t){let n=t.analysis.stateSetters.get(e);if(!n)return null;let r=[];pa(t.analysis.ast,{CallExpression(o){if(k.isIdentifier(o.node.callee,{name:n})){let i=o.node.arguments[0];k.isExpression(i)&&r.push(i);return}o.node.arguments.some(i=>k.isIdentifier(i)&&i.name===n)&&r.push(o.node)}});for(let o of r){let i=await Ce(o,t);if(i)return i}return null}async function Ce(e,t){if(k.isIdentifier(e))return rf(e.name,t);if(k.isMemberExpression(e)||k.isOptionalMemberExpression(e)){let n=k.isMemberExpression(e)?Xd(e,{file:t.file}):null;if(n)return cf(n);let r=await _b(e,t);if(!r)return null;let o=Vb(e);return xr(r,o,!1)}if(k.isAwaitExpression(e))return k.isExpression(e.argument)?Ce(e.argument,t):null;if(k.isCallExpression(e))return of(e,t);if(k.isObjectExpression(e)){let n=await sf(e,t);return Object.keys(n).length>0?ga(n,t.file):null}if(k.isConditionalExpression(e)){let n=await Ce(e.consequent,t),r=await Ce(e.alternate,t);return yr(Hd(n,r))}if(k.isLogicalExpression(e)){let n=await Ce(e.left,t),r=await Ce(e.right,t);return yr(Hd(n,r))}return k.isTSAsExpression(e)||k.isTSSatisfiesExpression(e)||k.isTSNonNullExpression(e)||k.isTypeCastExpression(e)||k.isParenthesizedExpression(e)?Ce(e.expression,t):null}async function _b(e,t){let n=e;for(;k.isMemberExpression(n)||k.isOptionalMemberExpression(n);)n=n.object;return k.isExpression(n)?Ce(n,t):null}async function of(e,t){let n=Jd(e,{file:t.file,imports:t.analysis.imports});if(n)return cf(n);if(zd(e)){let d=e.arguments[0];if(d&&k.isExpression(d))return yr(await Ce(d,t))}let r=await Fb(e,t);if(r)return r;let o=Ud(e,{file:t.file});if(o)return{sourceKind:o.sourceKind,sourceType:"api-field",endpointPattern:o.endpointPattern,valuePath:o.valuePath,confidence:o.confidence,readonly:!0,evidence:o.evidence};let i=await Db(e,t);if(i)return i;let s=await Lb(e,t);if(s)return s;let a=await Bb(e,t);if(a)return a;let c=await jb(e,t);if(c)return c;let l=[];for(let d of e.arguments)if(k.isExpression(d)){let p=await Ce(d,t);p&&l.push(p)}let u=lf(l);return u.length===1?yr(u[0]):null}async function Fb(e,t){let n=dt(e.callee);if(n!=="useQuery"&&n!=="useSuspenseQuery"&&n!=="useInfiniteQuery"&&n!=="useSWR")return null;if(n==="useSWR"){let i=Ob(e.arguments[0],t.file,"SWR key"),s=e.arguments[1];if(k.isIdentifier(s)){let a=await hr(s.name,t);if(a)return(await on(a.node,i?[i]:[],a.context)).returnSource??i}return i}let r=e.arguments[0];if(!k.isObjectExpression(r))return Do(t.file,`${n} without static options`);let o=Mb(r,"queryFn");if(!o)return Do(t.file,`${n} without queryFn`);if(k.isIdentifier(o)){let i=await hr(o.name,t);return i?(await on(i.node,[],i.context)).returnSource:Do(t.file,`${n} queryFn unresolved`)}return k.isArrowFunctionExpression(o)||k.isFunctionExpression(o)?(await on(o,[],t)).returnSource:k.isCallExpression(o)?of(o,t):null}function Mb(e,t){for(let n of e.properties){if(!k.isObjectProperty(n)||!k.isExpression(n.value))continue;if(af(n)===t)return n.value}return null}function Ob(e,t,n){return k.isStringLiteral(e)?{sourceKind:e.value.startsWith("/api/")?"site-api-route":"external-api",sourceType:"api-field",endpointPattern:e.value,confidence:"exact",readonly:!0,evidence:[{file:t,reason:n}]}:null}async function Db(e,t){if(!k.isMemberExpression(e.callee)||!k.isIdentifier(e.callee.property))return null;let n=e.callee.property.name;if(!["map","filter","slice","sort","toSorted"].includes(n))return null;let r=k.isExpression(e.callee.object)?await Ce(e.callee.object,t):null;if(!r)return null;if(n!=="map")return rn(r);let o=e.arguments[0];if(k.isIdentifier(o)){let i=await hr(o.name,t);if(!i)return rn(r);let s=await on(i.node,[r],i.context);return{...rn(r),...s.objectReturnMap??s.returnSource?.fieldMap?{fieldMap:s.objectReturnMap??s.returnSource.fieldMap}:{}}}if(k.isArrowFunctionExpression(o)||k.isFunctionExpression(o)){let i=await on(o,[r],t);return{...rn(r),...i.objectReturnMap??i.returnSource?.fieldMap?{fieldMap:i.objectReturnMap??i.returnSource.fieldMap}:{}}}return rn(r)}async function Lb(e,t){return!k.isMemberExpression(e.callee)||!k.isIdentifier(e.callee.property,{name:"json"})||!k.isExpression(e.callee.object)?null:Ce(e.callee.object,t)}async function Bb(e,t){return!k.isMemberExpression(e.callee)||!k.isIdentifier(e.callee.property,{name:"then"})||!k.isExpression(e.callee.object)?null:yr(await Ce(e.callee.object,t))}async function jb(e,t){if(!k.isIdentifier(e.callee))return null;let n=await hr(e.callee.name,t);if(!n)return null;let r=[];for(let i of e.arguments){if(!k.isExpression(i)){r.push(Do(t.file,`unsupported argument for ${e.callee.name}`));continue}let s=await Ce(i,t);r.push(s)}return(await on(n.node,r,n.context)).returnSource}async function hr(e,t){let n=t.analysis.functions.get(e);if(n)return{node:n,context:t};let r=t.analysis.imports.get(e);if(!r||t.importDepth>=t.options.maxImportDepth)return null;let o=await mf(r,t);if(!o)return null;let i=$o(o,t,{importDepth:t.importDepth+1}),s=gf(r,o);return s?{node:s,context:i}:hr(r.importedName,i)}async function on(e,t,n){if(n.functionDepth>=n.options.maxFunctionDepth)return{returnSource:null};let r=$o(n.analysis,n,{functionDepth:n.functionDepth+1});r.scopeVariables=n.analysis.functionVariables.get(e),e.params.forEach((c,l)=>{let u=t[l];u&&fa(c,Ub(u),r)});let o=$b(e),i=null,s,a=!1;for(let c of o){if(k.isObjectExpression(c)){s={...s??{},...await sf(c,r)},i=i??ga(s,n.file);continue}let l=await Ce(c,r);if(l){if(!i){i=l;continue}let u=ma(i,l);if(!u){a=!0,i=null;continue}i=u}}return{returnSource:a?null:i,...s?{objectReturnMap:s}:{}}}function fa(e,t,n){if(k.isIdentifier(e)){n.paramSources.set(e.name,Ne(t));return}if(k.isAssignmentPattern(e)){fa(e.left,t,n);return}if(k.isObjectPattern(e))for(let r of e.properties){if(!k.isObjectProperty(r)||r.computed||!k.isIdentifier(r.key))continue;let o=xr(t,[{kind:"property",name:r.key.name}],!0),i=k.isAssignmentPattern(r.value)?r.value.left:r.value;fa(i,o,n)}}function $b(e){if(k.isArrowFunctionExpression(e)&&k.isExpression(e.body))return[e.body];let t=[],n=e.body;if(!k.isBlockStatement(n))return t;let r=o=>{if(k.isFunction(o)&&o!==e)return;if(k.isReturnStatement(o)){o.argument&&k.isExpression(o.argument)&&t.push(o.argument);return}let i=k.VISITOR_KEYS[o.type];for(let s of i??[]){let a=o[s];if(Array.isArray(a))for(let c of a)k.isNode(c)&&r(c);else k.isNode(a)&&r(a)}};return r(n),t}async function sf(e,t){let n={};for(let r of e.properties){if(!k.isObjectProperty(r))continue;let o=af(r);if(!o||!k.isExpression(r.value))continue;let i=await Ce(r.value,t);i&&(n[o]=i)}return n}function af(e){return k.isIdentifier(e.key)&&!e.computed?e.key.name:k.isStringLiteral(e.key)?e.key.value:null}function Vb(e){let t=[],n=e;for(;k.isMemberExpression(n)||k.isOptionalMemberExpression(n);){let r=n.property;n.computed?k.isStringLiteral(r)?t.unshift({kind:"property",name:r.value}):k.isNumericLiteral(r)&&t.unshift({kind:"index",index:r.value}):k.isIdentifier(r)&&t.unshift({kind:"property",name:r.name}),n=n.object}return k.isIdentifier(n),t}function xr(e,t,n){if(t.length===0)return Ne(e);let r=t[0];if(r?.kind==="property"&&e.fieldMap?.[r.name])return xr(e.fieldMap[r.name],t.slice(1),n);let o=Ne(e);if(o.sourceType==="cms-field"){let i=t.filter(s=>s.kind==="property").map(s=>s.name);return i[0]==="data"&&i[1]==="items"?(o.valuePath=gr(o.valuePath,"data.items[]"),o.cmsFieldRoot=!1,o):i[0]==="fields"?(o.fieldPath=gr(o.fieldPath,i.slice(1).join(".")),o.cmsFieldRoot=!0,o):o.cmsFieldRoot||n||o.fieldMap?(o.fieldPath=gr(o.fieldPath,i.join(".")),o):(o.valuePath=gr(o.valuePath,Wd(t)),o)}return o.valuePath=gr(o.valuePath,Wd(t)),o}function Wd(e){return e.map(t=>t.kind==="property"?t.name:`[${t.index}]`).join(".").replace(/\.\[/g,"[")}function gr(e,t){return t?e?t.startsWith("[")?`${e}${t}`:`${e}.${t}`:t:e}function cf(e){return{sourceKind:e.sourceKind,sourceType:e.sourceType,operation:e.operation,collection:e.collection,endpointPattern:e.endpointPattern,valuePath:e.valuePath,confidence:e.confidence,readonly:!0,evidence:e.evidence}}function rn(e){let t=Ne(e);return t.sourceType==="cms-field"&&!t.valuePath&&(t.valuePath="items[]"),t}function Ub(e){let t=Ne(e);return t.valuePath=void 0,t.sourceType==="cms-field"&&(t.cmsFieldRoot=!1),t}function yr(e){return e?{...Ne(e),confidence:e.confidence==="unknown"?"unknown":"safe-derived",evidence:[...e.evidence,{file:e.evidence[0]?.file??"unknown",reason:"safe derived expression"}]}:null}function Hd(e,t){return e?t?ma(e,t):Ne(e):t?Ne(t):null}function ma(e,t){if(Lo(e)!==Lo(t))return null;let n=ff(e.confidence,t.confidence)<=0?e.confidence:t.confidence;return{...e,confidence:n,evidence:[...e.evidence,...t.evidence]}}function lf(e){let t=new Map;for(let n of e){let r=Lo(n),o=t.get(r);t.set(r,o?ma(o,n):Ne(n))}return[...t.values()]}function Lo(e){let t=e.fieldMap?Object.fromEntries(Object.entries(e.fieldMap).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>[n,Lo(r)])):void 0;return JSON.stringify({sourceKind:e.sourceKind,sourceType:e.sourceType,endpointPattern:e.endpointPattern,operation:e.operation,collection:e.collection,fieldPath:e.fieldPath,valuePath:e.valuePath,cmsFieldRoot:e.cmsFieldRoot,fieldMap:t})}function ga(e,t){let n=Object.values(e)[0];return{sourceKind:n?.sourceKind??"unknown-api",sourceType:n?.sourceType??"api-field",endpointPattern:n?.endpointPattern,operation:n?.operation,collection:n?.collection,confidence:n?.confidence??"partial",readonly:!0,evidence:n?.evidence??[{file:t,reason:"object return map"}],fieldMap:e}}function Do(e,t){return{sourceKind:"unknown-api",sourceType:"api-field",confidence:"unknown",readonly:!0,evidence:[{file:e,reason:t}]}}function Bo(e,t,n){return{sourceKind:e.sourceKind,sourceType:e.sourceType,...e.endpointPattern?{endpointPattern:e.endpointPattern}:{},...e.operation?{operation:e.operation}:{},...e.collection?{collection:e.collection}:{},...e.fieldPath?{fieldPath:e.fieldPath}:{},...e.valuePath?{valuePath:e.valuePath}:{},targetKind:t,targetName:n,confidence:e.confidence,readonly:!0,evidence:e.evidence.map(r=>({...r}))}}function uf(e){let t=[...e].sort(df),n=t[0];return{hasDynamicData:t.length>0,sourceKinds:[...new Set(t.map(r=>r.sourceKind))],...n?.endpointPattern?{primaryEndpoint:n.endpointPattern}:{},...n?.collection?{primaryCollection:n.collection}:{},...n?.fieldPath?{primaryFieldPath:n.fieldPath}:{}}}function Kb(e){let t=new Set,n=[];for(let r of e){let o=JSON.stringify({sourceKind:r.sourceKind,endpointPattern:r.endpointPattern,collection:r.collection,fieldPath:r.fieldPath,valuePath:r.valuePath,targetKind:r.targetKind,targetName:r.targetName});t.has(o)||(t.add(o),n.push(r))}return n}function df(e,t){return Gd(e.targetKind)-Gd(t.targetKind)||ff(e.confidence,t.confidence)||Yd(e.sourceKind)-Yd(t.sourceKind)||e.targetName.localeCompare(t.targetName)}function Gd(e){return{"repeat-region":0,"conditional-region":1,text:2,richtext:3,attribute:4,"component-prop":5}[e]}function Yd(e){return e.startsWith("vcp-cms-")?0:e==="site-api-route"?1:e==="external-api"?2:3}function ff(e,t){let n={exact:0,"safe-derived":1,partial:2,unknown:3};return n[e]-n[t]}function ha(e,t,n){let r=n.get(e);if(r?.source===t)return r;let o=Sb(t,{sourceType:"module",plugins:["jsx","typescript"]}),i={file:e,source:t,ast:o,variables:new Map,functions:new Map,imports:new Map,stateSetters:new Map,functionVariables:new WeakMap};return pa(o,{ImportDeclaration(s){let a=s.node.source.value;for(let c of s.node.specifiers)k.isImportSpecifier(c)&&k.isIdentifier(c.local)?i.imports.set(c.local.name,{source:a,importedName:k.isIdentifier(c.imported)?c.imported.name:c.imported.value,localName:c.local.name,isDefault:!1}):k.isImportDefaultSpecifier(c)&&i.imports.set(c.local.name,{source:a,importedName:"default",localName:c.local.name,isDefault:!0})},FunctionDeclaration(s){s.node.id?.name&&i.functions.set(s.node.id.name,s.node)},VariableDeclarator(s){let a=s.getFunctionParent(),c=a&&(k.isFunctionDeclaration(a.node)||k.isFunctionExpression(a.node)||k.isArrowFunctionExpression(a.node))?a.node:null,l=c?i.functionVariables.get(c)??new Map:i.variables;c&&!i.functionVariables.has(c)&&i.functionVariables.set(c,l);for(let u of Ln(s.node.id))l.set(u,k.isExpression(s.node.init)?s.node.init:null);if(k.isArrayPattern(s.node.id)&&k.isCallExpression(s.node.init)&&dt(s.node.init.callee)==="useState"){let[u,d]=s.node.id.elements;k.isIdentifier(u)&&k.isIdentifier(d)&&i.stateSetters.set(u.name,d.name)}k.isIdentifier(s.node.id)&&Zd(s.node.init)&&i.functions.set(s.node.id.name,s.node.init)},ExportNamedDeclaration(s){let a=s.node.declaration,c=s.node.source?.value;if(c)for(let l of s.node.specifiers){if(!k.isExportSpecifier(l))continue;let u=k.isIdentifier(l.exported)?l.exported.name:l.exported.value,d=l.local.name;i.imports.set(u,{source:c,importedName:d,localName:u,isDefault:d==="default"})}if(k.isFunctionDeclaration(a)&&a.id?.name&&i.functions.set(a.id.name,a),k.isVariableDeclaration(a))for(let l of a.declarations)k.isIdentifier(l.id)&&Zd(l.init)&&i.functions.set(l.id.name,l.init)},ExportDefaultDeclaration(s){let a=s.node.declaration;if((k.isFunctionDeclaration(a)||k.isFunctionExpression(a)||k.isArrowFunctionExpression(a))&&i.functions.set("default",a),k.isIdentifier(a)){let c=i.functions.get(a.name);c&&i.functions.set("default",c)}}}),n.set(e,i),i}function Ln(e){return!e||k.isVoidPattern(e)?[]:k.isIdentifier(e)?[e.name]:k.isObjectPattern(e)?e.properties.flatMap(t=>k.isObjectProperty(t)?Ln(t.value):Ln(t.argument)):k.isArrayPattern(e)?e.elements.flatMap(t=>t?Ln(k.isRestElement(t)?t.argument:t):[]):k.isAssignmentPattern(e)?Ln(e.left):k.isRestElement(e)?Ln(e.argument):[]}function Zd(e){return k.isFunctionExpression(e)||k.isArrowFunctionExpression(e)}function pf(e,t){let n=e.functions.get(t)??e.functions.get("default");return n?e.functionVariables.get(n):void 0}async function mf(e,t){let n=await hf(t.file,e.source,t.exists);if(!n)return null;let r=await t.readFile(n);return ha(n,r,t.fileCache)}function gf(e,t){return e.isDefault?t.functions.get("default")??t.functions.get(e.localName)??null:t.functions.get(e.importedName)??null}async function hf(e,t,n){return ct(t)?yn(e,t,n):null}function $o(e,t,n={}){return{file:e.file,analysis:e,readFile:t.readFile,exists:t.exists,fileCache:t.fileCache,options:t.options,variableCache:new Map,functionDepth:n.functionDepth??t.functionDepth,importDepth:n.importDepth??t.importDepth,paramSources:new Map(t.paramSources),resolvingVariables:new Set,resolvingComponentProps:t.resolvingComponentProps,scopeVariables:e===t.analysis?t.scopeVariables:void 0}}function Jb(e){return e?Ne(e):null}function Ne(e){return{...e,evidence:e.evidence.map(t=>({...t})),...e.fieldMap?{fieldMap:Object.fromEntries(Object.entries(e.fieldMap).map(([t,n])=>[t,Ne(n)]))}:{}}}var Xb=50,zb=8*1024*1024;function bf(e,t={}){let n=[],r=[],o=t.externalAdapters??[],i=Math.max(0,t.maxUndoEntries??Xb),s=Math.max(0,t.maxUndoBytes??zb);return{prepareRewritePlan:a,execute:c,executeFilePlan:l,undo:u,redo:d};async function a(N){let J=[...N.steps].sort((W,Y)=>W.order-Y.order),F=J.filter(W=>W.type!=="invoke-external-adapter");if(F.length!==J.length)return{ok:!1,errorCode:"unsupported-operation",reason:"External adapter writes require a transactional prepare/commit/rollback contract."};let L=new Set(F.map(W=>W.file)),G=await P(L),q=new Map(G.map(W=>[W.file,W.exists===!1?"":W.content])),ye;for(let W of F){let Y=Sf(W,q.get(W.file)??"");if(!Y.ok)return{ok:!1,errorCode:Y.errorCode,reason:Y.reason};q.set(W.file,Y.source),ye=Y.selectionRef??ye}return{ok:!0,filePlan:{operationId:N.operationId,kind:"source-edit",target:N.target,documentVersion:N.documentVersion,conflictPolicy:"compare-and-swap",edits:[...q].map(([W,Y])=>({operation:"upsert",file:W,content:Y,baseContentHash:G.find(be=>be.file===W)?.sha256??null}))},...ye?{selectionRef:ye}:{}}}async function c(N){let J=[...N.steps].sort((be,Et)=>be.order-Et.order),F=J.filter(be=>be.type!=="invoke-external-adapter"),L=J.filter(be=>be.type==="invoke-external-adapter"),G=new Set(F.map(be=>be.file));if(F.length>0&&L.length>0)return{ok:!1,operationId:N.operationId,errorCode:"unsupported-operation",reason:"Mixed local file rewrites and external adapter writes require an explicit compensation contract.",rolledBack:!1};if(F.length===0)return C(N,L);let q=await P(G),ye=new Map;for(let be of q)ye.set(be.file,be.exists===!1?"":be.content);let W;for(let be of F){let Et=ye.get(be.file)??"",It=Sf(be,Et);if(!It.ok)return{ok:!1,operationId:N.operationId,errorCode:It.errorCode,reason:It.reason,rolledBack:!1};ye.set(be.file,It.source),It.selectionRef&&(W=It.selectionRef)}let Y=await B([...ye].map(([be,Et])=>({file:be,content:Et,exists:!0,version:0,sha256:le(Et)})),q);return Y.ok===!1?{ok:!1,operationId:N.operationId,errorCode:Y.rolledBack?"writeback-failed":"rollback-failed",reason:Y.reason,rolledBack:Y.rolledBack}:(n.push({operationId:N.operationId,preSnapshots:q,postSnapshots:Y.snapshots,plan:N}),p(),r.length=0,{ok:!0,operationId:N.operationId,kind:N.kind,target:N.target,resultVersion:Math.max(...Y.snapshots.map(be=>be.version)),affectedFiles:[...G],...W?{selectionRef:W}:{}})}async function l(N){let J=new Set(N.edits.map(Y=>Y.file)),F=await P(J),L=v(N,F);if(L)return{ok:!1,operationId:N.operationId,errorCode:"stale-version",reason:L.reason,affectedFiles:[L.file],rolledBack:!1};let G=new Map(F.map(Y=>[Y.file,Y])),q=N.edits.find(Y=>Y.operation==="create-only"&&G.get(Y.file)?.exists!==!1);if(q)return{ok:!1,operationId:N.operationId,errorCode:"stale-version",reason:`MATERIALIZATION_INSTANCE_CONFLICT: create-only target already exists: ${q.file}`,affectedFiles:[q.file],rolledBack:!1};let ye=N.edits.map(Y=>Y.operation==="delete"?{file:Y.file,content:"",exists:!1,version:0}:{file:Y.file,content:Y.content,exists:!0,version:0,sha256:le(Y.content)}),W=await B(ye,F,new Set(N.edits.filter(Y=>Y.operation==="create-only").map(Y=>Y.file)));return W.ok===!1?{ok:!1,operationId:N.operationId,errorCode:W.rolledBack?"writeback-failed":"rollback-failed",reason:W.reason,rolledBack:W.rolledBack}:(n.push({operationId:N.operationId,preSnapshots:F,postSnapshots:W.snapshots,plan:{operationId:N.operationId,kind:N.kind,target:N.target,documentVersion:N.documentVersion,steps:[],preSnapshots:F}}),p(),r.length=0,{ok:!0,operationId:N.operationId,kind:N.kind,target:N.target,resultVersion:Math.max(...W.snapshots.map(Y=>Y.version)),affectedFiles:[...J]})}async function u(){let N=n.at(-1);if(!N)return{ok:!1,operationId:"",errorCode:"unknown",reason:"Nothing to undo"};let J=await B(N.preSnapshots,N.postSnapshots);return J.ok===!1?{ok:!1,operationId:N.operationId,errorCode:J.rolledBack?"writeback-failed":"rollback-failed",reason:J.reason,rolledBack:J.rolledBack}:(n.pop(),r.push(N),{ok:!0,operationId:N.operationId,kind:N.plan.kind,target:N.plan.target,resultVersion:Math.max(...J.snapshots.map(F=>F.version)),affectedFiles:N.preSnapshots.map(F=>F.file)})}async function d(){let N=r.at(-1);if(!N)return{ok:!1,operationId:"",errorCode:"unknown",reason:"Nothing to redo"};let J=await B(N.postSnapshots,N.preSnapshots);return J.ok===!1?{ok:!1,operationId:N.operationId,errorCode:J.rolledBack?"writeback-failed":"rollback-failed",reason:J.reason,rolledBack:J.rolledBack}:(r.pop(),n.push(N),p(),{ok:!0,operationId:N.operationId,kind:N.plan.kind,target:N.plan.target,resultVersion:Math.max(...J.snapshots.map(F=>F.version)),affectedFiles:N.postSnapshots.map(F=>F.file)})}function p(){for(;n.length>i;)n.shift();for(;n.length>0&&m()>s;)n.shift()}function m(){return n.reduce((N,J)=>N+g(J),0)}function g(N){return S(N.preSnapshots)+S(N.postSnapshots)}function S(N){return N.reduce((J,F)=>J+F.file.length+F.content.length,0)}async function C(N,J){let F=[];for(let L of J){let G=L.capability??"write-text",q=o.find(W=>W.sourceType===L.sourceType&&(L.adapterId===void 0||W.adapterId===L.adapterId)&&(W.capabilities===void 0||W.capabilities.includes(G)));if(!q)return{ok:!1,operationId:N.operationId,errorCode:"unsupported-operation",reason:`No external adapter registered for ${L.sourceType}`,rolledBack:!1};let ye=await q.execute(L);if(!ye.ok)return{ok:!1,operationId:N.operationId,errorCode:"writeback-failed",reason:ye.reason??`External adapter failed for ${L.sourceType}`,rolledBack:!1};F.push(L.file)}return{ok:!0,operationId:N.operationId,kind:N.kind,target:N.target,resultVersion:0,affectedFiles:F}}function v(N,J){if(N.conflictPolicy!=="compare-and-swap")return null;let F=new Map(J.map(L=>[L.file,L]));for(let L of N.edits){if(L.operation==="create-only")continue;if(L.baseContentHash===void 0)return{file:L.file,reason:`Source file ${L.file} is missing baseContentHash. Reopen the file before saving.`};let G=F.get(L.file),q=L.baseContentHash;if(q===null){if(G?.exists!==!1)return{file:L.file,reason:`Source file ${L.file} was created or changed before save.`};continue}if(!q)return{file:L.file,reason:`Source file ${L.file} is missing baseContentHash. Reopen the file before saving.`};if(G?.exists===!1||G?.sha256!==q)return{file:L.file,reason:`Source file ${L.file} changed before save. Reload or explicitly overwrite the newer version.`}}return null}async function P(N){let J=[];for(let F of N)J.push(await w(F));return J}async function w(N){if(!await e.exists(N))return{file:N,content:"",version:0,exists:!1};let F=Math.max(1,e.getVersion(N)),L=await e.readFile(N);return{file:N,content:L,version:F,exists:!0,sha256:le(L)}}async function B(N,J,F=new Set){let L=[];try{for(let G of N){if(F.has(G.file)){if(!e.createExclusive)throw new Error("Create-only write requires atomic exclusive-create support.");await e.createExclusive(G.file,G.content)}else await re(G);let q=e.bumpVersion(G.file);L.push(G.file),G.version=q}}catch(G){let q=await ee(J.filter(W=>L.includes(W.file)));if(q.ok===!1)return{ok:!1,reason:`Writeback failed, then rollback failed for ${q.failedFiles.join(", ")}: ${xf(G)}`,rolledBack:!1,instanceConflict:yf(G)};let ye=yf(G);return{ok:!1,reason:`${ye?"MATERIALIZATION_INSTANCE_CONFLICT: ":""}Writeback failed and committed files were restored: ${xf(G)}`,rolledBack:!0,instanceConflict:ye}}return{ok:!0,snapshots:N.map(Wb)}}async function re(N){if(N.exists===!1){await e.deleteFile(N.file);return}await e.writeFile(N.file,N.content)}async function ee(N){let J=[];for(let F of N)try{await re(F),e.bumpVersion(F.file)}catch{J.push(F.file)}return J.length===0?{ok:!0}:{ok:!1,failedFiles:J}}}function yf(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="EEXIST"}function Wb(e){let t=e.exists!==!1;return{file:e.file,content:t?e.content:"",version:e.version,exists:t,...t?{sha256:le(e.content)}:{}}}function xf(e){return e instanceof Error?e.message:String(e)}function Sf(e,t){switch(e.type){case"invoke-external-adapter":return{ok:!1,reason:"External adapter steps must be executed asynchronously",errorCode:"unsupported-operation"};case"add-import":return De(Pn({source:t,moduleSpecifier:e.moduleSpecifier,imports:e.imports}));case"remove-import":return De(An({source:t,moduleSpecifier:e.moduleSpecifier,imports:e.imports}));case"remove-node":return De(kn({source:t,locator:e.locator,removeWhitespace:e.removeWhitespace}));case"insert-child":return De(Rn({source:t,locator:e.parentLocator,node:e.node,placement:e.placement,anchorLocator:e.anchorLocator,selectionContext:e.selectionContext}));case"update-text":return De(ao({source:t,locator:e.locator,segmentIndex:e.segmentIndex,newText:e.newText}));case"update-value":return De(qn({source:t,locator:e.locator,next:e.value}));case"update-array-item":return De(qn({source:t,locator:e.locator,next:e.value}));case"insert-bound-array-item":return De(fo({source:t,locator:e.locator,index:e.index,value:e.value}));case"insert-jsx-expression-child":return De(co({source:t,locator:e.parentLocator,expression:e.expression,placement:e.placement,anchorLocator:e.anchorLocator,selectionContext:e.selectionContext}));case"remove-bound-array-item":return De(po({source:t,locator:e.locator,index:e.index}));case"move-array-item":return De(mo({source:t,locator:e.locator,fromIndex:e.fromIndex,toIndex:e.toIndex}));case"move-node":return De(Nn({source:t,locator:e.locator,targetParentLocator:e.targetParentLocator,placement:e.placement,anchorLocator:e.anchorLocator,selectionContext:e.selectionContext}));case"move-repeat-template-child":return De(lo({source:t,locator:e.locator,targetParentLocator:e.targetParentLocator,placement:e.placement,anchorLocator:e.anchorLocator,repeatExpression:e.repeatExpression,selectionContext:e.selectionContext}));case"set-class-name-source":return Hb(e,t);case"set-props":{let n=e;return De(uo({source:t,locator:n.locator,props:n.props}))}default:return{ok:!1,reason:`Unknown step type: ${e.type}`,errorCode:"unknown"}}}function Hb(e,t){let{request:n}=e;if(n.newAttrRaw!==null&&!hu(n.newAttrRaw))return{ok:!1,reason:"newAttrRaw must be a valid JSX className attribute.",errorCode:"invalid-params"};let r=n.oldAttrRange!==null&&n.oldAttrRaw!==null,o=n.openingElementRange.start,i=n.openingElementRange.end,s=t.slice(o,i);if(!(Number.isInteger(o)&&Number.isInteger(i)&&o>=0&&i>o&&i<=t.length&&s.startsWith("<")&&s.endsWith(">")&&!s.startsWith("</")&&(n.oldAttrRange===null||n.oldAttrRange.start>=o&&n.oldAttrRange.end<=i)))return{ok:!1,reason:"The opening element range changed before className save.",errorCode:"stale-version"};if(!r&&n.expectedVersion.contentHash!==le(t))return{ok:!1,reason:"The source file changed before className save.",errorCode:"stale-version"};if(n.oldAttrRange){if(t.slice(n.oldAttrRange.start,n.oldAttrRange.end)!==n.oldAttrRaw)return{ok:!1,reason:"The className attribute changed before save.",errorCode:"stale-version"}}else if(n.oldAttrRaw!==null)return{ok:!1,reason:"The className attribute range no longer matches.",errorCode:"stale-version"};return{ok:!0,source:gu({source:t,oldAttrRange:n.oldAttrRange,openingElementRange:n.openingElementRange,newAttrRaw:n.newAttrRaw})}}function De(e){if(e.ok)return{ok:!0,source:e.source,...e.selectionRef?{selectionRef:e.selectionRef}:{}};switch(e.diagnostic.code){case"locator-miss":return{ok:!1,reason:e.diagnostic.message,errorCode:"locator-miss"};case"unsupported-syntax":case"binding-not-found":case"export-not-found":case"property-not-found":case"array-index-out-of-range":case"directive-conflict":case"metadata-shape-unsupported":return{ok:!1,reason:e.diagnostic.message,errorCode:"unsupported-operation"};case"invalid-parent-child-relation":case"self-closing-element":return{ok:!1,reason:e.diagnostic.message,errorCode:"invalid-target"};case"parse-failed":case"printer-failed":return{ok:!1,reason:e.diagnostic.message,errorCode:"ast-error"};default:return{ok:!1,reason:e.diagnostic.message,errorCode:"writeback-failed"}}}function Ef(){let e=new Set;return{emit(t){for(let n of Array.from(e))try{n(t)}catch{}},subscribe(t){return e.add(t),()=>{e.delete(t)}}}}import{randomUUID as Gb}from"node:crypto";import Vo from"node:fs/promises";import ya from"node:path";import{setTimeout as Yb}from"node:timers/promises";var Zb={async mkdir(e,t){await Vo.mkdir(e,t)},async writeFile(e,t,n){await Vo.writeFile(e,t,n)},async rename(e,t){await Vo.rename(e,t)},async rm(e,t){await Vo.rm(e,t)}},Qb=new Set(["EACCES","EBUSY","EPERM"]),qb=[10,20,40,80,160];async function eE(e,t,n){for(let r of qb)try{await e.rename(t,n);return}catch(o){if(!tE(o))throw o;await Yb(r)}await e.rename(t,n)}function tE(e){return e instanceof Error&&"code"in e&&typeof e.code=="string"&&Qb.has(e.code)}async function Uo(e,t,n=Zb){let r=ya.dirname(e),o=ya.basename(e),i=ya.join(r,`.${o}.${process.pid}.${Gb()}.tmp`),s=!1;try{await n.mkdir(r,{recursive:!0}),await n.writeFile(i,t,"utf8"),await eE(n,i,e),s=!0}finally{if(!s)try{await n.rm(i,{force:!0})}catch{}}}import{randomBytes as hE}from"node:crypto";import bt from"node:path";import{parse as yE}from"@babel/parser";import xE from"@babel/traverse";import{COMPONENT_I18N_FILE_SUFFIX as Jo,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as Cf,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as SE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as bE,SiteEditMaterializationSchema as EE,parseComponentI18nResourcesJson as IE}from"@vcp-dev/contracts";var vf=/#[0-9a-fA-F]{3,8}\b|\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\s*\(/i,kf=/\b(?:bg-black|bg-white|text-white|text-black)(?:\b|\/)/g,nE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke)-\[#(?:[0-9a-fA-F]{3,8})\](?:\/\d+)?/g,rE=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*#[0-9a-fA-F]{3,8}[^'"]*['"]/g,oE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*rgba?\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,iE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,sE=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,aE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*(?:oklch|lab|lch|hsla?)\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,cE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*(?:oklch|lab|lch|hsla?)\([^)]+\)[^'"]*['"]/gi,lE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*color-mix\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,uE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*color-mix\([^'"]*['"]/gi,dE=/\b(?:bg|text|border|ring|outline|fill|stroke)-(?:black|white|slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)(?:-\d{2,3})?(?:\b|\/)/g,fE=/var\(\s*--(?:_|private-|vcp-)[^)]+\)/gi,pE=/#[0-9a-fA-F]{3,8}\b|\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\s*\([^)]*\)/gi;function Sr(e,t){let n=Ko([...He(e,nE),...He(e,rE),...He(e,oE),...He(e,t.includeRgbBackgroundImage?iE:sE),...t.includeExtendedColorFunctions?[...He(e,aE),...He(e,cE)]:[]]),r=Ko([...He(e,lE),...He(e,uE)]).filter(o=>t.colorMixPolicy==="always"||vf.test(o));return n.push(...r.filter(o=>!n.includes(o))),t.rejectTailwindPalette&&n.push(...He(e,dE).filter(o=>!n.includes(o))),t.rejectAnyRawColorLiteral&&n.push(...He(e,pE).filter(o=>!n.includes(o))),{hardCodedSurfaceHits:Ko(He(e,kf)),hardCodedSurfaceOccurrences:gE(e),rawColorHits:n,privateTokenHits:t.rejectPrivateTokens?Ko(He(e,fE)):[]}}function He(e,t){return e.match(new RegExp(t.source,t.flags))??[]}var If=160,mE=/((?:[a-z][a-z0-9-]*(?:\[[^\]]*\])?:)+)$/;function gE(e){let t=new RegExp(kf.source,"g"),n=[0];for(let s=0;s<e.length;s+=1)e[s]===`
5
- `&&n.push(s+1);let r=s=>{let a=0,c=n.length-1;for(;a<c;){let l=Math.ceil((a+c)/2);(n[l]??0)<=s?a=l:c=l-1}return a},o=[],i;for(;(i=t.exec(e))!==null;){let s=i[0],a=s.endsWith("/")?s.slice(0,-1):s,c=/^\/(\d+)/.exec(e.slice(i.index+a.length)),l=e.slice(Math.max(0,i.index-64),i.index),u=mE.exec(l),d=r(i.index),p=e.indexOf(`
6
- `,i.index),m=e.slice(n[d]??0,p===-1?void 0:p).trim();o.push({token:a,variant:u?.[1]??"",alpha:c?Number(c[1]):null,line:d+1,snippet:m.length>If?`${m.slice(0,If-1)}\u2026`:m})}return o}function Ko(e){return[...new Set(e)]}var ba="components/site/generated",Rf="{{$INSTANCE}}",Xo=5,vE=/^[a-z][a-z0-9-]{0,48}$/,kE=/^[a-f0-9]{8}$/,wf=/\.tsx?$/,CE=/\.json$/,RE=/\.(?:tsx?|json)$/,wE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,NE=["react","react/","next","next/","lucide-react","react-i18next","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],xa=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),Sa=xE,PE=typeof Sa=="function"?Sa:Sa.default;function AE(e){let t=Array.isArray(e.manifest.files)?e.manifest.files:[];if(t.length>Cf)return{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab file count exceeds the reusable limit."}};let n=VE(t);if(n)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Static prefab resolves duplicate target path: ${n}`,path:n}};let r=EE.safeParse(e.manifest);if(!r.success)return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab manifest failed schema validation."}};let o=BE(e.generatedRoot);if(!o)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Generated root must be ${ba}.`,path:e.generatedRoot}};if(!Ff(r.data.instanceBaseName))return{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_INVALID",message:"Static prefab instanceBaseName must contain at least one safe word.",path:r.data.instanceBaseName}};let i=Af(r.data.files),s=Af(e.controlledFiles);if(!UE(i,s))return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Controlled file list must exactly match the manifest file templates."}};if(i.size>Cf)return{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab file count exceeds the reusable limit."}};let a=0;for(let[c,l]of r.data.files.entries()){let u=Buffer.byteLength(l.content,"utf8");if(u>SE)return{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab file exceeds the per-file content limit.",file:l.pathTemplate,path:`files[${c}]`}};a+=u}return a>bE?{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab exceeds the reusable total content limit."}}:{ok:!0,data:{kind:"static-prefab-materialization",instanceName:"",generatedRoot:o,instanceRoot:"",entry:{path:"",export:r.data.entry.export},files:[]}}}async function TE(e){let t=AE(e);if(!t.ok)return t;let n=t.data.generatedRoot,r=Ff(e.manifest.instanceBaseName),o=Math.max(1,Math.min(Xo,e.maxAttempts??Xo));for(let i=0;i<o;i+=1){let s=jE(e.instanceNameGenerator?.()??hE(4).toString("hex"));if(!s)return{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_INVALID",message:"Static prefab instance suffix must be 8 lowercase hex chars."}};let a=`${r}-${s}`,c=Of(n,a),l=_E({manifest:e.manifest,generatedRoot:n,instanceName:a,instanceRoot:c,allowedExternalImports:e.allowedExternalImports??NE});if(!l.ok)return l;if(!await FE(e.exists,c,l.data.files))return{ok:!0,data:l.data}}return{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_CONFLICT",message:"Unable to allocate a create-only static prefab instance after repeated conflicts."}}}async function _f(e){let t=Math.max(1,Math.min(Xo,e.maxAttempts??Xo));for(let n=0;n<t;n+=1){let r=await TE({...e,maxAttempts:1});if(!r.ok){if(r.error.code==="MATERIALIZATION_INSTANCE_CONFLICT")continue;return r}let o=await e.commit(r.data);if(o.ok)return{ok:!0,plan:r.data,data:o.data};if(o.error.code!=="MATERIALIZATION_INSTANCE_CONFLICT")return o}return{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_CONFLICT",message:"Unable to commit a complete static prefab instance after repeated conflicts."}}}function _E(e){let t=[],n=new Set;for(let i of e.manifest.files){let s=Nf({pathTemplate:i.pathTemplate,generatedRoot:e.generatedRoot,instanceName:e.instanceName,instanceRoot:e.instanceRoot});if(!s.ok)return s;if(n.has(s.data))return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Static prefab resolves duplicate target path: ${s.data}`,path:s.data}};n.add(s.data),t.push({kind:"create-only",path:s.data,content:i.content,...i.role?{role:i.role}:{},sourcePathTemplate:i.pathTemplate})}t.sort((i,s)=>i.path.localeCompare(s.path));let r=Nf({pathTemplate:e.manifest.entry.pathTemplate,generatedRoot:e.generatedRoot,instanceName:e.instanceName,instanceRoot:e.instanceRoot});if(!r.ok)return r;if(!t.some(i=>i.path===r.data))return{ok:!1,error:{code:"MATERIALIZATION_ENTRY_INVALID",message:"Entry path must match one of the static prefab files.",path:r.data}};let o=ME(t,e.instanceRoot,r.data,e.manifest.entry.export,e.allowedExternalImports);return o.ok?{ok:!0,data:{kind:"static-prefab-materialization",instanceName:e.instanceName,generatedRoot:e.generatedRoot,instanceRoot:e.instanceRoot,entry:{path:r.data,export:e.manifest.entry.export},files:t}}:o}async function FE(e,t,n){if(await e(t))return!0;for(let r of n)if(await e(r.path))return!0;return!1}function Nf(e){if(e.pathTemplate.split(Rf).length!==2)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab path templates must include the instance placeholder exactly once.",path:e.pathTemplate}};let t=e.pathTemplate.replaceAll(Rf,e.instanceName),n=$E(t);return n?Of(e.generatedRoot,e.instanceName)!==e.instanceRoot?{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab instance root normalization failed.",path:e.pathTemplate}}:n!==e.instanceRoot&&!n.startsWith(`${e.instanceRoot}/`)?{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab path must stay under components/site/generated/<instance>.",path:n}}:n!==t?{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab path template cannot rely on path normalization semantics.",path:e.pathTemplate}}:n===e.instanceRoot||!RE.test(n)||wE.test(n)?{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab files must be .ts/.tsx/.json files and cannot be config, layout, provider, or global source files.",path:n}}:{ok:!0,data:n}:{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab path template resolves to an unsafe path.",path:e.pathTemplate}}}function ME(e,t,n,r,o){let i=new Set(e.map(d=>d.path)),s=new Map,a=new Map(e.map(d=>[d.path,new Set])),c=new Map;for(let d of e){if(CE.test(d.path)){if(d.path.endsWith(Jo)){let g=IE(d.content);if(!g.success)return sn("MATERIALIZATION_DATA_UNSUPPORTED",g.error.message,d.path);c.set(d.path,new Set)}else try{JSON.parse(d.content)}catch{return sn("MATERIALIZATION_DATA_UNSUPPORTED","Static prefab JSON file must contain valid JSON.",d.path)}continue}let p;try{p=yE(d.content,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab files must parse as plain module source.",file:d.path}}}let m=Sr(d.content,{colorMixPolicy:"always",includeExtendedColorFunctions:!0,includeRgbBackgroundImage:!0,rejectAnyRawColorLiteral:!0,rejectPrivateTokens:!0,rejectTailwindPalette:!0});if(m.hardCodedSurfaceHits.length>0||m.rawColorHits.length>0||m.privateTokenHits.length>0)return{ok:!1,error:{code:"MATERIALIZATION_STYLE_FORBIDDEN",message:"Static prefab source must use public semantic design tokens instead of raw colors or private tokens.",file:d.path}};s.set(d.path,p)}for(let d of e){if(!wf.test(d.path))continue;let p=s.get(d.path),m=null;if(PE(p,{ImportDeclaration(g){let S=Pf({importer:d.path,source:g.node.source.value,instanceRoot:t,filePaths:i,allowedExternalImports:o});if(!S.allowed)m??={code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Static prefab imports must resolve within the controlled instance or match the starter allowlist.",file:d.path},g.stop();else if(S.internalPath&&(a.get(d.path).add(S.internalPath),S.internalPath.endsWith(Jo))){let C=OE({importer:d.path,imported:S.internalPath,source:g.node.source.value,ast:p});C.ok?c.get(S.internalPath).add(d.path):(m??=C.error,g.stop())}},ExportAllDeclaration(g){m??={code:"MATERIALIZATION_ENTRY_INVALID",message:"Static prefab files cannot use export-star declarations.",file:d.path},g.stop()},ExportNamedDeclaration(g){if(g.node.source){let S=Pf({importer:d.path,source:g.node.source.value,instanceRoot:t,filePaths:i,allowedExternalImports:o});!S.allowed||!S.internalPath?(m??={code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Static prefab re-exports must resolve within the controlled instance.",file:d.path},g.stop()):a.get(d.path).add(S.internalPath)}},CallExpression(g){if(g.node.callee.type==="Import"){m??={code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Static prefab files cannot use dynamic import().",file:d.path},g.stop();return}g.node.callee.type==="Identifier"&&g.node.callee.name==="require"&&(m??={code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Static prefab files cannot use require().",file:d.path},g.stop())},NewExpression(g){g.node.callee.type==="Identifier"&&g.node.callee.name==="Function"&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab files cannot construct functions dynamically.",file:d.path},g.stop())},MetaProperty(g){g.node.meta.type==="Identifier"&&g.node.meta.name==="import"&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab files cannot use import.meta.",file:d.path},g.stop())},MemberExpression(g){let S=Tf(g.node);S&&xa.has(S)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${S}.`,file:d.path},g.stop())},OptionalMemberExpression(g){let S=Tf(g.node);S&&xa.has(S)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${S}.`,file:d.path},g.stop())},Identifier(g){g.isReferencedIdentifier()&&xa.has(g.node.name)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${g.node.name}.`,file:d.path},g.stop())},JSXAttribute(g){g.node.name.type==="JSXIdentifier"&&g.node.name.name==="style"&&(m??={code:"MATERIALIZATION_STYLE_FORBIDDEN",message:"Static prefab source cannot use inline style attributes.",file:d.path},g.stop())},JSXOpeningElement(g){g.node.name.type==="JSXIdentifier"&&g.node.name.name.toLowerCase()==="style"&&(m??={code:"MATERIALIZATION_STYLE_FORBIDDEN",message:"Static prefab source cannot declare style elements.",file:d.path},g.stop())}}),m)return{ok:!1,error:m}}if(!wf.test(n))return sn("MATERIALIZATION_ENTRY_INVALID","Static prefab entry must be a .ts/.tsx source module.",n);let l=s.get(n);if(!l)return sn("MATERIALIZATION_ENTRY_INVALID","Static prefab entry must resolve to a controlled source file.",n);if(!DE(l,r))return sn("MATERIALIZATION_EXPORT_MISSING","Static prefab entry does not declare the manifest export.",n);for(let[d,p]of c)if(p.size!==1)return sn("MATERIALIZATION_IMPORT_FORBIDDEN","Each component .i18n.json file must have exactly one same-name Client Component static importer.",d);return LE(n,a).size!==e.length?sn("MATERIALIZATION_ENTRY_INVALID","Every controlled source file must be reachable from the entry module.",n):{ok:!0,data:{kind:"static-prefab-materialization",instanceName:"",generatedRoot:ba,instanceRoot:"",entry:{path:"",export:{kind:"default"}},files:[]}}}function Pf(e){if(!e.source.startsWith("./")&&!e.source.startsWith("../"))return e.source.startsWith("@/components/site/generated/")?{allowed:!1}:{allowed:e.allowedExternalImports.some(o=>o.endsWith("/")?e.source.startsWith(o):e.source===o)};if(e.source.includes("\\")||e.source.includes("\0"))return{allowed:!1};let t=bt.posix.normalize(bt.posix.join(bt.posix.dirname(e.importer),e.source));if(t===e.instanceRoot||!t.startsWith(`${e.instanceRoot}/`))return{allowed:!1};let r=[t,`${t}.ts`,`${t}.tsx`,`${t}.json`,...["ts","tsx","json"].map(o=>`${t}/index.${o}`)].find(o=>e.filePaths.has(o));return r?{allowed:!0,internalPath:r}:{allowed:!1}}function OE(e){let t=bt.posix.dirname(e.importer),n=bt.posix.dirname(e.imported),r=bt.posix.basename(e.importer).replace(/\.tsx?$/,""),o=bt.posix.basename(e.imported).slice(0,-Jo.length),i=`./${r}${Jo}`;return!e.importer.endsWith(".tsx")||t!==n||r!==o||e.source!==i?{ok:!1,error:{code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Component i18n resources must use an explicit same-directory, same-name import from a .tsx file.",file:e.importer}}:e.ast.program.directives.some(a=>a.value.value==="use client")?{ok:!0}:{ok:!1,error:{code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:'A component that imports .i18n.json must declare the top-level "use client" directive.',file:e.importer}}}function DE(e,t){for(let n of e.program.body){if(t.kind==="default"&&n.type==="ExportDefaultDeclaration")return!0;if(t.kind!=="named"||n.type!=="ExportNamedDeclaration")continue;if(n.specifiers.some(o=>o.exported.type==="Identifier"&&o.exported.name===t.name))return!0;let r=n.declaration;if((r?.type==="FunctionDeclaration"||r?.type==="ClassDeclaration")&&r.id?.name===t.name||r?.type==="VariableDeclaration"&&r.declarations.some(o=>o.id.type==="Identifier"&&o.id.name===t.name))return!0}return!1}function LE(e,t){let n=new Set,r=[e];for(;r.length>0;){let o=r.pop();n.has(o)||(n.add(o),r.push(...t.get(o)??[]))}return n}function sn(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{file:n}:{}}}}function BE(e){let t=Mf(e);return t===ba?t:null}function jE(e){let t=e.trim().toLowerCase();return kE.test(t)?t:null}function Ff(e){let t=e.trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,49).replace(/-+$/g,"");return vE.test(t)?t:null}function Mf(e){if(!e||e.startsWith("/")||e.includes("\\"))return null;let t=bt.posix.normalize(e);return t==="."||t.startsWith("../")||t.includes("/../")||t.includes("//")?null:t}function $E(e){let t=Mf(e);return!t||t!==e?null:t}function Of(...e){return bt.posix.join(...e)}function Af(e){return new Set(e.map(t=>t.pathTemplate))}function VE(e){let t=new Set;for(let n of e){if(t.has(n.pathTemplate))return n.pathTemplate;t.add(n.pathTemplate)}return null}function UE(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function Tf(e){let t=e;for(;;){if(!t||typeof t!="object"||!("type"in t))return null;if(t.type==="Identifier"&&"name"in t&&typeof t.name=="string")return t.name;if(t.type==="MemberExpression"||t.type==="OptionalMemberExpression"){t=t.object;continue}return null}}import{randomBytes as KE}from"node:crypto";import zo from"node:path";import{parse as Ca}from"@babel/parser";import JE from"@babel/traverse";import*as Vf from"@babel/types";import{COMPONENT_I18N_FILE_SUFFIX as Ia,PageResourceArtifactSchema as XE,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as zE,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as WE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as HE,parseComponentI18nResourcesJson as GE}from"@vcp-dev/contracts";var va="{{$INSTANCE}}",YE=/\{\{\$PAGE_ROUTE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,ZE=/\{\{\$PAGE_TITLE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,ka="components/site/generated",QE=/\.(?:tsx?|json)$/,qE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,eI=["react","react/","next","next/","lucide-react","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],tI=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),Ea=JE,nI=typeof Ea=="function"?Ea:Ea.default;async function Ra(e){let t=XE.safeParse(e.artifact);if(!t.success)return ie("Page resource artifact failed contract validation.");let n=t.data,r=e.randomHex??(()=>KE(4).toString("hex")),o=Math.max(1,Math.min(e.maxAttempts??5,5)),i=pI(r());if(!i)return ie("Random instance suffix must be 8 lowercase hex chars.");let s=`${mI(n.resource_id)}-${i}`,a=new Map,c=new Map,l=[];for(let w of n.pages){let B=w.final_route.slice(1);a.set(w.template_page_id,w.final_route),c.set(w.template_page_id,w.title),l.push({template_page_id:w.template_page_id,title:w.title,final_route:w.final_route,route_file_path:`app/${B}/page.tsx`})}let u=[],d=new Set,p=new Set,m=new Map,g=new Map,S=[],C=new Set(n.pages.flatMap(w=>w.components.map(B=>B.component_id)));for(let w of n.components){if(!C.has(w.component_id))continue;let B=Df({materialization:w.materialization,packageInstanceId:s,routeByPage:a,titleByPage:c});if(!B.ok)return B;for(let re of B.files){let ee=Bf(re,d,u);if(ee)return ee}p.add(B.entry),g.set(B.entry,B.entryExport),m.set(w.component_id,B.entry)}for(let[w,B]of n.pages.entries()){let re=l[w],ee=Df({materialization:B.materialization,packageInstanceId:s,routeByPage:a,titleByPage:c,pageEntryTarget:re.route_file_path,pageTitle:re.title});if(!ee.ok)return ee;for(let F of ee.files){let L=Bf(F,d,u);if(L)return L}p.add(ee.entry),g.set(ee.entry,ee.entryExport),S.push({entry:ee.entry,declaredComponentIds:new Set(B.components.map(F=>F.component_id))});let N=u.find(F=>F.file===re.route_file_path);if(!N)return ie("Page materialization entry did not resolve to its final route file.",re.route_file_path);if(aI(N.content,re.route_file_path)!==re.final_route)return ie(`Page ${B.template_page_id} requires a static PAGE_SEO.path equal to ${re.final_route}.`,re.route_file_path)}let v=oI(u,p,s,m,S,g);if(!v.ok)return v;for(let w of u)if(await e.exists(w.file))return!w.file.startsWith("app/")&&o>1?Ra({...e,randomHex:r,maxAttempts:o-1}):{ok:!1,code:"MATERIALIZATION_CONFLICT",message:`Page resource create-only target already exists: ${w.file}`,path:w.file};let P=iI(u);return P||(u.sort((w,B)=>w.file.localeCompare(B.file)),{ok:!0,packageInstanceId:s,pages:l,files:u})}function Df(e){let t=e.materialization.entry.pathTemplate,n=[];for(let o of e.materialization.files){let i=o.pathTemplate===t,s=i&&e.pageEntryTarget?e.pageEntryTarget:Lf(o.pathTemplate,e.packageInstanceId);if(!s)return ie("Materialization path cannot be mapped into the package namespace.",o.pathTemplate);let a=rI(o.content,e.packageInstanceId,e.routeByPage,e.titleByPage);if(!a.ok)return a;let c=i&&e.pageTitle!==void 0?cI(a.data,e.pageTitle,s):a;if(!c.ok)return c;n.push({operation:"create-only",file:s,content:c.data})}let r=e.pageEntryTarget??Lf(t,e.packageInstanceId);return!r||!n.some(o=>o.file===r)?ie("Materialization entry must match one controlled source file.",t):{ok:!0,files:n,entry:r,entryExport:e.materialization.entry.export}}function rI(e,t,n,r){let o,i=e.replace(YE,(c,l)=>{let u=n.get(l);return u||(o=l,c)});if(o)return ie(`Page route placeholder references unknown template page: ${o}`);let s=i.replace(ZE,(c,l)=>{let u=r.get(l);return u?JSON.stringify(u):(o=l,c)});if(o)return ie(`Page title placeholder references unknown template page: ${o}`);let a=s.replaceAll(va,t);return a.includes("{{$PAGE_ROUTE:")||a.includes("{{$PAGE_TITLE:")||a.includes("{{$INSTANCE}}")?ie("Materialization contains an unresolved placeholder."):{ok:!0,data:a}}function Lf(e,t){let n=`${ka}/${t}`;if(e.split(va).length>2)return null;let o=e.replace(va,t),i=`${ka}/${t}/`,s=o.startsWith(i)?o:`${n}/${o}`,a=zo.posix.normalize(s);return a!==s||!a.startsWith(`${n}/`)||!QE.test(a)||qE.test(a)?null:a}function Bf(e,t,n){return t.has(e.file)?ie(`Page resource materializations resolve duplicate target: ${e.file}`,e.file):(t.add(e.file),n.push(e),null)}function oI(e,t,n,r,o,i){let s=new Set(e.map(m=>m.file)),a=`${ka}/${n}`,c=new Map(e.map(m=>[m.file,new Set])),l=new Map;for(let m of e){if(m.file.endsWith(".json")){try{JSON.parse(m.content)}catch{return ie("Materialization JSON file must contain valid JSON.",m.file)}if(m.file.endsWith(Ia)&&!GE(m.content).success)return ie("Materialization component i18n resources are invalid.",m.file);continue}try{let S=Ca(m.content,{sourceType:"module",plugins:["jsx","typescript"]});l.set(m.file,S);for(let v of S.program.body)if((v.type==="ImportDeclaration"||v.type==="ExportAllDeclaration"||v.type==="ExportNamedDeclaration"&&v.source)&&v.source){let P=v.source.value,w=dI(m.file,P,s,a);if(!w.allowed)return ie(`Materialization import is outside the controlled package: ${P}`,m.file);w.internalPath&&c.get(m.file).add(w.internalPath)}let C;if(nI(S,{Identifier(v){v.isReferencedIdentifier()&&tI.has(v.node.name)&&(C??=v.node.name,v.stop())},JSXAttribute(v){v.node.name.type==="JSXIdentifier"&&v.node.name.name==="style"&&(C??="inline style",v.stop())},JSXOpeningElement(v){v.node.name.type==="JSXIdentifier"&&v.node.name.name.toLowerCase()==="style"&&(C??="style element",v.stop())}}),C)return ie(`Materialization source uses forbidden capability: ${C}`,m.file)}catch{return ie("Materialization source must parse as TS/TSX.",m.file)}let g=Sr(m.content,{colorMixPolicy:"always",includeExtendedColorFunctions:!0,includeRgbBackgroundImage:!0,rejectAnyRawColorLiteral:!0,rejectPrivateTokens:!0,rejectTailwindPalette:!0});if(g.hardCodedSurfaceHits.length>0||g.rawColorHits.length>0||g.privateTokenHits.length>0)return ie("Materialization source violates the public theme token policy.",m.file)}if([...t].some(m=>!s.has(m)))return ie("Materialization entry is outside the controlled package.");for(let m of t)if(m.endsWith(".json"))return ie("Materialization JSON files cannot be package entries.");for(let[m,g]of i){let S=l.get(m);if(!S||!sI(S,g))return ie("Materialization entry does not declare its contracted export.",m)}let u=new Map([...r].map(([m,g])=>[g,m]));for(let m of o){let g=$f(m.entry,c);for(let S of m.declaredComponentIds){let C=r.get(S);if(!C||!g.has(C))return ie(`Page entry does not reach declared component: ${S}`,m.entry)}for(let S of g){let C=u.get(S);if(C&&!m.declaredComponentIds.has(C))return ie(`Page entry imports undeclared component: ${C}`,m.entry)}}let d=new Set;for(let m of t)for(let g of $f(m,c))d.add(g);if(d.size!==e.length)return ie("Every materialization file must be reachable from a package entry.");let p=fI(e,l,c);return p||{ok:!0}}function iI(e){if(e.length>zE)return ie("Page resource exceeds the aggregate source file limit.");let t=0;for(let n of e){let r=Buffer.byteLength(n.content,"utf8");if(r>WE)return ie("Page resource file exceeds the content byte limit.",n.file);t+=r}return t>HE?ie("Page resource exceeds the aggregate content byte limit."):null}function sI(e,t){for(let n of e.program.body){if(t.kind==="default"){if(n.type==="ExportDefaultDeclaration")return!0;continue}if(n.type==="ExportNamedDeclaration"&&(n.declaration?.type==="VariableDeclaration"&&n.declaration.declarations.some(r=>r.id.type==="Identifier"&&r.id.name===t.name)||(n.declaration?.type==="FunctionDeclaration"||n.declaration?.type==="ClassDeclaration")&&n.declaration.id?.name===t.name||n.specifiers.some(r=>r.exported.type==="Identifier"&&r.exported.name===t.name)))return!0}return!1}function aI(e,t){let n;try{n=Ca(e,{sourceType:"module",sourceFilename:t,plugins:["jsx","typescript"]})}catch{return null}for(let r of n.program.body){let o=r.type==="VariableDeclaration"?r:r.type==="ExportNamedDeclaration"&&r.declaration?.type==="VariableDeclaration"?r.declaration:null;if(o)for(let i of o.declarations){if(i.id.type!=="Identifier"||i.id.name!=="PAGE_SEO")continue;let s=Wo(i.init);if(s?.type!=="ObjectExpression")return null;for(let a of s.properties){if(a.type!=="ObjectProperty"||a.computed||!lI(a.key))continue;let c=Wo(a.value);return c?.type==="StringLiteral"?c.value:c?.type==="TemplateLiteral"&&c.expressions.length===0?c.quasis[0]?.value.cooked??null:null}return null}}return null}function cI(e,t,n){let r;try{r=Ca(e,{sourceType:"module",sourceFilename:n,plugins:["jsx","typescript"]})}catch{return ie("Page materialization PAGE_SEO must parse as TS/TSX.",n)}for(let o of r.program.body){let i=o.type==="VariableDeclaration"?o:o.type==="ExportNamedDeclaration"&&o.declaration?.type==="VariableDeclaration"?o.declaration:null;if(i)for(let s of i.declarations){if(s.id.type!=="Identifier"||s.id.name!=="PAGE_SEO")continue;let a=Wo(s.init);if(a?.type!=="ObjectExpression")return ie("Page materialization PAGE_SEO must be a static object.",n);let c=a.properties.find(u=>u.type==="ObjectProperty"&&!u.computed&&uI(u.key));if(!c||c.type!=="ObjectProperty")return ie("Page materialization PAGE_SEO must declare a static title.",n);let l=Wo(c.value);return!l||l.type!=="StringLiteral"&&l.type!=="TemplateLiteral"||l.type==="TemplateLiteral"&&l.expressions.length>0||typeof l.start!="number"||typeof l.end!="number"?ie("Page materialization PAGE_SEO.title must be a static string.",n):{ok:!0,data:e.slice(0,l.start)+JSON.stringify(t)+e.slice(l.end)}}}return ie("Page materialization must declare a top-level PAGE_SEO object.",n)}function Wo(e){let t=e;for(;t?.type==="TSAsExpression"||t?.type==="TSSatisfiesExpression"||t?.type==="TSNonNullExpression";)t=t.expression;return t&&Vf.isExpression(t)?t:null}function lI(e){return e.type==="Identifier"&&e.name==="path"||e.type==="StringLiteral"&&e.value==="path"}function uI(e){return e.type==="Identifier"&&e.name==="title"||e.type==="StringLiteral"&&e.value==="title"}function dI(e,t,n,r){if(t.startsWith(`@/${r}/`)){let s=t.slice(2),a=jf(s,n);return a?{allowed:!0,internalPath:a}:{allowed:!1}}if(!t.startsWith("."))return{allowed:eI.some(s=>s.endsWith("/")?t.startsWith(s):t===s)};if(t.includes("\\")||t.includes("\0"))return{allowed:!1};let o=zo.posix.normalize(zo.posix.join(zo.posix.dirname(e),t)),i=jf(o,n);return i&&(i.startsWith(`${r}/`)||i.startsWith("app/"))?{allowed:!0,internalPath:i}:{allowed:!1}}function jf(e,t){return[e,`${e}.ts`,`${e}.tsx`,`${e}.json`,`${e}/index.ts`,`${e}/index.tsx`,`${e}/index.json`].find(n=>t.has(n))}function fI(e,t,n){let r=new Set(e.map(o=>o.file));for(let o of e){if(!o.file.endsWith(Ia))continue;let i=o.file.slice(0,-Ia.length),s=[`${i}.tsx`,`${i}.ts`].find(u=>r.has(u));if(!s)return ie("Component i18n resources require a same-name TS/TSX companion.",o.file);let c=t.get(s)?.program.directives.some(u=>u.value.value==="use client"),l=[...n].filter(([,u])=>u.has(o.file));if(!c||l.length!==1||l[0]?.[0]!==s)return ie("Component i18n resources must have exactly one same-name Client Component static importer.",s)}return null}function $f(e,t){let n=new Set,r=[e];for(;r.length>0;){let o=r.pop();if(!n.has(o)){n.add(o);for(let i of t.get(o)??[])r.push(i)}}return n}function pI(e){return/^[a-f0-9]{8}$/.test(e)?e:null}function mI(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"page-resource"}function ie(e,t){return{ok:!1,code:"MATERIALIZATION_REJECTED",message:e,...t?{path:t}:{}}}import{COMPONENT_I18N_FILE_SUFFIX as gI,parseComponentI18nResourcesJson as hI,resolveSiteTextDirection as yI,SiteLocaleSchema as xI}from"@vcp-dev/contracts";var SI=["i18next","react-i18next"],bI="components/ui/site-locale-provider.tsx",EI="components/ui/component-i18n-provider.tsx",Uf="app/layout.tsx";async function Na(e){let t=e.files.filter(p=>p.path.endsWith(gI));if(t.length===0)return{ok:!0};for(let p of["package.json",Uf,bI,EI])if(!await e.exists(p))return an(`Target snapshot is missing required i18n host file: ${p}`);let n;try{n=JSON.parse(await e.readFile("package.json"))}catch{return an("Target snapshot package.json is invalid.")}let r=Kf(n)&&Kf(n.dependencies)?n.dependencies:{},o=SI.filter(p=>typeof r[p]!="string"||r[p].trim().length===0);if(o.length>0)return an(`Target snapshot must already declare: ${o.join(", ")}.`);let i=await e.readFile(Uf),s=wa(i,"html","lang"),a=wa(i,"html","dir"),c=wa(i,"SiteLocaleProvider","locale"),l=xI.safeParse(s);if(!l.success||!a||!c||s!==c||a!==yI(l.data))return an("Target snapshot app/layout.tsx must keep html lang/dir and SiteLocaleProvider locale consistent.");if(!i.includes('from "@/components/ui/site-locale-provider"')||!/<SiteLocaleProvider\b/.test(i)||!/<\/SiteLocaleProvider>/.test(i))return an("Target snapshot root layout is not wired to SiteLocaleProvider.");let u=l.data,d=u.split("-")[0];for(let p of t){let m=hI(p.content);if(!m.success)return an(`Component i18n resource is invalid: ${p.path}.`);if(!Object.hasOwn(m.data,u)&&!Object.hasOwn(m.data,d))return an(`Component i18n resource ${p.path} has no locale for ${u} or ${d}.`)}return{ok:!0}}function wa(e,t,n){let r=e.match(new RegExp(`<${t}\\b[^>]*>`))?.[0];if(!r)return null;let o=[...r.matchAll(new RegExp(`\\b${n}=(?:"([^"]+)"|\\{"([^"]+)"\\})`,"g"))];return o.length!==1?null:o[0]?.[1]??o[0]?.[2]??null}function Kf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function an(e){return{ok:!1,message:e}}import{HOME_PAGE_URL_PATH as JI}from"@vcp-dev/contracts";import{parse as HP}from"@babel/parser";import{parse as gP}from"@babel/parser";import{FormBlockIdSchema as yP,FormSpecV1Schema as xP}from"@vcp-dev/contracts";var br="components/site/generated/forms",SP=`${br}/vcp-form-runtime.tsx`,Ho="[A-Za-z0-9][A-Za-z0-9_-]{0,127}",bP=new RegExp(`^${br}/form-(${Ho})\\.spec\\.ts$`),EP=new RegExp(`^${br}/form-(${Ho})\\.tsx$`),IP=new RegExp(`^@/${br}/form-(${Ho})$`),vP=new RegExp(`(?:^|/)${br}/form-(${Ho})(?:\\.tsx?)?$`);var kP=Symbol("invalid-literal");import{createHash as wP}from"node:crypto";import{posix as PP}from"node:path";import{parse as TP}from"@babel/parser";import{FormSpecV1Schema as FP}from"@vcp-dev/contracts";var MP=Symbol("dynamic");import{parse as II}from"@babel/parser";function Go(e){return Array.isArray(e)?e.filter(t=>!!t&&typeof t=="object"&&typeof t.type=="string"):[]}var vI=/^(?:src\/)?app\/(.*)page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function kI(e){let t=vI.exec(e);if(!t)return null;let r=(t[1]??"").split("/").filter(o=>o.length>0&&!/^\(.+\)$/.test(o));return r.length===0?"/":`/${r.join("/")}`}function CI(e){let t=e;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function Jf(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function RI(e){let t=e;for(;t&&(t.type==="TSAsExpression"||t.type==="TSSatisfiesExpression"||t.type==="ParenthesizedExpression");)t=t.expression??null;return t}function Pa(e){let t=e;if(t?.type==="StringLiteral"||t?.type==="NumericLiteral"||t?.type==="BooleanLiteral")return t.value;if(t?.type==="NullLiteral")return null;if(t?.type==="ArrayExpression")return(t.elements??[]).map(Pa);if(t?.type==="ObjectExpression"){let n={};for(let r of Go(t.properties)){if(r.type!=="ObjectProperty"||r.computed)throw new Error("dynamic object property");let o=Jf(r.key);if(!o)throw new Error("unsupported object key");n[o]=Pa(r.value)}return n}throw new Error(`unsupported static value: ${t?.type??"unknown"}`)}function Aa(e,t){let n=[],r=kI(t);if(r===null)return{found:!1,seo:null,diagnostics:n};let o;try{o=II(e,{sourceType:"module",plugins:["typescript","jsx"]})}catch(l){return n.push({code:"page-seo.parse-failed",message:l instanceof Error?l.message:String(l)}),{found:!1,seo:null,diagnostics:n}}let i;for(let l of Go(o.program.body)){let u=l.type==="ExportNamedDeclaration"?l.declaration:l;if(u?.type==="VariableDeclaration")for(let d of Go(u.declarations)){let p=d.id;p?.type==="Identifier"&&p.name==="PAGE_SEO"&&(i=d.init)}}if(i==null)return{found:!1,seo:null,diagnostics:n};let s=RI(i);if(!s)return{found:!1,seo:null,diagnostics:n};if(s.type!=="ObjectExpression")return n.push({code:"page-seo.dynamic-declaration",message:"PAGE_SEO is not a static object literal"}),{found:!1,seo:null,diagnostics:n};let a={};for(let l of Go(s.properties)){if(l.type!=="ObjectProperty"||l.computed)continue;let u=Jf(l.key);if(!(u!=="path"&&u!=="title"&&u!=="description"&&u!=="keywords"&&u!=="meta_tags_json"&&u!=="schema_json"&&u!=="breadcrumbs_json")){if(u==="path"||u==="title"||u==="description"||u==="keywords"){let d=CI(l.value);if(d===void 0){n.push({code:"page-seo.dynamic-field",message:`PAGE_SEO.${u} is not a static string; skipped`});continue}a[u]=d;continue}try{let d=Pa(l.value);u==="meta_tags_json"&&d!==null&&typeof d=="object"&&!Array.isArray(d)?a.meta_tags_json=d:u==="schema_json"&&d!==null&&typeof d=="object"?a.schema_json=d:u==="breadcrumbs_json"&&Array.isArray(d)?a.breadcrumbs_json=d:n.push({code:"page-seo.dynamic-field",message:`PAGE_SEO.${u} has unsupported static shape; skipped`})}catch(d){n.push({code:"page-seo.dynamic-field",message:`PAGE_SEO.${u} is not a static JSON-like value; skipped: ${d instanceof Error?d.message:String(d)}`})}}}let c=r;return a.path!==void 0&&(a.path!==r&&n.push({code:"page-seo.path-mismatch",message:`PAGE_SEO.path "${a.path}" != derived "${r}"; using PAGE_SEO.path`}),c=a.path),{found:!0,seo:{path:c,...a.title!==void 0?{title:a.title}:{},...a.description!==void 0?{description:a.description}:{},...a.keywords!==void 0?{keywords:a.keywords}:{},...a.meta_tags_json!==void 0?{meta_tags_json:a.meta_tags_json}:{},...a.schema_json!==void 0?{schema_json:a.schema_json}:{},...a.breadcrumbs_json!==void 0?{breadcrumbs_json:a.breadcrumbs_json}:{}},diagnostics:n}}import{parse as wI}from"@babel/parser";var Xf=["page","anchor","external","email","phone","group","file"],NI=["link","cta"],Wf=["description","badge","iconKey"],Ta=["label","targetType","href","role","openInNewTab","nofollow","children",...Wf],PI=new Set(Ta);function Ir(e){return Array.isArray(e)?e:[]}function Er(e){let t=e;return t?.type==="StringLiteral"&&typeof t.value=="string"?t.value:void 0}function AI(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function zf(e){let t=e;return t?.type==="BooleanLiteral"&&typeof t.value=="boolean"?t.value:void 0}function _a(e){let t=[],n;try{n=wI(e,{sourceType:"module",plugins:["typescript","jsx"]})}catch(i){return{items:[],diagnostics:[{severity:"fatal",path:"NAV_ITEMS",message:`parse failed: ${String(i)}`}]}}let r;for(let i of Ir(n.program.body)){let s=i.type==="ExportNamedDeclaration"?i.declaration:i;if(s?.type==="VariableDeclaration")for(let a of Ir(s.declarations)){let c=a.id;c?.type==="Identifier"&&c.name==="NAV_ITEMS"&&(r=a.init)}}for(;r&&(r.type==="TSAsExpression"||r.type==="TSSatisfiesExpression"||r.type==="TSInstantiationExpression");)r=r.expression;if(!r||r.type!=="ArrayExpression")return{items:[],diagnostics:[{severity:"fatal",path:"NAV_ITEMS",message:"missing top-level NAV_ITEMS array literal"}]};let o=[];return Ir(r.elements).forEach((i,s)=>{let a=Hf(i,`NAV_ITEMS[${s}]`,t);a&&o.push(a)}),{items:o,diagnostics:t}}function Hf(e,t,n){if(e?.type!=="ObjectExpression")return n.push({severity:"fatal",path:t,message:"nav item must be an object literal"}),null;let r={};for(let l of Ir(e.properties)){if(l.type!=="ObjectProperty"||l.computed)continue;let u=AI(l.key);u&&(r[u]=l.value)}let o=Er(r.label),i=Er(r.targetType);if(!o)return n.push({severity:"fatal",path:`${t}.label`,message:"label must be a static string"}),null;if(!i||!Xf.includes(i))return n.push({severity:"fatal",path:`${t}.targetType`,message:`targetType must be one of ${Xf.join("/")}`}),null;r.group!==void 0&&n.push({severity:"warning",code:"leaf-group-field",path:`${t}.group`,message:'unsupported leaf group field ignored; use a canonical targetType: "group" node with children'});let s={label:o,targetType:i};for(let l of Wf){if(r[l]===void 0)continue;let u=Er(r[l]);u!==void 0?s[l]=u:n.push({severity:"warning",path:`${t}.${l}`,message:`${l} ignored: not a static string`})}r.icon!==void 0&&n.push({severity:"warning",path:`${t}.icon`,message:"icon component ref ignored; use static iconKey"});for(let l of Object.keys(r))PI.has(l)||l==="group"||l==="icon"||n.push({severity:"warning",code:"unknown-field",path:`${t}.${l}`,message:`unsupported field \`${l}\` ignored; NAV_ITEMS only carries ${Ta.join("/")}`});if(r.children!==void 0){if(r.children.type!=="ArrayExpression")return n.push({severity:"fatal",path:`${t}.children`,message:"children must be a static array"}),null;let l=[];Ir(r.children.elements).forEach((u,d)=>{let p=Hf(u,`${t}.children[${d}]`,n);p&&l.push(p)}),s.children=l}if(i==="group")return s.children?s:(n.push({severity:"fatal",path:`${t}.children`,message:"group item requires children"}),null);let a=Er(r.href);if(!a)return n.push({severity:"fatal",path:`${t}.href`,message:"href must be a static string for non-group item"}),null;s.href=a;let c=Er(r.role);if(c!==void 0&&(NI.includes(c)?s.role=c:n.push({severity:"warning",path:`${t}.role`,message:"role ignored: not link/cta"})),r.openInNewTab!==void 0){let l=zf(r.openInNewTab);l!==void 0?s.openInNewTab=l:n.push({severity:"warning",path:`${t}.openInNewTab`,message:"openInNewTab ignored: not a static boolean"})}if(r.nofollow!==void 0){let l=zf(r.nofollow);l!==void 0?s.nofollow=l:n.push({severity:"warning",path:`${t}.nofollow`,message:"nofollow ignored: not a static boolean"})}return s}import{parse as TI}from"@babel/parser";function vr(e){return Array.isArray(e)?e:[]}function Gf(e){let t=e;for(;t?.type==="TSAsExpression"||t?.type==="TSSatisfiesExpression";)t=t.expression;return t?.type==="ArrayExpression"?t:void 0}function Fa(e,t){let n=Yf(t);if(!n)return{status:"unsupported",source:e};let r;try{r=TI(e,{sourceType:"module",plugins:["typescript","jsx"],tokens:!0})}catch{return{status:"unsupported",source:e}}let o=[];for(let u of vr(r.program.body)){let d=u.type==="ExportNamedDeclaration"?u.declaration:u;if(d?.type==="VariableDeclaration")for(let p of vr(d.declarations)){let m=p.id;m?.type==="Identifier"&&m.name==="NAV_ITEMS"&&o.push(p)}}if(o.length===0)return{status:"navigation_not_found",source:e};if(o.length!==1)return{status:"unsupported",source:e};let i=Gf(o[0]?.init);if(!i)return{status:"unsupported",source:e};if(_a(e).diagnostics.some(({severity:u})=>u==="fatal"))return{status:"unsupported",source:e};let a=[],c=u=>{let d=vr(u.elements);for(let[p,m]of d.entries()){if(FI(m,n)){let S=d[p+1],C=d[p-1],v=m.start,P=m.end;if(typeof v!="number"||typeof P!="number")continue;S&&typeof S.start=="number"?a.push({start:v,end:S.start}):C&&typeof C.end=="number"?a.push({start:C.end,end:P}):a.push({start:v,end:P});continue}let g=_I(m);g&&c(g)}};if(c(i),a.length===0)return{status:"not_found",source:e};let l=e;for(let u of a.sort((d,p)=>p.start-d.start))l=l.slice(0,u.start)+l.slice(u.end);return{status:"removed",source:l,removedCount:a.length}}function _I(e){if(e.type==="ObjectExpression")for(let t of vr(e.properties)){if(t.type!=="ObjectProperty")continue;let n=t.key;if((n?.name??n?.value)==="children")return Gf(t.value)}}function Yf(e){let t=e.trim();return t.startsWith("/")?t==="/"?t:t.replace(/\/+$/,""):null}function FI(e,t){if(e.type!=="ObjectExpression")return!1;let n,r;for(let o of vr(e.properties)){if(o.type!=="ObjectProperty")continue;let i=o.key,s=o.value,a=i?.name??i?.value;s?.type==="StringLiteral"&&(a==="href"&&(n=String(s.value)),a==="targetType"&&(r=String(s.value)))}return r==="page"&&Yf(n??"")===t}import rA from"node:fs";import iA from"node:path";var MI=/^page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function kr(e){let t=e.map(r=>KI(r.path)),n=OI(t);return n?t.filter(r=>LI(n,r)).map(r=>({routeId:BI(n,r),entryFile:r})).sort((r,o)=>r.routeId.localeCompare(o.routeId)):[]}function Yo(e,t=""){let r=((e??"/").trim()||"/").split(/[?#]/,1)[0]||"/",o=r.startsWith("/")?r:`/${r}`,i=UI(t),s=i&&(o===i||o.startsWith(`${i}/`))?o.slice(i.length)||"/":o,a=s.startsWith("/")?s:`/${s}`;return a==="/"?"/":a.replace(/\/+$/,"")}function OI(e){return e.some(r=>r.startsWith("app/")&&!DI(r))?"app":e.some(r=>r.startsWith("src/app/"))?"src/app":null}function DI(e){return e.startsWith("app/_vcp/")||e.startsWith("src/app/_vcp/")}function LI(e,t){if(!t.startsWith(`${e}/`))return!1;let n=t.slice(t.lastIndexOf("/")+1);return MI.test(n)?t.slice(e.length+1,-n.length-1).split("/").filter(Boolean).every(r=>!r.startsWith("_")):!1}function BI(e,t){let n=t.slice(e.length+1).split("/").slice(0,-1).map($I).filter(r=>!!r);return n.length===0?"/":`/${n.join("/")}`}function jI(e){return e.startsWith("(")&&e.endsWith(")")}function $I(e){return!e||e.startsWith("@")||e.startsWith("_")||jI(e)?null:VI(e)}function VI(e){return e.replace(/^\((?:\.|\.\.|\.\.\.)\)/,"")}function UI(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function KI(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}var XI="components/site/generated/",Cr=[".tsx",".ts",".jsx",".js"];function Zf(e){if(e.expectedUrlPath===JI)return{ok:!1,code:"HOME_PAGE_LOCKED",message:"The homepage source is protected from deletion."};let t=new Set(kr(Object.keys(e.files).map(p=>({path:p}))).map(p=>p.entryFile)),n=Object.entries(e.files).filter(([p,m])=>{let g=p.replace(/\\/g,"/");if(!t.has(g))return!1;let S=Aa(m,g);return S.found&&S.seo?.path===e.expectedUrlPath});if(n.length===0)return{ok:!1,code:"ROUTE_NOT_FOUND",message:"No route uniquely matches the requested page identity."};if(n.length>1)return{ok:!1,code:"ROUTE_AMBIGUOUS",message:"Multiple routes match the requested page identity."};let[r]=n[0],o=zI(e.files);if(!o.ok)return o.error;let i=o.graph,s=YI(r,i),a=ZI(r,s,i),c=[...s].filter(p=>!a.has(p)).sort((p,m)=>p.localeCompare(m)),l=[{operation:"delete",file:r},...[...a].sort((p,m)=>p.localeCompare(m)).map(p=>({operation:"delete",file:p}))],u=[],d=[];for(let[p,m]of Object.entries(e.files))if(p!==r){if(m.includes("NAV_ITEMS")){let g=Fa(m,e.expectedUrlPath);g.status==="removed"?(l.push({operation:"upsert",file:p,content:g.source}),u.push(p)):g.status==="unsupported"&&d.push(`unsupported_navigation:${p}`)}m.includes(e.expectedUrlPath)&&!m.includes("NAV_ITEMS")&&d.push(`preserved_link:${p}`)}return{ok:!0,edits:l,deletedFiles:[r,...[...a].sort((p,m)=>p.localeCompare(m))],updatedFiles:u,preservedSharedFiles:c,warnings:d}}function zI(e){let t=new Set(Object.keys(e)),n=new Map;for(let[r,o]of Object.entries(e)){let i=r.replace(/\\/g,"/");if(i==="next-env.d.ts"||i.endsWith("/next-env.d.ts")||!WI(r))continue;let s=Xn(r,o);if(!s.ok)return{ok:!1,error:{ok:!1,code:"SOURCE_DEPENDENCY_UNSAFE",message:`Page source dependencies could not be proven safe: ${r} (parse-failed).`}};let a=new Set;for(let{specifier:c}of s.module.imports){if(HI(c))continue;let l=_i(r,c),u=GI(l,t);if(!u)return{ok:!1,error:{ok:!1,code:"SOURCE_DEPENDENCY_UNSAFE",message:`Page source dependencies could not be proven safe: ${r} -> ${c} (import-not-found).`}};a.add(u)}n.set(r,a)}return{ok:!0,graph:n}}function WI(e){let t=e.toLowerCase();return Cr.some(n=>t.endsWith(n))}function HI(e){return!!(/\.([a-z0-9]+)$/i.exec(e)&&!Cr.some(n=>e.endsWith(n)))}function GI(e,t){let n=e.replace(/\\/g,"/");return(Cr.some(o=>n.endsWith(o))?[n]:[...Cr.map(o=>`${n}${o}`),...Cr.map(o=>`${n}/index${o}`)]).find(o=>t.has(o))??null}function YI(e,t){let n=new Set,r=[...t.get(e)??[]];for(;r.length>0;){let o=r.pop();!o.startsWith(XI)||n.has(o)||(n.add(o),r.push(...t.get(o)??[]))}return n}function ZI(e,t,n){let r=new Set(t),o=!0;for(;o;){o=!1;for(let i of[...r])[...n].some(([a,c])=>a!==e&&!r.has(a)&&c.has(i))&&(r.delete(i),o=!0)}return r}import{SiteEditHistoryProvenanceSchema as QI}from"@vcp-dev/contracts";var qI={affectedCompositions:[]};function rp(e){let t=null,n=new WeakMap;async function r(){return t??=ev(e),t}return{async prepareAppend(o){let i=await e.readIndex(),s=await e.stageAppend(tp(o),{durableManifest:!1}),a;try{a=await e.previewStagedAppend(s.entryId,i.digest)}catch(l){throw await e.discardStage(s.stageId),l}let c={kind:"append",entry:o,historyTransition:a};return n.set(c,{expectedDigest:i.digest,stageId:s.stageId,entryId:s.entryId}),c},async prepareUndo(){let i=(await r()).undo.at(-1);if(!i?.historyId)return null;let s=await e.readIndex(),a=s.entryIds.indexOf(i.historyId);if(a<0)throw new Error("undo entry is missing from index");let c=a-1,l=await e.previewCursor(c,s.digest),u={kind:"undo",entry:i,historyTransition:l};return n.set(u,{expectedDigest:s.digest,cursor:c}),u},async prepareRedo(){let i=(await r()).redo.at(-1);if(!i?.historyId)return null;let s=await e.readIndex(),a=s.entryIds.indexOf(i.historyId);if(a<0)throw new Error("redo entry is missing from index");let c=a,l=await e.previewCursor(c,s.digest),u={kind:"redo",entry:i,historyTransition:l};return n.set(u,{expectedDigest:s.digest,cursor:c}),u},async publishPrepared(o){let i=n.get(o);if(!i)throw new Error("history mutation was not prepared");let s=await r();if(o.kind==="append"){if(!i.entryId)throw new Error("staged entry id is missing");let a=await e.publishStagedAppend(i.entryId,i.expectedDigest,i.stageId);Qf(a,o.historyTransition),o.entry.historyId=i.entryId,s.entryIds=[...a.entryIds],s.cursor=a.cursor,s.undo.push(o.entry),s.redo.length=0}else{if(i.cursor===void 0)throw new Error("prepared cursor is missing");let a=await e.setCursor(i.cursor,i.expectedDigest);if(Qf(a,o.historyTransition),o.kind==="undo"){if(s.undo.at(-1)!==o.entry)throw new Error("undo state changed before publish");s.undo.pop(),s.redo.push(o.entry)}else{if(s.redo.at(-1)!==o.entry)throw new Error("redo state changed before publish");s.redo.pop(),s.undo.push(o.entry)}s.cursor=i.cursor}n.delete(o)},async discardPrepared(o){let i=n.get(o);if(!i)return;let s=o.historyTransition;if(s){let a=await e.readIndex();if(a.digest===s.publishedIndexDigest&&a.cursor===s.publishedCursor&&a.currentId===s.publishedCurrentId)throw new Error("cannot discard a history mutation whose index was published")}i.stageId&&await e.discardStage(i.stageId),n.delete(o)},async peekUndo(){return(await r()).undo.at(-1)??null},async pushUndo(o){let i=await r(),s=o;if(s.historyId){let l=i.entryIds.indexOf(s.historyId);if(l>=0)try{await e.setCursor(l),i.undo.push(o),i.cursor=l;return}catch(u){throw i.redo.push(o),u}}let a=await e.append(tp(o)),c=a.currentId;if(!c)throw new Error("history store did not publish an entry");o.historyId=c,i.entryIds=[...a.entryIds],i.cursor=a.cursor,i.undo.push(o),i.redo.length=0},async popUndo(){return(await r()).undo.pop()??null},async peekRedo(){return(await r()).redo.at(-1)??null},async pushRedo(o){let i=await r(),s=o;if(!s.historyId)throw i.undo.push(o),new Error("cannot move an unpersisted history entry to redo");let a=i.entryIds.indexOf(s.historyId);if(a<0)throw i.undo.push(o),new Error("history entry is missing from the durable index");try{await e.setCursor(a-1),i.cursor=a-1,i.redo.push(o)}catch(c){throw i.undo.push(o),c}},async popRedo(){return(await r()).redo.pop()??null},async clearRedo(){(await r()).redo.length=0},async getStatus(){let o=await e.readStatus();return{canUndo:o.canUndo,canRedo:o.canRedo,undoDepth:o.undoDepth,redoDepth:o.redoDepth,recoveryRequired:o.recoveryRequired}},async markRecoveryRequired(o){await e.markRecoveryRequired(o)}}}function Qf(e,t){if(!t)throw new Error("durable history transition is missing");if(e.digest!==t.publishedIndexDigest||e.cursor!==t.publishedCursor||e.currentId!==t.publishedCurrentId)throw new Error("durable history published an unexpected index state")}async function ev(e){let t=await e.readIndex(),n=await Promise.all(t.undoIds.map(async o=>qf(e,o))),r=await Promise.all(t.redoIds.map(async o=>qf(e,o)));return{undo:n.reverse(),redo:r.reverse(),entryIds:[...t.entryIds],cursor:t.cursor}}async function qf(e,t){let n=await e.readEntry(t),r=tv(n),o=r.provenance??qI;return{historyId:t,...o.initiatingComposition?{composition:o.initiatingComposition}:{},operationId:r.operationId,kind:r.kind,target:r.target,provenance:o,...r.selectionRef?{selectionRef:r.selectionRef}:{},...r.output?{output:r.output}:{},preSnapshots:await ep(e,n,r.preSnapshots),postSnapshots:await ep(e,n,r.postSnapshots)}}async function ep(e,t,n){let r=new Map(t.blobs.map(o=>[o.name,o.digest]));return Promise.all(n.map(async o=>{let i=o.exists&&o.blobName?Buffer.from(await e.readBlob(ov(r,o.blobName))).toString("utf8"):"";return{file:o.file,content:i,version:o.version,exists:o.exists,...o.sha256?{sha256:o.sha256}:{}}}))}function tp(e){let t=[],n=(i,s)=>i.map((a,c)=>{let l={file:a.file,exists:a.exists!==!1,version:a.version,...a.sha256?{sha256:a.sha256}:{}};if(l.exists){let u=`${s}-${c}`;l.blobName=u,t.push({name:u,data:a.content})}return l}),r=nv(e),o={operationId:e.operationId,kind:e.kind,target:e.target,...r?{provenance:r}:{},...e.selectionRef?{selectionRef:e.selectionRef}:{},...e.output?{output:e.output}:{},preSnapshots:n(e.preSnapshots,"pre"),postSnapshots:n(e.postSnapshots,"post")};return{kind:"site-edit-operation",manifest:JSON.parse(JSON.stringify(o)),blobs:t}}function tv(e){if(!ip(e.manifest))throw new Error("durable history manifest is not an object");let t=e.manifest,n=new Set(["operationId","kind","target","selectionRef","output","provenance","preSnapshots","postSnapshots"]);if(Object.keys(t).some(r=>!n.has(r)))throw new Error("durable history manifest contains unknown fields");if(typeof t.operationId!="string"||t.operationId.length===0||typeof t.kind!="string"||t.kind.length===0||!Array.isArray(t.preSnapshots)||!Array.isArray(t.postSnapshots))throw new Error("durable history manifest has an invalid shape");return{operationId:t.operationId,kind:t.kind,target:t.target,...t.selectionRef!==void 0?{selectionRef:t.selectionRef}:{},...t.output!==void 0?{output:t.output}:{},...t.provenance!==void 0?{provenance:op(t.provenance)}:{},preSnapshots:np(t.preSnapshots,"preSnapshots"),postSnapshots:np(t.postSnapshots,"postSnapshots")}}function nv(e){if(e.provenance!==void 0)return op(e.provenance);if(e.composition)return{initiatingComposition:e.composition,affectedCompositions:[]}}function op(e){let t=QI.safeParse(e);if(!t.success)throw new Error("durable history provenance is invalid");return{...t.data.initiatingComposition?{initiatingComposition:t.data.initiatingComposition}:{},affectedCompositions:t.data.affectedCompositions.map(n=>({routeId:n.routeId,...n.effectiveTemplateId?{effectiveTemplateId:n.effectiveTemplateId}:{}}))}}function np(e,t){return e.map((n,r)=>{if(!ip(n))throw new Error(`durable history ${t}[${r}] is invalid`);if(typeof n.file!="string"||n.file.length===0||!Number.isInteger(n.version)||n.exists!==void 0&&typeof n.exists!="boolean"||n.sha256!==void 0&&!rv(n.sha256)||n.blobName!==void 0&&typeof n.blobName!="string")throw new Error(`durable history ${t}[${r}] is invalid`);return{file:n.file,exists:n.exists!==!1,version:n.version,...n.sha256?{sha256:n.sha256}:{},...n.blobName?{blobName:n.blobName}:{}}})}function rv(e){return/^sha256:[0-9a-f]{64}$/.test(e)}function ov(e,t){let n=e.get(t);if(!n)throw new Error(`durable history blob is missing: ${t}`);return n}function ip(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import sp from"node:path";function Oa(){let e=Promise.resolve();return{async runExclusive(t){let n,r=new Promise(i=>{n=i}),o=e;e=o.then(()=>r,()=>r),await o;try{return await t()}finally{n()}}}}async function cp(e,t,n){let r=[],o=new Set;for(let i of e.intents){let s=cv(i.path);if(!s.ok)return s;let a=s.path;if(o.has(a))return{ok:!1,code:"duplicate-target",path:a,reason:`Duplicate file target: ${a}`};if(o.add(a),i.kind==="create-only"){let c=t.has(a),l=n?await n(a):!1;if(c||l)return{ok:!1,code:"create-only-exists",path:a,reason:`Create-only file already exists: ${a}`}}r.push({...i,path:a})}return{ok:!0,plan:{operationId:e.operationId,intents:r}}}async function Zo(e){let t=()=>iv(e);return e.mutex?e.mutex.runExclusive(t):t()}async function iv(e){let t=await cp(e.plan,e.overlay,e.exists);if(!t.ok)return{ok:!1,stage:"precheck",reason:t.reason,error:t,recoveryRequired:!1};let n=sv(e.overlay,t.plan),r;try{r=await e.buildCandidate({overlay:n,plan:t.plan})}catch(l){return{ok:!1,stage:"build",reason:"Candidate build failed.",error:l,recoveryRequired:!1}}let o,i;try{o=await e.prepareHistory?.({candidate:r,plan:t.plan}),await e.reverify?.({candidate:r,plan:t.plan,history:o}),i=await e.writeCandidate({candidate:r,plan:t.plan}),await e.markCandidateWritten?.({candidate:r,plan:t.plan,history:o,receipt:i})}catch(l){return Ma({candidate:r,plan:t.plan,failedStage:"commit",error:l,history:o,receipt:i,rollbackCandidate:e.rollbackCandidate})}let s=r;try{let l=await e.validateCandidate({candidate:r,plan:t.plan,receipt:i});l!==void 0&&(s=l)}catch(l){return Ma({candidate:r,plan:t.plan,failedStage:"validate",error:l,history:o,receipt:i,rollbackCandidate:e.rollbackCandidate})}let a;try{a=await e.publishCandidate({candidate:s,plan:t.plan,history:o,receipt:i})}catch(l){return Ma({candidate:s,plan:t.plan,failedStage:"publish",error:l,history:o,receipt:i,rollbackCandidate:e.rollbackCandidate})}let c={candidate:s,plan:t.plan,history:o,receipt:i,published:a};try{await e.swapCandidate?.(c)}catch(l){return ap("swap",l,"Live state swap failed after durable publish.")}try{await e.finalizeCandidate?.(c)}catch(l){return ap("finalize",l,"Transaction finalization failed after live state swap.")}try{e.emitCommitted?.({candidate:s,plan:t.plan,published:a})}catch{}return{ok:!0,stage:"publish",published:a,plan:t.plan}}function sv(e,t){let n=new Map(e);for(let r of t.intents)r.kind==="delete"?n.delete(r.path):n.set(r.path,r.content);return n}function Ma(e){return e.rollbackCandidate({candidate:e.candidate,plan:e.plan,failedStage:e.failedStage,error:e.error,...e.history===void 0?{}:{history:e.history},...e.receipt===void 0?{}:{receipt:e.receipt}}).then(()=>({ok:!1,stage:e.failedStage,reason:av(e.failedStage),error:e.error,recoveryRequired:!1})).catch(t=>({ok:!1,stage:"rollback",reason:"Rollback failed after candidate commit/validation/publish failure.",error:t,recoveryRequired:!0,cause:e.error}))}function ap(e,t,n){return{ok:!1,stage:e,reason:n,error:t,recoveryRequired:!0}}function av(e){switch(e){case"commit":return"Candidate write or commit verification failed.";case"validate":return"Candidate validation failed.";case"publish":return"Candidate publish failed."}}function cv(e){if(e.length===0)return{ok:!1,code:"unsafe-path",path:e,reason:"File path must not be empty."};if(e.includes("\0")||e.includes("\\"))return{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`};if(/^[a-zA-Z]:/.test(e)||sp.isAbsolute(e))return{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`};let t=sp.posix.normalize(e);return t==="."||t===".."||t.startsWith("../")||t.includes("/../")?{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`}:t.startsWith("./")||t.includes("/./")?{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`}:{ok:!0,path:t}}function Da(e,t){let n=new Map(e);for(let r of t)n.delete(r);return n}function Bn(e,t){e.clear();for(let[n,r]of t)e.set(n,r)}function lp(e,t){for(let n of t){if(n.exists===!1){e.delete(n.file);continue}e.set(n.file,n.content)}}function La(e,t,n,r){if(!e.has(t)&&e.size>=r){let o=e.keys().next().value;o&&e.delete(o)}e.set(t,n)}function up(e){return{path:e.path,code:e.code,message:e.message,...e.details?{details:JSON.parse(JSON.stringify(e.details))}:{}}}function lv(e){return e.map(t=>`${t.code} (${t.path}): ${t.message}`).join("; ")}var Rr=class extends Error{constructor(t){let n=t.map(up);super(lv(n)),this.name="RouteBuildDiagnosticsError",this.diagnostics=n}};function dp(e,t){let n=t instanceof Error&&t.message?t.message:String(t);return t instanceof Rr?{routeId:e,message:n,diagnostics:t.diagnostics.map(up)}:{routeId:e,message:n}}function Ba(e){return e.map(({routeId:t,message:n})=>`${t}: ${n}`).join("; ")}function fp(e){let{journal:t,index:n,observedFileDigests:r}=e;if(r.length!==t.files.length)return"ambiguous";let o=t.files.every((l,u)=>l.preDigest===r[u]),i=t.files.every((l,u)=>l.postDigest===r[u]),s=t.historyTransition,a=n.digest===s.expectedIndexDigest,c=n.digest===s.publishedIndexDigest&&n.cursor===s.publishedCursor&&n.currentId===s.publishedCurrentId;return o&&a?"safely-uncommitted":i&&c?"durably-committed":"ambiguous"}import{computeSiteEditCompositionKey as Qo,SiteEditCompositionContextSchema as uv,SiteEditCompositionSelectorSchema as dv}from"@vcp-dev/contracts";var Pe=class extends Error{constructor(t,n,r){super(n),this.code=t,this.details=r,this.name="SiteEditCompositionError"}};function pp(e,t){throw new Pe("INVALID_COMPOSITION",e,{value:t})}function qo(e){let t=uv.safeParse(e);return t.success?t.data:pp("Invalid SiteEditCompositionContext.",e)}function mp(e){let t=[],n=new Map,r=new Map;for(let l of e.compositions){let u=qo(l?.context);if(typeof l.entryFile!="string"||!l.entryFile)throw new Pe("INVALID_COMPOSITION","A registered composition must have a non-empty entryFile.");let d=Qo(u);if(n.has(d))throw new Pe("DUPLICATE_COMPOSITION",`Composition key ${d} is registered more than once.`,{key:d,context:u});let p=r.get(l.entryFile);if(p)throw new Pe("DUPLICATE_COMPOSITION",`Entry file ${l.entryFile} is registered more than once.`,{entryFile:l.entryFile,context:p});let m={context:u,entryFile:l.entryFile,key:d};t.push(m),n.set(d,m),r.set(l.entryFile,d)}if(t.length===0)throw new Pe("INVALID_COMPOSITION","At least one composition must be registered.");let o=new Map;for(let l of e.initialDocumentVersions??[]){let u=qo(l?.composition);if(!Number.isInteger(l?.version)||(l?.version??-1)<0)throw new Pe("INVALID_INITIAL_DOCUMENT_VERSION","Initial document version must be a non-negative integer.",{context:u,version:l?.version});let d=Qo(u);if(!n.has(d))throw new Pe("UNKNOWN_COMPOSITION","Initial document version references an unregistered composition.",{context:u,key:d});if(o.has(d))throw new Pe("DUPLICATE_COMPOSITION","Initial document versions must contain each composition at most once.",{context:u,key:d});o.set(d,l.version)}function i(l){let u=dv.safeParse(l);if(!u.success)return pp("Invalid SiteEditCompositionSelector.",l);let d=t.filter(({context:p})=>p.routeId===u.data.routeId&&(u.data.templateId===void 0?p.effectiveTemplateId===void 0:p.effectiveTemplateId===u.data.templateId));if(d.length===1)return d[0];throw d.length>1?new Pe("AMBIGUOUS_COMPOSITION","The composition selector matches multiple registered contexts.",{selector:u.data}):new Pe("UNKNOWN_COMPOSITION","The composition selector is not registered.",{selector:u.data})}function s(l){let u=qo(l),d=Qo(u),p=n.get(d);if(!p)throw new Pe("UNKNOWN_COMPOSITION","The composition context is not registered.",{context:u,key:d});return p}function a(l){let u=qo(l?.context);if(typeof l.entryFile!="string"||!l.entryFile)throw new Pe("INVALID_COMPOSITION","A registered composition must have a non-empty entryFile.");let d=Qo(u),p=n.get(d);if(p){if(p.entryFile===l.entryFile)return p;throw new Pe("DUPLICATE_COMPOSITION",`Composition key ${d} is registered more than once.`,{key:d,context:u})}let m=[...n.values()].find(S=>S.entryFile===l.entryFile);if(m)throw new Pe("DUPLICATE_COMPOSITION",`Entry file ${l.entryFile} is registered more than once.`,{entryFile:l.entryFile,context:m.context});let g={context:u,entryFile:l.entryFile,key:d};return t.push(g),n.set(d,g),g}function c(l){let u=n.get(l);if(!u)return;n.delete(l);let d=t.findIndex(p=>p.key===l);return d>=0&&t.splice(d,1),o.delete(l),u}return{entries:t,byKey:n,initialVersions:o,register:a,unregister:c,resolveSelector:i,resolveContext:s,getByKey:l=>n.get(l),routeIds:()=>[...new Set(t.map(({context:l})=>l.routeId))]}}var Sv=/^(?:src\/)?app\/.*\/?page\.[cm]?[jt]sx?$/,bv=["layout.tsx","layout.ts","layout.jsx","layout.js","layout.mjs","layout.cjs"],gp=32,hp=256;function Ev(e){return{expectedIndexDigest:e.digest,publishedIndexDigest:e.digest,publishedCursor:e.cursor,publishedCurrentId:e.currentId}}var yp={maxEntries:50,maxBytes:8*1024*1024};function Iv(){let e=new Map;return{async readFile(t){return(await import("node:fs/promises")).readFile(t,"utf-8")},async readFileBytes(t){return(await import("node:fs/promises")).readFile(t)},async getFileInfo(t){let n=await import("node:fs/promises");try{let r=await n.lstat(t);return!r.isFile()||r.isSymbolicLink()?null:{path:t,sizeBytes:r.size}}catch{return null}},async writeFile(t,n){await Uo(t,n)},async deleteFile(t){await(await import("node:fs/promises")).rm(t,{force:!0})},async exists(t){let n=await import("node:fs/promises");try{return await n.access(t),!0}catch{return!1}},getVersion(t){return e.get(t)??1},bumpVersion(t){let n=(e.get(t)??1)+1;return e.set(t,n),n}}}function vv(){let e=[],t=[];return{prepareAppend(r){return{kind:"append",entry:r}},prepareUndo(){let r=e.at(-1);return r?{kind:"undo",entry:r}:null},prepareRedo(){let r=t.at(-1);return r?{kind:"redo",entry:r}:null},publishPrepared(r){if(r.kind==="append"){e.push(r.entry),n(),t.length=0;return}if(r.kind==="undo"){if(e.at(-1)!==r.entry)throw new Error("undo history changed before publish");e.pop(),t.push(r.entry);return}if(t.at(-1)!==r.entry)throw new Error("redo history changed before publish");t.pop(),e.push(r.entry),n()},peekUndo(){return e.at(-1)??null},pushUndo(r){e.push(r),n(),t.length=0},popUndo(){return e.pop()??null},peekRedo(){return t.at(-1)??null},pushRedo(r){t.push(r)},popRedo(){return t.pop()??null},clearRedo(){t.length=0},getStatus(){return{canUndo:e.length>0,canRedo:t.length>0,undoDepth:e.length,redoDepth:t.length,recoveryRequired:!1}}};function n(){for(;e.length>yp.maxEntries||kv(e)>yp.maxBytes;)e.shift()}}function kv(e){return e.reduce((t,n)=>t+Cv(n),0)}function Cv(e){return xp(e.preSnapshots)+xp(e.postSnapshots)+Rv(e.provenance)}function Rv(e){return e?new TextEncoder().encode(JSON.stringify(e)).byteLength:0}function xp(e){return e.reduce((t,n)=>t+n.file.length+n.content.length,0)}function Sp(e,t){return{key:fv(e),composition:e,routeId:e.routeId,entryFile:t,graph:null,topology:null,capabilities:null,document:null,pageComposition:null,pageCompositionProjection:null,documentIndex:null,pagePlacementByKey:null,pagePlacementUnitByKey:null,pageUnitByKey:null,pagePlacementsByUnitKey:null,dependencyFiles:new Set([t]),detailProjections:null,fileVersions:new Map,styleContext:null}}function wv(e){let t=new Map,n=new Map,r=new Map;for(let o of e.entries){t.set(o.key,o);let i=$e(o.key)??o.key;if(i===o.key)continue;let s=n.get(i)??0;r.set(o.key,s),n.set(i,s+1)}return{entriesByKey:t,repeatOccurrenceIndexByKey:r}}var ni=class extends Error{constructor(t){super(t.reason),this.result=t}},cn=class extends Error{constructor(t){super(Ba(t)),this.failedRoutes=t}};function bp(e,t){if(!e)return;let n=[...t];if(n.some(o=>o?.entries.some(i=>i.key===e.key)))return e;let r=$e(e.key)??e.key;for(let o of n){let i=o?.entries.find(s=>($e(s.key)??s.key)===r);if(i)return{...e,key:i.key}}return e}var Nv=/\.(?:[cm]?[jt]sx?)$/i,Pv=/\.json$/i,Av=/\.(?:css|scss|sass)$/i,Tv=/\.mdx$/i,_v=/\.ya?ml$/i;function Fv(e){if(!e||e.kind!=="value-binding")return null;let t="path"in e?e.path:void 0,n=e.root,r=n&&(n.kind==="binding"||n.kind==="named-export")?n.name:void 0;return{kind:e.sourceKind,file:e.file,expression:e.displayExpression,bindingName:r,path:t?.map(o=>o.kind==="property"?o.name:o.index)}}function Mv(e){return{kind:e.isProxy?"component-proxy":"jsx-node",file:e.file,componentName:e.componentName,isProxy:e.isProxy}}function Ov(e,t){let n=new Map;for(let r of t)n.set(r.path,r.operation==="delete"?{exists:!1}:{exists:!0,content:r.content});return{async readFile(r){let o=n.get(r);if(o){if(!o.exists)throw new Error(`Source file not found: ${r}`);return o.content}return e.readFile(r)},async writeFile(){throw new Error("Source edit preflight overlay is read-only.")},async deleteFile(){throw new Error("Source edit preflight overlay is read-only.")},async exists(r){let o=n.get(r);return o?o.exists:e.exists(r)},async getFileInfo(r){let o=n.get(r);return o?o.exists?{path:r,sizeBytes:Buffer.byteLength(o.content,"utf8")}:null:e.getFileInfo?.(r)??null},async listFiles(r={}){if(!e.listFiles)throw new Error("Source file listing is unavailable.");let o=Rp(await e.listFiles(r)),i=new Map(o.files.map(a=>[a.path,a]));for(let[a,c]of n)if(Dv(a,r.roots??[])){if(!c.exists){i.delete(a);continue}i.set(a,{path:a,sizeBytes:Buffer.byteLength(c.content,"utf8")})}let s=[...i.values()].sort((a,c)=>a.path.localeCompare(c.path));return o.truncated?{files:s,truncated:o.truncated}:s},getVersion(r){return e.getVersion(r)},bumpVersion(r){return e.getVersion(r)}}}function Dv(e,t){return t.length===0?!0:t.some(n=>e===n||e.startsWith(`${n}/`))}function Rp(e){return Array.isArray(e)?{files:e}:e}function Lv(e){if(!gv(e.path))return{ok:!1,errorCode:"invalid-params",message:`Source file is read-only: ${e.path}`,details:{path:e.path}};if(e.operation==="upsert"&&e.content.includes("\0"))return{ok:!1,errorCode:"invalid-params",message:`Source file content must be valid text: ${e.path}`,details:{path:e.path}};if(e.operation==="delete"){if(e.capability!==yv||e.confirmDelete!==!0||e.confirmPath!==e.path)return{ok:!1,errorCode:"capability-denied",message:`Source file delete requires explicit confirmation: ${e.path}`,details:{path:e.path}};let t=mv(e.path);return t?{ok:!1,errorCode:"capability-denied",message:`Protected source file cannot be deleted: ${e.path}`,details:{path:e.path,protectionReason:t}}:{ok:!0}}if(Nv.test(e.path)){let t=at({source:e.content,profile:Xt({filePath:e.path,source:e.content})});if(!t.ok)return{ok:!1,errorCode:"ast-error",message:t.diagnostic.message,details:{path:e.path}}}if(Pv.test(e.path))try{JSON.parse(e.content)}catch(t){return{ok:!1,errorCode:"ast-error",message:`JSON parse failed: ${Fe(t)}`,details:{path:e.path}}}if(Av.test(e.path)){let t=Ep({content:e.content,path:e.path,profile:"css"});if(!t.ok)return t}if(Tv.test(e.path)){let t=Ep({content:e.content,path:e.path,profile:"mdx"});if(!t.ok)return t}if(_v.test(e.path))try{xv(e.content)}catch(t){return{ok:!1,errorCode:"ast-error",message:`YAML parse failed: ${Fe(t)}`,details:{path:e.path}}}return{ok:!0}}function Ep({content:e,path:t,profile:n}){let r=[],o=null,i=!1,s=!1,a=!1,c=!1,l=!0;for(let d=0;d<e.length;d+=1){let p=e[d]??"",m=e[d+1]??"";if(n==="mdx"&&l&&e.startsWith("```",d)){c=!c;let g=e.indexOf(`
1
+ import{SiteEditOperationRequestSchema as cR,SiteEditPatchPlanSchema as lR}from"@vcp-dev/contracts";function nn(e){return{requestId:e.requestId,kind:e.kind,composition:e.composition,target:e.target,resultVersion:e.resultVersion,affectedFiles:e.affectedFiles,...e.output?{output:e.output}:{},...e.selectionRef?{selectionRef:e.selectionRef}:{}}}function io(e,t){let n=t[0]??"Site edit operation request failed contract validation.";return{ok:!1,composition:{routeId:e.composition.routeId,...e.composition.templateId!==void 0?{effectiveTemplateId:e.composition.templateId}:{}},error:{code:"INVALID_PARAMS",message:n},data:{requestId:e.id,kind:e.kind,composition:{routeId:e.composition.routeId,...e.composition.templateId!==void 0?{effectiveTemplateId:e.composition.templateId}:{}},target:e.target,resultVersion:e.documentVersion}}}function so(e,t){if(!e.pageComposition)throw new Error("RenderDocument is missing the required Page Composition projection.");return{siteId:t.siteId,snapshotId:t.snapshotId,composition:e.composition,version:e.version,entries:e.entries.map(n=>({key:n.key,...n.pageCompositionUnitKey?{pageCompositionUnitKey:n.pageCompositionUnitKey}:{},operationSummary:{canUpdateText:n.operationSummary.canUpdateText,canInsertChild:n.operationSummary.canInsertChild,canMove:n.operationSummary.canMove,canRemove:n.operationSummary.canRemove},...n.dynamicDataSummary?{dynamicDataSummary:n.dynamicDataSummary}:{}})),pageComposition:e.pageComposition.status==="unsupported"?{status:"unsupported",reason:e.pageComposition.reason,diagnostics:e.pageComposition.diagnostics}:{status:"supported",containerKey:e.pageComposition.container.key,hasBusinessMembers:e.pageComposition.businessMembers.length>0,placementUnitKeys:e.pageComposition.placementUnits.map(n=>n.key),placements:e.pageComposition.placements.map(n=>({placementKey:n.placementKey,placementUnitKey:n.placementUnitKey,relation:n.relation}))}}}function ao(e){return{composition:e.composition,key:e.key,tag:e.tag,label:e.label,sourceLocator:e.sourceLocator,isOpaque:e.isOpaque,ancestors:e.ancestors,componentName:e.componentName,sourceFile:e.sourceFile,capabilities:Eg(e.capabilities),provenanceChain:e.provenanceChain?{editMode:e.provenanceChain.editMode,diagnostics:e.provenanceChain.diagnostics}:void 0,dynamicData:e.dynamicData,...e.properties?{properties:e.properties}:{},textSegments:e.textSegments.map(t=>({index:t.index,editable:t.editable,sourceKind:t.source?.kind??null})),boundaryKind:e.boundaryKind}}function co(e,t){let n=new Date().toISOString();return e.type==="document-changed"?{type:"site-edit.document.changed",siteId:t.siteId,snapshotId:t.snapshotId,composition:e.composition,version:e.version,at:n}:e.type==="operation-completed"?{type:"site-edit.operation.completed",siteId:t.siteId,composition:e.composition,result:nn(e.result),at:n}:e.type==="operation-failed"?{type:"site-edit.operation.failed",siteId:t.siteId,requestId:e.requestId,composition:e.composition,error:e.error,at:n}:e.type==="capability-changed"?{type:"site-edit.capability.changed",siteId:t.siteId,composition:e.composition,keys:e.keys,at:n}:e.type==="graph-invalidated"?{type:"site-edit.graph.invalidated",siteId:t.siteId,composition:e.composition,at:n}:e.type==="graph-ready"?{type:"site-edit.graph.ready",siteId:t.siteId,composition:e.composition,version:e.version,at:n}:e.type==="graph-error"?{type:"site-edit.graph.error",siteId:t.siteId,composition:e.composition,message:e.message,at:n}:null}function Eg(e){return{composition:e.composition,key:e.key,canUpdateText:e.canUpdateText,canInsertChild:e.canInsertChild,canMove:e.canMove,canRemove:e.canRemove,editModes:e.editModes?{updateText:e.editModes.updateText?{mode:e.editModes.updateText.mode,reasonCode:e.editModes.updateText.reasonCode}:void 0,insertChild:e.editModes.insertChild?{mode:e.editModes.insertChild.mode,reasonCode:e.editModes.insertChild.reasonCode}:void 0,move:e.editModes.move?{mode:e.editModes.move.mode,reasonCode:e.editModes.move.reasonCode}:void 0,remove:e.editModes.remove?{mode:e.editModes.remove.mode,reasonCode:e.editModes.remove.reasonCode}:void 0}:void 0,constraints:e.constraints}}import{computeSiteEditCompositionKey as Wk,composeSiteEditRepeatInstanceKey as Hk,getSiteEditSourceDeleteProtectionReason as Gk,isSiteEditTextSourcePath as Yk,parseSiteEditRepeatInstanceKey as Zk,SITE_EDIT_SOURCE_DELETE_CAPABILITY as qk,stripSiteEditRepeatInstanceKeys as Ve}from"@vcp-dev/contracts";import{parse as Qk}from"yaml";import Si from"node:path";function er(e,t,n){return`${e}::${t}::${n}`}var L={NODE_NOT_FOUND:"NODE_NOT_FOUND",HOME_PAGE_LOCKED:"HOME_PAGE_LOCKED",ROUTE_NOT_FOUND:"ROUTE_NOT_FOUND",CAPABILITY_REJECTED:"CAPABILITY_REJECTED",CONSTRAINT_VIOLATED:"CONSTRAINT_VIOLATED",INVALID_PARAMS:"INVALID_PARAMS",PLAN_FAILED:"PLAN_FAILED",TRANSACTION_PREFLIGHT_FAILED:"TRANSACTION_PREFLIGHT_FAILED",ROUTE_REBUILD_FAILED:"ROUTE_REBUILD_FAILED",HISTORY_COMMIT_FAILED:"HISTORY_COMMIT_FAILED",MATERIALIZATION_CONFLICT:"MATERIALIZATION_CONFLICT",MATERIALIZATION_REJECTED:"MATERIALIZATION_REJECTED",MUTATION_ASSERTION_REQUIRED:"MUTATION_ASSERTION_REQUIRED",MUTATION_ASSERTION_INVALID:"MUTATION_ASSERTION_INVALID",VERSION_STALE:"VERSION_STALE",AST_PARSE_ERROR:"AST_PARSE_ERROR",UNSUPPORTED_OPERATION:"UNSUPPORTED_OPERATION",LOCATOR_FAILED:"LOCATOR_FAILED",INVALID_TARGET:"INVALID_TARGET",WRITE_IO_ERROR:"WRITE_IO_ERROR",CONCURRENT_MODIFIED:"CONCURRENT_MODIFIED",ROLLBACK_FAILED:"ROLLBACK_FAILED",RECOVERY_REQUIRED:"RECOVERY_REQUIRED",RECOVERY_PERSIST_FAILED:"RECOVERY_PERSIST_FAILED",MUTATION_SESSION_REQUIRED:"MUTATION_SESSION_REQUIRED",LEASE_ASSERTION_INVALID:"LEASE_ASSERTION_INVALID",LEASE_ASSERTION_EXPIRED:"LEASE_ASSERTION_EXPIRED",LEASE_ASSERTION_SCOPE_MISMATCH:"LEASE_ASSERTION_SCOPE_MISMATCH",CROSS_PAGE_MOVE_UNSUPPORTED:"CROSS_PAGE_MOVE_UNSUPPORTED",INTERNAL_ERROR:"INTERNAL_ERROR"};import Qi from"@babel/traverse";import*as x from"@babel/types";import*as Z from"@babel/types";function mt(e,t={}){if(Z.isTSAsExpression(e)||Z.isTSSatisfiesExpression(e)||Z.isTSNonNullExpression(e)||Z.isTypeCastExpression(e)||Z.isParenthesizedExpression(e))return mt(e.expression,t);if(Z.isStringLiteral(e))return{status:"resolved",value:e.value};if(Z.isNumericLiteral(e))return Number.isFinite(e.value)?{status:"resolved",value:e.value}:{status:"unresolved"};if(Z.isBooleanLiteral(e))return{status:"resolved",value:e.value};if(Z.isNullLiteral(e))return{status:"resolved",value:null};if(Z.isTemplateLiteral(e))return e.expressions.length===0&&e.quasis.length===1?{status:"resolved",value:e.quasis[0].value.cooked??e.quasis[0].value.raw}:{status:"unresolved"};if(Z.isIdentifier(e))return e.name==="undefined"&&!t.resolveIdentifier?{status:"undefined"}:t.resolveIdentifier?.(e.name)??{status:"unresolved"};if(Z.isUnaryExpression(e)&&e.operator==="void"&&Z.isNumericLiteral(e.argument)&&e.argument.value===0)return{status:"undefined"};if(Z.isArrayExpression(e)){let n=[];for(let r of e.elements){if(!r||Z.isSpreadElement(r))return{status:"unresolved"};let o=mt(r,t);if(o.status!=="resolved")return{status:"unresolved"};n.push(o.value)}return{status:"resolved",value:n}}if(Z.isObjectExpression(e)){let n=Object.create(null);for(let r of e.properties){if(!Z.isObjectProperty(r)||r.computed||!Z.isExpression(r.value))return{status:"unresolved"};let o=vg(r.key);if(o===null)return{status:"unresolved"};let i=mt(r.value,t);if(i.status!=="resolved")return{status:"unresolved"};Object.defineProperty(n,o,{configurable:!0,enumerable:!0,value:i.value,writable:!0})}return{status:"resolved",value:n}}return Z.isMemberExpression(e)||Z.isOptionalMemberExpression(e)?t.resolveMember?.(e)??{status:"unresolved"}:{status:"unresolved"}}function vg(e){return Z.isIdentifier(e)?e.name:Z.isStringLiteral(e)?e.value:Z.isNumericLiteral(e)?String(e.value):null}import{createHash as Pg}from"node:crypto";import*as dl from"@babel/parser";function rn(e,t,n,r){return{code:e,message:t,locatorKind:n,details:r}}function B(e,t,n,r,o){return{ok:!1,source:e,diagnostic:rn(t,n,r,o)}}function Wi(e,t,n,r,o){return{ok:!1,source:e,diagnostic:rn(t,n,r,o)}}var Ig={"tsx-module":["jsx","typescript"],"ts-module":["typescript"],"next-app-entry":["jsx","typescript"]};function gt(e){let{source:t,profile:n}=e;try{return{ok:!0,ast:dl.parse(t,{sourceType:"module",plugins:Ig[n]})}}catch(r){return{ok:!1,source:t,diagnostic:rn("parse-failed",`AST parse failed: ${r instanceof Error?r.message:String(r)}`)}}}function Hi(e,t){return gt({source:e,profile:fl(t.kind)})}function Gi(e,t){return gt({source:e,profile:fl(t)})}function fl(e){return"next-app-entry"}function on(e){let{filePath:t,source:n}=e,r=t.toLowerCase().split(".").pop()??"";return r==="tsx"?"tsx-module":r==="ts"?"ts-module":r==="jsx"||r==="js"||r===""&&/<\w[\s\S]*>/.test(n)?"tsx-module":"next-app-entry"}import*as kg from"@babel/parser";import*as wn from"@babel/types";import*as Mt from"node:path";var Yi=[".tsx",".ts",".jsx",".js"],Cg=Yi.map(e=>`/index${e}`),Rg=new Set(["json","css","scss","sass","less","svg","png","jpg","jpeg","gif","webp","avif","ico","bmp","woff","woff2","ttf","otf","eot","mp4","webm","mp3","wav","ogg","pdf","txt","md","csv","xml","yaml","yml"]);function pl(e){let t=e.replace(/[?#].*$/,""),n=/\.([a-z0-9]+)$/i.exec(t);return n!==null&&Rg.has(n[1].toLowerCase())}function ml(e){let t=[];for(let n of e.program.body)wn.isImportDeclaration(n)&&typeof n.source.value=="string"&&ht(n.source.value)&&t.push(n.source.value),wn.isExportNamedDeclaration(n)&&n.source&&typeof n.source.value=="string"&&ht(n.source.value)&&t.push(n.source.value),wn.isExportAllDeclaration(n)&&typeof n.source.value=="string"&&ht(n.source.value)&&t.push(n.source.value);return Zi(e.program,t),t}function Zi(e,t){if(!e||typeof e!="object")return;let n=e;if(n.type==="CallExpression"&&n.callee?.type==="Import"){let r=n.arguments?.[0];r?.type==="StringLiteral"&&typeof r.value=="string"&&ht(r.value)&&t.push(r.value)}for(let r of Object.values(n))if(Array.isArray(r))for(let o of r)Zi(o,t);else r&&typeof r=="object"&&Zi(r,t)}function ht(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("@/")}function tr(e,t){if(t.startsWith("@/"))return t.slice(2).replace(/\\/g,"/");let n=Mt.dirname(e);return Mt.join(n,t).replace(/\\/g,"/")}async function wg(e,t){if(Yi.some(n=>e.endsWith(n))&&await t(e))return e;for(let n of Yi){let r=`${e}${n}`;if(await t(r))return r}for(let n of Cg){let r=`${e}${n}`;if(await t(r))return r}return null}async function Nn(e,t,n){let r=await lo(e,t,n);return r.ok?r.path:null}async function lo(e,t,n){let r=tr(e,t);try{if(!Ng(e,t,r))return{ok:!1,diagnostic:{path:r,code:"import-not-found",message:`Local import not found: ${t}`,details:{fromFile:e,specifier:t}}};let o=await wg(r,n);return o?{ok:!0,path:o}:{ok:!1,diagnostic:{path:r,code:"import-not-found",message:`Local import not found: ${t}`,details:{fromFile:e,specifier:t}}}}catch(o){return{ok:!1,diagnostic:{path:r,code:"import-resolve-failed",message:`Failed to resolve local import: ${t}`,details:{fromFile:e,specifier:t,reason:o instanceof Error?o.message:String(o)}}}}}function Ng(e,t,n){if(!ht(t)||t.includes("\0")||t.includes("\\")||Mt.posix.isAbsolute(n))return!1;let r=Mt.posix.normalize(n);if(r===".."||r.startsWith("../"))return!1;if(t.startsWith("@/")){let o=t.slice(2);return o.length>0&&!o.split("/").some(i=>i==="..")}return!Mt.posix.isAbsolute(e)}var nr=(e,t)=>{let n=gt({source:t,profile:on({filePath:e,source:t})});return n.ok?{ok:!0,module:{file:e,source:t,sourceHash:`sha256:${Pg("sha256").update(t).digest("hex")}`,ast:n.ast,imports:ml(n.ast).map(r=>({specifier:r}))}}:{ok:!1,diagnostic:{path:e,code:"parse-failed",message:n.diagnostic.message}}};var uo="components/ui";function sn(e){if(!e)return!1;let t=qi(e);return t===uo||t.startsWith(`${uo}/`)||t.includes(`/${uo}/`)||t.endsWith(`/${uo}`)}function rr(e,t){return e?e.startsWith("@/")||e.startsWith("~/")?sn(e.slice(2)):e.startsWith("./")||e.startsWith("../")?sn(qi(`${Ag(t)}/${e}`)):sn(e):!1}function qi(e){let n=(e.split("?")[0]??e).replace(/\\/g,"/").replace(/^\.\//,""),r=[];for(let o of n.split("/"))if(!(!o||o===".")){if(o===".."){r.pop();continue}r.push(o)}return r.join("/")}function Ag(e){let t=qi(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}var Tg=typeof Qi=="function"?Qi:Qi.default;function Fe(e){return{startLine:e.loc?.start.line??0,startColumn:e.loc?.start.column??0,endLine:e.loc?.end.line??0,endColumn:e.loc?.end.column??0}}function _g(e){return/^[A-Z]/.test(e)}function os(e){let t=e.openingElement;return x.isJSXIdentifier(t.name)?t.name.name==="Fragment":x.isJSXMemberExpression(t.name)?t.name.property.name==="Fragment":!1}function An(e){return x.isJSXFragment(e)}function hl(e){return x.isJSXIdentifier(e.name)?e.name.name:x.isJSXMemberExpression(e.name)?yl(e.name):x.isJSXNamespacedName(e.name)?`${e.name.namespace.name}:${e.name.name.name}`:"unknown"}function yl(e){return x.isJSXIdentifier(e.object)?`${e.object.name}.${e.property.name}`:x.isJSXMemberExpression(e.object)?`${yl(e.object)}.${e.property.name}`:e.property.name}function Fg(e){return e.split(".")[0]??e}function Og(e){let t=e;for(;t;){let n=t.node;if(x.isFunctionDeclaration(n)&&n.id||x.isVariableDeclarator(n)&&x.isIdentifier(n.id))return n.id.name;if(x.isExportDefaultDeclaration(n)){let r=n.declaration;if(x.isFunctionDeclaration(r)&&r.id)return r.id.name;if(x.isFunctionDeclaration(r)&&!r.id)return"default"}t=t.parentPath}return null}function Mg(){let e=new Map;return{getOrdinal(t,n){let r=t??"__root__";e.has(r)||e.set(r,new Map);let o=e.get(r),i=o.get(n)??0;return o.set(n,i+1),i}}}function Dg(e){let t=new Map;for(let n of e.program.body){if(!x.isImportDeclaration(n))continue;let r=n.source.value;for(let o of n.specifiers)if(x.isImportDefaultSpecifier(o))t.set(o.local.name,{specifier:r,exportName:"default"});else if(x.isImportNamespaceSpecifier(o))t.set(o.local.name,{specifier:r,exportName:"*"});else if(x.isImportSpecifier(o)){let i=x.isIdentifier(o.imported)?o.imported.name:o.imported.value;t.set(o.local.name,{specifier:r,exportName:i})}}return t}function It(e,t=[]){if(x.isIdentifier(e))return t.push(e.name),t;if(x.isObjectPattern(e)){for(let n of e.properties)x.isObjectProperty(n)?It(n.value,t):x.isRestElement(n)&&It(n.argument,t);return t}if(x.isArrayPattern(e)){for(let n of e.elements)n&&(x.isRestElement(n)?It(n.argument,t):It(n,t));return t}return x.isAssignmentPattern(e)?(It(e.left,t),t):(x.isRestElement(e)&&It(e.argument,t),t)}function rt(e,t){return e.start==null||e.end==null?"":t.slice(e.start,e.end)}function or(e,t){for(let n=t.length-1;n>=0;n-=1){let r=t[n].get(e);if(r)return r.resolved?{kind:"resolved",value:r.value}:{kind:"unresolved"}}return{kind:"unresolved"}}function Lg(e,t,n){e.set(t,{resolved:!0,value:n})}function is(e,t){e.set(t,{resolved:!1})}function xl(e,t){let n=e;for(let r of t){if(r.kind==="property"){if(n==null||Array.isArray(n)||typeof n!="object"||!(r.name in n))return{kind:"known-empty"};n=n[r.name];continue}if(!Array.isArray(n)||r.index<0||r.index>=n.length)return{kind:"known-empty"};n=n[r.index]}return{kind:"resolved",value:n}}function Ne(e,t,n){if(x.isTSAsExpression(e)||x.isTSSatisfiesExpression(e)||x.isTSNonNullExpression(e)||x.isTypeCastExpression(e)||x.isParenthesizedExpression(e))return Ne(e.expression,t,n);if(x.isLogicalExpression(e))return fo([Ne(e.left,t,n),Ne(e.right,t,n)]);if(x.isBinaryExpression(e))return fo([x.isExpression(e.left)?Ne(e.left,t,n):null,x.isExpression(e.right)?Ne(e.right,t,n):null]);if(x.isConditionalExpression(e))return fo([Ne(e.consequent,t,n),Ne(e.alternate,t,n)]);if(x.isTemplateLiteral(e))return fo(e.expressions.filter(x.isExpression).map(i=>Ne(i,t,n)));if(x.isIdentifier(e))return{kind:"identifier",expression:e.name,base:e.name,path:[]};if(!x.isMemberExpression(e)&&!x.isOptionalMemberExpression(e))return null;let r=[],o=e;for(;x.isMemberExpression(o)||x.isOptionalMemberExpression(o);){if(o.computed)if(x.isNumericLiteral(o.property))r.unshift({kind:"index",index:o.property.value});else if(x.isStringLiteral(o.property))r.unshift({kind:"property",name:o.property.value});else if(n&&x.isExpression(o.property)){let i=Lt(o.property,n);if(typeof i=="string")r.unshift({kind:"property",name:i});else if(Number.isInteger(i))r.unshift({kind:"index",index:i});else return null}else return null;else{if(!x.isIdentifier(o.property))return null;r.unshift({kind:"property",name:o.property.name})}o=o.object}return x.isIdentifier(o)?{kind:r.some(i=>i.kind==="index")?"index-expression":"member-expression",expression:rt(e,t),base:o.name,path:r}:null}function fo(e){let t=e.filter(r=>r!==null);if(t.length===0)return null;let n=t[0];return t.some(r=>r.base!==n.base||JSON.stringify(r.path)!==JSON.stringify(n.path))?null:{...n}}function Lt(e,t){if(x.isStringLiteral(e)||x.isNumericLiteral(e)||x.isBooleanLiteral(e))return e.value;if(x.isNullLiteral(e))return null;if(x.isTemplateLiteral(e))return e.expressions.length===0&&e.quasis.length===1?e.quasis[0].value.cooked??e.quasis[0].value.raw:void 0;if(x.isIdentifier(e)){let n=or(e.name,t.valueScopes);return n.kind==="resolved"?n.value:void 0}if(x.isArrayExpression(e)){let n=[];for(let r of e.elements){if(!r||x.isSpreadElement(r))return;let o=Lt(r,t);if(o===void 0)return;n.push(o)}return n}if(x.isObjectExpression(e)){let n={};for(let r of e.properties){if(!x.isObjectProperty(r)||r.computed||!x.isExpression(r.value))return;let o=null;if(x.isIdentifier(r.key)?o=r.key.name:x.isStringLiteral(r.key)&&(o=r.key.value),!o)return;let i;if(r.shorthand){if(!x.isIdentifier(r.value))return;let s=or(r.value.name,t.valueScopes);if(s.kind!=="resolved")return;i=s.value}else i=Lt(r.value,t);if(i===void 0)return;n[o]=i}return n}if(x.isMemberExpression(e)){let n=Ne(e,"",t);if(!n)return;let r=or(n.base,t.valueScopes);if(r.kind!=="resolved")return;let o=xl(r.value,n.path);return o.kind==="resolved"?o.value:void 0}if(x.isCallExpression(e))return Sl(e,t)??void 0}function bl(e,t,n){let r=Ne(e,n,t);if(!r)return x.isMemberExpression(e)||x.isBinaryExpression(e)||x.isLogicalExpression(e)||x.isConditionalExpression(e)||x.isCallExpression(e)?{value:rt(e,n),source:null}:null;let o=or(r.base,t.valueScopes),i=r.kind==="identifier"?o:o.kind==="resolved"?xl(o.value,r.path):o;return i.kind==="resolved"&&(typeof i.value=="string"||typeof i.value=="number")?{value:String(i.value),source:r}:i.kind==="resolved"&&(typeof i.value=="boolean"||i.value===null)||i.kind==="known-empty"?null:{value:r.expression,source:r}}function es(e,t,n,r,o,i){return{file:e,componentName:t,elements:n,regions:r,ordinalTracker:Mg(),parentStack:[],valueScopes:i,importMap:o}}function ns(e,t,n){for(let r of e)for(let o of r.declarations){for(let s of It(o.id))is(n,s);if(!x.isIdentifier(o.id)||!o.init||!x.isExpression(o.init))continue;let i=Lt(o.init,t);i!==void 0&&Lg(n,o.id.name,i)}}function Bg(e){let t=[];for(let n of e){if(x.isVariableDeclaration(n)){t.push(n);continue}x.isExportNamedDeclaration(n)&&n.declaration&&x.isVariableDeclaration(n.declaration)&&t.push(n.declaration)}return t}function jg(e,t,n){let r=[],o=0;for(let i of e)if(x.isJSXText(i)){let s=i.value.trim();s&&r.push({index:o++,value:s,sourceRange:Fe(i),editable:!0,source:null})}else if(x.isJSXExpressionContainer(i)&&x.isStringLiteral(i.expression))r.push({index:o++,value:i.expression.value,sourceRange:Fe(i),editable:!0,source:null});else if(x.isJSXExpressionContainer(i)&&x.isTemplateLiteral(i.expression)){let s=i.expression;s.expressions.length===0&&s.quasis.length===1?r.push({index:o++,value:s.quasis[0].value.cooked??s.quasis[0].value.raw,sourceRange:Fe(i),editable:!0,source:null}):r.push({index:o++,value:rt(s,n),sourceRange:Fe(i),editable:!0,source:Ne(s,n,t)})}else if(x.isJSXExpressionContainer(i)&&x.isExpression(i.expression)){let s=bl(i.expression,t,n);s&&r.push({index:o++,value:s.value,sourceRange:Fe(i),editable:!0,source:s.source})}return r}function $g(e,t,n){let r=[];for(let[o,i]of e.attributes.entries()){if(!x.isJSXAttribute(i))continue;let s=Ug(i.name);if(!s)continue;let a=rt(i,n);if(x.isStringLiteral(i.value)){r.push({name:s,value:i.value.value,sourceRange:Fe(i),source:null,syntaxKind:"literal",raw:a,order:o,resolution:{status:"resolved",value:i.value.value}});continue}if(i.value===null){r.push({name:s,value:"true",sourceRange:Fe(i),source:null,syntaxKind:"boolean-shorthand",raw:a,order:o,resolution:{status:"resolved",value:!0},resolvedValue:!0});continue}if(x.isJSXExpressionContainer(i.value)&&x.isExpression(i.value.expression)){let c=Lt(i.value.expression,t);if(s==="className"){let m=typeof c=="string"?c:c===void 0?Sl(i.value.expression,t):null;if(m){r.push({name:s,value:m,sourceRange:Fe(i),source:null,resolvedValue:m,syntaxKind:"expression",raw:a,order:o,resolution:{status:"resolved",value:m}});continue}}let l=bl(i.value.expression,t,n);if(c!==void 0){r.push({name:s,value:Gg(c),sourceRange:Fe(i),source:Ne(i.value.expression,n,t),resolvedValue:c,syntaxKind:"expression",raw:a,order:o,resolution:{status:"resolved",value:c}});continue}let u=Kg(i.value.expression,t),d=Ne(i.value.expression,n,t),p=l?.value??rt(i.value.expression,n);r.push({name:s,value:u.status==="undefined"?"undefined":p,sourceRange:Fe(i),source:l?.source??d,syntaxKind:"expression",raw:a,order:o,resolution:u})}}return r}function Vg(e,t,n){return e.attributes.flatMap((r,o)=>!x.isJSXSpreadAttribute(r)||!x.isExpression(r.argument)?[]:[{raw:rt(r.argument,n),sourceRange:Fe(r),order:o,source:Ne(r.argument,n,t)}])}function Ug(e){return x.isJSXIdentifier(e)?e.name:x.isJSXNamespacedName(e)?`${e.namespace.name}:${e.name.name}`:null}function Kg(e,t){return mt(e,{resolveIdentifier(n){let r=or(n,t.valueScopes);return r.kind==="resolved"?{status:"resolved",value:r.value}:n==="undefined"&&!t.valueScopes.some(o=>o.has(n))?{status:"undefined"}:{status:"unresolved"}},resolveMember(n){let r=Lt(n,t);return r===void 0?{status:"unresolved"}:{status:"resolved",value:r}}})}function Sl(e,t){let n=Pn(e,t);return n&&n.map(o=>o.trim()).filter(Boolean).join(" ")||null}function Pn(e,t){if(x.isStringLiteral(e))return[e.value];if(x.isTemplateLiteral(e))return e.expressions.length>0?null:[e.quasis.map(n=>n.value.cooked??"").join("")];if(x.isNullLiteral(e))return[];if(x.isBooleanLiteral(e))return e.value?null:[];if(x.isIdentifier(e)||x.isMemberExpression(e)){if(x.isIdentifier(e)&&e.name==="undefined")return[];let n=Lt(e,t);return typeof n=="string"?[n]:null}if(x.isConditionalExpression(e)){let n=Pn(e.consequent,t),r=Pn(e.alternate,t);return!n||!r?null:[...n,...r]}if(x.isLogicalExpression(e)){if(e.operator!=="&&")return null;let n=Lt(e.left,t);return n===!1||n===null?[]:Pn(e.right,t)}if(x.isArrayExpression(e)){let n=[];for(let r of e.elements){if(!r||x.isSpreadElement(r))return null;let o=Pn(r,t);if(!o)return null;n.push(...o)}return n}if(x.isObjectExpression(e)){let n=[];for(let r of e.properties){if(!x.isObjectProperty(r))return null;let o=Xg(r.key);if(!o)return null;n.push(o)}return n}if(x.isCallExpression(e)){let n=Jg(e.callee);if(!n||!["cn","clsx","twMerge"].includes(n))return null;let r=[];for(let o of e.arguments){if(!x.isExpression(o))return null;let i=Pn(o,t);if(!i)return null;r.push(...i)}return r}return null}function Jg(e){return x.isIdentifier(e)?e.name:x.isMemberExpression(e)&&x.isIdentifier(e.property)?e.property.name:null}function Xg(e){return x.isIdentifier(e)?e.name:x.isStringLiteral(e)?e.value:null}function zg(e,t){let n=e.attributes.find(r=>x.isJSXAttribute(r)&&x.isJSXIdentifier(r.name)&&r.name.name===t);return!n||!x.isJSXAttribute(n)||!x.isJSXExpressionContainer(n.value)?null:n.value.expression}function Wg(e,t){for(let n of t){let r=zg(e,n);if(r)return r}return null}function Hg(e){return x.isJSXIdentifier(e.name)?e.name.name:null}function Gg(e){return e===null?"null":typeof e=="boolean"?e?"true":"false":JSON.stringify(e)}function Yg(e){if(!x.isCallExpression(e)&&!x.isOptionalCallExpression(e))return null;let t=e.callee;return!x.isMemberExpression(t)&&!x.isOptionalMemberExpression(t)||!x.isIdentifier(t.property)||t.property.name!=="map"||t.computed||!x.isExpression(t.object)?null:{call:e,collection:t.object,callback:e.arguments[0]}}function ts(e){return x.isArrowFunctionExpression(e)||x.isFunctionExpression(e)}function Zg(e){return e==="render"||e==="itemRender"||e==="rowRender"||e==="children"}function qg(e){return e==="empty"||e==="emptyRender"||e==="loading"||e==="loadingRender"||e==="error"||e==="errorRender"||e==="fallback"||e==="headerRender"||e==="footerRender"}function gl(e,t,n,r){if(!e||!x.isExpression(e))return null;let o={kind:"repeat-template",collectionExpression:rt(e,n),collectionSource:Ne(e,n,r)};if(t){let i=t.params[0],s=t.params[1];x.isIdentifier(i)&&(o.itemParamName=i.name),x.isIdentifier(s)&&(o.indexParamName=s.name)}return o}function Dt(e,t,n){if(!e)return[];if(x.isJSXElement(e)){if(os(e))return yo(e.children,t,n);let r=go(e,t,n);return r?[r]:[]}return An(e)?ho(e,t,n):x.isParenthesizedExpression(e)?Dt(e.expression,t,n):x.isExpression(e)?xo(e,t,n):[]}function po(e,t,n){let r=new Map;for(let o of e.params)for(let i of It(o))is(r,i);t.valueScopes.push(r);try{if(!x.isBlockStatement(e.body))return Dt(e.body,t,n);let o=new Map;t.valueScopes.push(o);try{return El(e.body.body,t,n)}finally{t.valueScopes.pop()}}finally{t.valueScopes.pop()}}function El(e,t,n){let r=[];for(let o of e){if(x.isVariableDeclaration(o)){let i=t.valueScopes[t.valueScopes.length-1];i&&ns([o],t,i);continue}r.push(...rs(o,t,n))}return r}function rs(e,t,n){if(x.isReturnStatement(e))return e.argument?Dt(e.argument,t,n):[];if(x.isBlockStatement(e))return an(e.body,t,n);if(x.isIfStatement(e)){let r=x.isBlockStatement(e.consequent)?an(e.consequent.body,t,n):rs(e.consequent,t,n),o=e.alternate?x.isBlockStatement(e.alternate)?an(e.alternate.body,t,n):rs(e.alternate,t,n):[];return[...r,...o]}if(x.isSwitchStatement(e))return an(e.cases.flatMap(r=>r.consequent),t,n);if(x.isTryStatement(e)){let r=an(e.block.body,t,n);return e.handler&&r.push(...an(e.handler.body.body,t,n)),e.finalizer&&r.push(...an(e.finalizer.body,t,n)),r}return[]}function an(e,t,n){let r=new Map;t.valueScopes.push(r);try{return El(e,t,n)}finally{t.valueScopes.pop()}}function mo(e,t,n,r,o,i){o.length!==0&&e.regions.push({kind:t,ownerKey:n,childKeys:o,sourceRange:Fe(r),sourceCandidates:i&&i.length>0?i:void 0})}function Qg(e,t,n,r){let o=Wg(e.openingElement,["items","dataSource","data"]),i={key:t,tag:hl(e.openingElement)};n.parentStack.push(i);try{for(let s of e.openingElement.attributes){if(!x.isJSXAttribute(s))continue;let a=Hg(s);if(!a||!x.isJSXExpressionContainer(s.value))continue;let c=s.value.expression;if(!x.isJSXEmptyExpression(c)){if(Zg(a)&&ts(c)){let l=po(c,n,r),u=gl(o,c,r,n);mo(n,"repeat-region",t,s,l,u?[u]:void 0);continue}if(qg(a)){let l=ts(c)?po(c,n,r):Dt(c,n,r);mo(n,"conditional-region",t,s,l)}}}if(o)for(let s of e.children){if(!x.isJSXExpressionContainer(s)||!ts(s.expression))continue;let a=po(s.expression,n,r),c=gl(o,s.expression,r,n);mo(n,"repeat-region",t,s,a,c?[c]:void 0)}}finally{n.parentStack.pop()}}function go(e,t,n){let r=hl(e.openingElement);if(r==="Fragment"||os(e))return yo(e.children,t,n),null;let o=t.parentStack[t.parentStack.length-1]??null,i=o?.key??null,s=_g(r),a;if(s){let O=t.ordinalTracker.getOrdinal(i,r);a=`component:${r}#${O}`}else{let O=t.ordinalTracker.getOrdinal(i,r);a=`${r}#${O}`}let c=o?t.elements.get(o.key)?.identity.structuralPath:void 0,l=c?`${c}/${a}`:a,u=er(t.file,t.componentName,l),d={file:t.file,component:t.componentName,structuralPath:l,key:u},p=s?"component-boundary":null,m=jg(e.children,t,n),g=$g(e.openingElement,t,n),b=Vg(e.openingElement,t,n),C,I,w=!1;if(s){let O=t.importMap.get(r)??t.importMap.get(Fg(r));O&&(C=O.specifier,I=O.exportName,w=rr(O.specifier,t.file))}let P={identity:d,tag:r,componentName:t.componentName,sourceFile:t.file,sourceRange:Fe(e),parentKey:i,childKeys:[],textSegments:m,attributes:g.length>0?g:void 0,attributeSpreads:b.length>0?b:void 0,boundaryKind:p,isOpaque:s,...w?{isPublicUiComponent:!0}:{},importedFrom:C,exportName:I};return t.elements.set(u,P),i&&t.elements.has(i)&&t.elements.get(i).childKeys.push(u),Qg(e,u,t,n),(!s||e.children.length>0)&&(t.parentStack.push({key:u,tag:r}),eh(e.children,t,n),t.parentStack.pop()),u}function ho(e,t,n){return yo(e.children,t,n)}function yo(e,t,n){let r=[];for(let o of e)if(x.isJSXElement(o))if(os(o))r.push(...yo(o.children,t,n));else{let i=go(o,t,n);i&&r.push(i)}else An(o)?r.push(...ho(o,t,n)):x.isJSXExpressionContainer(o)&&r.push(...xo(o.expression,t,n));return r}function eh(e,t,n){for(let r of e)x.isJSXElement(r)?go(r,t,n):An(r)?ho(r,t,n):x.isJSXExpressionContainer(r)&&xo(r.expression,t,n)}function th(e){return e==="&&"||e==="||"||e==="??"}function xo(e,t,n){if(x.isJSXEmptyExpression(e))return[];let r=Yg(e);if(r){let o=r.call,i=t.parentStack[t.parentStack.length-1]??null,s=[],a=r.callback,c={kind:"repeat-template",collectionExpression:rt(r.collection,n),collectionSource:Ne(r.collection,n,t)};if(x.isArrowFunctionExpression(a)||x.isFunctionExpression(a)){let u=a.params[0],d=a.params[1];x.isIdentifier(u)&&(c.itemParamName=u.name),x.isIdentifier(d)&&(c.indexParamName=d.name)}s.push(c);let l={kind:"repeat-region",ownerKey:i?.key??"",childKeys:[],sourceRange:Fe(o),sourceCandidates:s.length>0?s:void 0};return t.regions.push(l),(x.isArrowFunctionExpression(a)||x.isFunctionExpression(a))&&l.childKeys.push(...po(a,t,n)),l.childKeys}if(x.isConditionalExpression(e)){let o=t.parentStack[t.parentStack.length-1]??null,i={kind:"conditional-branch",conditionExpression:rt(e.test,n),conditionSource:Ne(e.test,n,t)},s={kind:"conditional-region",ownerKey:o?.key??"",childKeys:[],sourceRange:Fe(e),sourceCandidates:[i]};return t.regions.push(s),s.childKeys.push(...Dt(e.consequent,t,n)),s.childKeys.push(...Dt(e.alternate,t,n)),s.childKeys}if(x.isLogicalExpression(e)&&th(e.operator)){let o=t.parentStack[t.parentStack.length-1]??null,i={kind:"conditional-branch",conditionExpression:rt(e.left,n),conditionSource:Ne(e.left,n,t)},s={kind:"conditional-region",ownerKey:o?.key??"",childKeys:[],sourceRange:Fe(e),sourceCandidates:[i]};return t.regions.push(s),s.childKeys.push(...Dt(e.right,t,n)),s.childKeys}if(x.isParenthesizedExpression(e))return xo(e.expression,t,n);if(x.isJSXElement(e)){let o=go(e,t,n);return o?[o]:[]}return An(e)?ho(e,t,n):[]}function nh(e){let t=e.argument;return t&&(x.isExpression(t)||An(t))?t:null}function ir(e,t){let n=[];for(let r of e){if(x.isReturnStatement(r)){let o=nh(r);o&&n.push({argument:o,statement:r,condition:t});continue}if(x.isIfStatement(r)){let o=x.isBlockStatement(r.consequent)?r.consequent.body:[r.consequent];if(n.push(...ir(o,r.test)),r.alternate){let i=x.isBlockStatement(r.alternate)?r.alternate.body:[r.alternate];n.push(...ir(i,r.test))}continue}if(x.isSwitchStatement(r))for(let o of r.cases){let i=o.test?x.binaryExpression("===",r.discriminant,o.test):r.discriminant;n.push(...ir(o.consequent,i))}}return n}function vl(e){let{file:t,source:n,ast:r}=e,o=e.imports.map(d=>d.specifier),i=new Map,s=[],a=[],c=new Map,l=Dg(r);Tg(r,{"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression"(d){let p=Og(d);if(!p)return;let m=d.node,g=[];if(x.isArrowFunctionExpression(m))x.isExpression(m.body)||An(m.body)?g=[{argument:m.body,statement:x.returnStatement(x.isExpression(m.body)?m.body:null)}]:x.isBlockStatement(m.body)&&(g=ir(m.body.body));else{let O=m.body;x.isBlockStatement(O)&&(g=ir(O.body))}if(g.length===0){d.skip();return}let b=new Map;ns(Bg(r.program.body),es(t,p,i,s,l,[b]),b);let C=new Map;for(let O of m.params)for(let se of It(O))is(C,se);let I=x.isBlockStatement(m.body)?m.body.body:[],w=g[0]?.statement??null;for(let O of I){if(w&&O===w)break;x.isVariableDeclaration(O)&&ns([O],es(t,p,i,s,l,[b,C]),C)}let P=es(t,p,i,s,l,[b,C]);for(let O of g){let se=Dt(O.argument,P,n);for(let re of se)a.includes(re)||a.push(re);if(O.condition){let re={kind:"conditional-branch",conditionExpression:rt(O.condition,n),conditionSource:Ne(O.condition,n,P)};mo(P,"conditional-region","",O.statement,se,[re])}}d.skip()}});let u=[...i.keys()];return u.length>0&&c.set(t,u),{graph:{routeId:t,rootKeys:a,elements:i,regions:s,fileIndex:c,version:1,diagnostics:[]},localImports:o}}function ss(e,t,n,r){return[...e.map(o=>({...o})),{fromFile:t,specifier:n,targetPath:r}]}function bo(e,t,n){return{...e,details:{...e.details??{},entryFile:t,importStack:n.map(r=>({...r}))}}}async function Il(e,t,n,r,o={}){let i=o.maxDepth??10,s=o.version??1,a=o.parseModule??nr,c=new Map,l=new Map,u=new Map,d=[],p=new Set,m=I=>{let w=`${I.path}\0${I.code}\0${I.message}\0${JSON.stringify(I.details??{})}`;p.has(w)||(p.add(w),d.push(I))},g=[{file:e,source:t,depth:0,diagnosticEntryFile:e,importStack:[]},...(o.additionalEntries??[]).map(I=>({file:I.file,source:I.source,depth:0,diagnosticEntryFile:I.file,importStack:[]}))],b=new Set;for(;g.length>0;){let I=g.shift(),{file:w,source:P,depth:O,diagnosticEntryFile:se,importStack:re}=I;if(b.has(w))continue;b.add(w),c.set(w,P);let N=a(w,P);if(!N.ok){m(bo(N.diagnostic,se,re));continue}u.set(w,N.module);let{graph:z,localImports:M}=vl(N.module);for(let j of z.elements.values())if(j.importedFrom&&ht(j.importedFrom)){let Y=j.importedFrom,te=await lo(w,Y,r);te.ok?(j.importedFrom=te.path,sn(te.path)&&(j.isPublicUiComponent=!0)):rr(Y,w)||m(bo(te.diagnostic,se,ss(re,w,Y,te.diagnostic.path)))}if(l.set(w,z),!(O>=i))for(let j of M){if(pl(j))continue;let Y=await lo(w,j,r);if(!Y.ok){rr(j,w)||m(bo(Y.diagnostic,se,ss(re,w,j,Y.diagnostic.path)));continue}let te=Y.path;if(b.has(te)||sn(te))continue;let Se=ss(re,w,j,te);try{let H=await n(te);g.push({file:te,source:H,depth:O+1,diagnosticEntryFile:se,importStack:Se})}catch(H){m(bo({path:te,code:"import-read-failed",message:`Failed to read imported file: ${te}`,details:{fromFile:w,specifier:j,reason:H instanceof Error?H.message:String(H)}},se,Se))}}}let C=rh(e,l,s,(o.additionalEntries??[]).map(I=>I.file));return C.diagnostics=d,{graph:C,allSources:c,diagnostics:d,parsedModules:u,entryModule:u.get(e)??null}}function rh(e,t,n,r=[]){let o=new Map,i=[],s=new Map,a=[];for(let[c,l]of t){for(let[u,d]of l.elements)o.set(u,d);for(let u of l.regions)i.push(u);for(let[u,d]of l.fileIndex){let p=s.get(u)??[];s.set(u,[...p,...d])}if(c===e){a=l.rootKeys;continue}r.includes(c)&&(a=[...a,...l.rootKeys])}return{routeId:e,rootKeys:a,elements:o,regions:i,fileIndex:s,version:n}}function kl(e){let t=new Map;for(let[n,r]of e.elements){let o=/^[A-Z]/.test(r.tag),i={file:r.sourceFile,componentName:r.componentName,isProxy:o},s=r.boundaryKind,a=[];r.isOpaque&&a.push({kind:"opaque-region",reason:`Component '${r.tag}' is opaque: internal structure not editable`}),o&&!r.isOpaque&&a.push({kind:"component-boundary",reason:`Component '${r.tag}' boundary: editing requires source file access`});let c={key:n,writeTarget:i,boundaryKind:s,parentKey:r.parentKey,childKeys:[...r.childKeys],constraints:a};t.set(n,c)}for(let n of e.regions){let r=n.kind==="repeat-region"?"repeat-region":n.kind==="conditional-region"?"conditional-region":n.kind==="opaque-region"?"opaque-region":"component-boundary",o=n.kind==="repeat-region"?"Node is inside a repeat region: operations affect the template, not individual instances":n.kind==="conditional-region"?"Node is inside a conditional region: visibility depends on runtime condition":`Node is inside a ${n.kind}`;for(let i of n.childKeys){let s=t.get(i);s&&s.constraints.push({kind:r,reason:o}),Cl(i,r,o,t,e)}}return{nodes:t,rootKeys:[...e.rootKeys]}}function Cl(e,t,n,r,o){let i=o.elements.get(e);if(i)for(let s of i.childKeys){let a=r.get(s);a&&!a.constraints.some(c=>c.kind===t)&&(a.constraints.push({kind:t,reason:n}),Cl(s,t,n,r,o))}}import{isSiteEditRuntimeContainerTag as oh,isSiteEditRuntimeVoidElementTag as ih}from"@vcp-dev/contracts/site-edit-runtime-capability";function Tn(e){if(!e.composition)throw new Error("Composition unavailable for render source graph.");return e.composition}function sh(e,t,n){let r=Tn(n),o=t.nodes.get(e),i=n.elements.get(e);if(!o||!i)return{composition:r,key:e,canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1,constraints:[{kind:"opaque-region",message:"Node not found in graph"}]};let s=o.constraints.map(O=>({kind:O.kind,message:O.reason})),a=i.isOpaque,l=o.parentKey===null&&i.componentName==="Page",u=i.tag.toLowerCase(),d=i.tag!==u,p=!d&&ih(u),m=d||oh(u),g=d&&i.childKeys.length>0&&!i.isPublicUiComponent,b=i.textSegments.length>0&&i.textSegments.some(O=>O.editable);p&&!s.some(O=>O.kind==="void-element")&&s.push({kind:"void-element",message:`Element '${i.tag}' is void: children cannot be inserted`}),!p&&!m&&!s.some(O=>O.kind==="void-element")&&s.push({kind:"void-element",message:`Element '${i.tag}' cannot contain structured children`});let C=b&&!a,I=!i.isPublicUiComponent&&!p&&m&&(!a||g);return{composition:r,key:e,canUpdateText:C,canInsertChild:I,canMove:!l,canRemove:!l,constraints:s}}function Rl(e,t){let n=new Map;for(let r of e.nodes.keys())n.set(r,sh(r,e,t));return n}import{createHash as Os}from"node:crypto";import Ns from"@babel/traverse";function as(e){let t=new Map,n=new Map;for(let s of e){if(t.has(s.placementKey))throw new Error(`Duplicate placement key in page composition projection: ${s.placementKey}`);t.set(s.placementKey,s);let a=n.get(s.placementUnitKey)??[];a.push(s),n.set(s.placementUnitKey,a)}let r=new Map,o=new Map,i=new Map;for(let[s,a]of n){let c=Object.freeze([...a]),l=c.find(u=>u.anchorSourceRange!==null&&u.members.length>0)??c.find(u=>u.members.length>0)??c[0];l&&(o.set(s,c),i.set(s,l),r.set(s,Object.freeze({placementUnitKey:s,placementKeys:Object.freeze(c.map(u=>u.placementKey)),sourcePlacementKey:l.placementKey})))}return{placementByKey:t,unitByKey:r,placementsByUnitKey:o,sourcePlacementByUnitKey:i}}import{createHash as $y}from"node:crypto";import ou from"node:path";import*as Lo from"@babel/parser";import Is from"@babel/generator";import ks from"@babel/traverse";import*as Ut from"@babel/types";import cs from"@babel/traverse";var jt=typeof cs=="function"?cs:cs.default,So=new WeakMap,wl=new WeakMap;function Ct(e,t){let n=Hi(e,t);if(!n.ok)return Wi(e,n.diagnostic.code,n.diagnostic.message,t.kind);let r=ie(n.ast,t);return r.ok?{ok:!0,match:{locatorKind:r.match.locatorKind,node:r.match.node,start:r.match.start,end:r.match.end}}:Wi(e,r.diagnostic.code,r.diagnostic.message,t.kind,r.diagnostic.details)}function ie(e,t){return t.kind==="jsx-node"?Tl(e,t):t.kind==="jsx-attribute"?fh(e,t):t.kind==="value"?ph(e,t):t.kind==="expression"?mh(e,t):t.kind==="directive"?gh(e,t):t.kind==="export"?hh(e,t):{ok:!1,diagnostic:rn("unsupported-syntax",`Unsupported locator kind: ${t.kind}`)}}function Tl(e,t){return t.strategy==="source-range"?ah(e,t):ch(e,t)}function ah(e,t){let n=null;if(jt(e,{JSXElement(o){if(!_n(o.node,t.sourceRange))return;let i=Ce("jsx-node",o);if(i){if(!n){n=i;return}i.end-i.start<n.end-n.start&&(n=i)}},JSXFragment(o){if(!_n(o.node,t.sourceRange))return;let i=Ce("jsx-node",o);i&&(!n||i.end-i.start<n.end-n.start)&&(n=i)},JSXExpressionContainer(o){if(!_n(o.node,t.sourceRange))return;let i=Ce("jsx-node",o);i&&(!n||i.end-i.start<n.end-n.start)&&(n=i)}}),!n)return Re("jsx-node","locator-miss","JSX node not found for source-range locator");let r=n;return t.expectedIdentity&&!Nh(r.path,t.expectedIdentity)?Re("jsx-node","locator-miss","JSX node failed expected identity validation"):{ok:!0,match:r}}function ch(e,t){if(t.structuralPath===""){let r=uh(e,t.component);if(r){let o=dh(r);if(o)return o}}let n=null;return jt(e,{JSXElement(r){if(ar(r)!==t.component||us(r)!==t.structuralPath)return;let i=Ce("jsx-node",r);i&&(n=i,r.stop())},JSXFragment(r){if(ar(r)!==t.component||us(r)!==t.structuralPath)return;let i=Ce("jsx-node",r);i&&(n=i,r.stop())}}),!n&&t.expectedRange&&(n=lh(e,t.component,t.expectedRange)),n?{ok:!0,match:n}:Re("jsx-node","locator-miss","JSX node not found for structural-path locator")}function lh(e,t,n){let r=null;return jt(e,{JSXElement(o){if(ar(o)!==t||!_n(o.node,n))return;let i=Ce("jsx-node",o);i&&(r=i,o.stop())},JSXFragment(o){if(ar(o)!==t||!_n(o.node,n))return;let i=Ce("jsx-node",o);i&&(r=i,o.stop())}}),r}function uh(e,t){let n=null;return jt(e,{FunctionDeclaration(r){r.node.id?.name===t&&(n=r,r.stop())},VariableDeclarator(r){if(r.node.id.type==="Identifier"&&r.node.id.name===t){let o=r.get("init");(o.isArrowFunctionExpression()||o.isFunctionExpression())&&(n=o),r.stop()}}}),n}function dh(e){if(e.isArrowFunctionExpression()){let t=e.get("body");if(t.isBlockStatement()){let r=t.get("body").find(o=>o.isReturnStatement());if(r){let o=r.get("argument");if((o.isParenthesizedExpression()?o.get("expression"):o).isJSXFragment())return Re("jsx-node","unsupported-syntax","JSXFragment is not a supported edit target")}return null}return(t.isParenthesizedExpression()?t.get("expression"):t).isJSXFragment()?Re("jsx-node","unsupported-syntax","JSXFragment is not a supported edit target"):null}if(e.isFunctionDeclaration()||e.isFunctionExpression()){let t=e.get("body");if(t.isBlockStatement()){let n=t.get("body").find(r=>r.isReturnStatement());if(n){let r=n.get("argument");if((r.isParenthesizedExpression()?r.get("expression"):r).isJSXFragment())return Re("jsx-node","unsupported-syntax","JSXFragment is not a supported edit target")}}}return null}function fh(e,t){let n=Tl(e,t.element);if(!n.ok)return n;let s=n.match.path.get("openingElement").get("attributes").find(c=>Ph(c,t.name));if(!s||!s.isJSXAttribute())return Re("jsx-attribute","locator-miss",`JSX attribute '${t.name}' not found`);let a=Ce("jsx-attribute",s);return a?{ok:!0,match:a}:Re("jsx-attribute","locator-miss",`JSX attribute '${t.name}' has no source range`)}function ph(e,t){let n=yh(e,t);if(!n.ok)return n;let r=xh(n.match.path,t.path??[]);return r.ok?t.expectedRange&&!kt(r.match.path.node.loc,t.expectedRange)?Re("value","locator-miss","Resolved value does not match expected range"):{ok:!0,match:r.match}:r}function mh(e,t){let n=null;return jt(e,{Identifier(r){if(!kh(r))return;let o=Pl(r);if(!o||!Al(o,t))return;let i=Ce("expression",r);i&&(t.expectedRange&&!kt(r.node.loc,t.expectedRange)||(n=i,r.stop()))},MemberExpression(r){let o=Pl(r);if(!o||!Al(o,t))return;let i=Ce("expression",r);i&&(t.expectedRange&&!kt(r.node.loc,t.expectedRange)||(n=i,r.stop()))}}),n?{ok:!0,match:n}:Re("expression","locator-miss","Expression not found")}function gh(e,t){let n=null;return jt(e,{Program(r){let i=r.get("directives").find(a=>a.node.value.value===t.value);if(!i||t.expectedRange&&!kt(i.node.loc,t.expectedRange))return;let s=Ce("directive",i);s&&(n=s,r.stop())}}),n?{ok:!0,match:n}:Re("directive","locator-miss",`Directive '${t.value}' not found`)}function hh(e,t){let n=null;return jt(e,{ExportNamedDeclaration(r){if(t.exportKind==="generate-metadata"){let c=r.get("declaration");if(c.isFunctionDeclaration()&&c.node.id?.name==="generateMetadata"){let p=Ce("export",c);if(!p||t.expectedRange&&!kt(c.node.loc,t.expectedRange))return;n=p,r.stop();return}if(!c.isVariableDeclaration())return;let l=ds(c,"generateMetadata");if(!l||!l.isVariableDeclarator())return;let u=l.get("init");if(!u.node)return;let d=Ce("export",u);if(!d||t.expectedRange&&!kt(u.node.loc,t.expectedRange))return;n=d,r.stop();return}let o=r.get("declaration");if(!o.isVariableDeclaration())return;let i=ds(o,t.exportKind==="named"?t.name:"metadata");if(!i||!i.isVariableDeclarator())return;let s=i.get("init");if(!s.node||t.expectedRange&&!kt(s.node.loc,t.expectedRange))return;let a=Ce("export",s);a&&(n=a,r.stop())},ExportDefaultDeclaration(r){if(t.exportKind!=="default")return;let o=r.get("declaration"),i=Ce("export",o);i&&(t.expectedRange&&!kt(o.node.loc,t.expectedRange)||(n=i,r.stop()))}}),n?{ok:!0,match:n}:Re("export","export-not-found",`Export '${wh(t)}' not found`)}function yh(e,t){let n=null;return jt(e,{Expression(r){if(n||t.root.kind!=="expression"||!_n(r.node,t.root.sourceRange))return;let o=Ce("value",r);o&&(n=o,r.stop())},VariableDeclarator(r){if(n)return;if(t.root.kind==="binding"){if(r.node.id.type!=="Identifier"||r.node.id.name!==t.root.name)return;let m=r.get("init");if(!m.node)return;let g=Ce("value",m);if(!g)return;n=g,r.stop();return}if(t.root.kind!=="hook-state")return;let o=t.root,i=r.get("id"),s=r.get("init");if(!i.isArrayPattern()||!s.isCallExpression()||i.node.elements.findIndex(m=>m?.type==="Identifier"&&m.name===o.name)!==0)return;let c=s.node.callee;if((c.type==="Identifier"?c.name:c.type==="MemberExpression"&&c.property.type==="Identifier"?c.property.name:null)!==o.hook)return;let u=o.hook==="useReducer"?1:0,d=r.get(`init.arguments.${u}`);if(!d||Array.isArray(d)||!d.node)return;let p=Ce("value",d);p&&(n=p,r.stop())},ExportNamedDeclaration(r){if(n||t.root.kind!=="named-export")return;let o=r.get("declaration");if(!o.isVariableDeclaration())return;let i=ds(o,t.root.name);if(!i||!i.isVariableDeclarator())return;let s=i.get("init");if(!s.node)return;let a=Ce("value",s);a&&(n=a,r.stop())},ExportDefaultDeclaration(r){if(n||t.root.kind!=="default-export")return;let o=r.get("declaration"),i=Ce("value",o);i&&(n=i,r.stop())}}),n?{ok:!0,match:n}:Re("value",t.root.kind==="named-export"||t.root.kind==="default-export"?"export-not-found":t.root.kind==="expression"?"locator-miss":"binding-not-found","Value root was not found")}function xh(e,t){let n=ls(e);for(let o of t){if(n=ls(n),o.kind==="property"){if(!n.isObjectExpression())return Re("value","unsupported-syntax","Property path requires object expression");let a=n.get("properties");if(a.some(l=>!l.isObjectProperty()))return Re("value","unsupported-syntax","Spread properties are not supported");let c=a.find(l=>Ah(l,o.name));if(!c||!c.isObjectProperty())return Re("value","property-not-found",`Property '${o.name}' not found`);n=c.get("value");continue}if(!n.isArrayExpression())return Re("value","unsupported-syntax","Array index path requires array expression");let i=n.get("elements");if(i.some(a=>a.node?.type==="SpreadElement"))return Re("value","unsupported-syntax","Spread array elements are not supported");let s=i[o.index];if(!s?.node)return Re("value","array-index-out-of-range",`Array index ${o.index} is out of range`);n=s}n=ls(n);let r=Ce("value",n);return r?{ok:!0,match:r}:Re("value","locator-miss","Resolved value has no source range")}function ls(e){let t=e;for(;t.isTSAsExpression()||t.isTSSatisfiesExpression()||t.isTSNonNullExpression();)t=t.get("expression");return t}function Ce(e,t){let n=t.node;return n.start==null||n.end==null?null:{locatorKind:e,node:n,start:n.start,end:n.end,path:t}}function _n(e,t){return kt(e.loc,t)}function kt(e,t){return e?e.start.line===t.startLine&&e.start.column===t.startColumn&&e.end.line===t.endLine&&e.end.column===t.endColumn:!1}function us(e){let t=[],n=e,r=e.node;for(;n;){if(n.isJSXElement()){if(!Eo(n.node)){let o=_l(n.node.openingElement);o&&(/^[A-Z]/.test(o)?t.unshift(`component:${o}#${Nl(n,o)}`):t.unshift(`${o}#${Nl(n,o)}`))}}else n.isJSXFragment()&&n.node===r&&t.unshift("fragment");if(!n.parentPath||vh(n.parentPath)&&!Ih(n.parentPath))break;n=n.parentPath}return t.join("/")}function Eo(e){let t=e.openingElement.name;return t.type==="JSXIdentifier"?t.name==="Fragment":t.type==="JSXMemberExpression"&&t.property.name==="Fragment"}function Nl(e,t){let n=bh(e);if(!n)return 0;let r=So.get(n.node)?.get(t)?.get(e.node);if(r!==void 0)return r;let o=0,i=So.get(n.node)?.get(t);if(!i){let s=So.get(n.node);s||(s=new Map,So.set(n.node,s)),i=new WeakMap,s.set(t,i)}for(let s of sr(n))if(_l(s.node.openingElement)===t){if(i.set(s.node,o),s.node===e.node)return o;o++}return i.get(e.node)??0}function bh(e){let t=e.parentPath,n=null;for(;t;){if(t.isJSXFragment()){n=t,t=t.parentPath;continue}if(t.isJSXElement()){if(Eo(t.node)){t=t.parentPath;continue}return t}t=t.parentPath}return n}function sr(e){let t=wl.get(e.node);if(t)return t;let n=[],r=e.get("children");for(let o of r)if(!Array.isArray(o)){if(o.isJSXElement()){if(Eo(o.node)){n.push(...sr(o));continue}n.push(o);continue}if(o.isJSXFragment()){n.push(...sr(o));continue}o.isJSXExpressionContainer()&&n.push(...Bt(o.get("expression")))}return wl.set(e.node,n),n}function Bt(e){if(e.isJSXElement())return Eo(e.node)?sr(e):[e];if(e.isJSXFragment())return sr(e);if(e.isParenthesizedExpression())return Bt(e.get("expression"));if(e.isLogicalExpression()&&Sh(e.node.operator))return Bt(e.get("right"));if(e.isCallExpression()||e.isOptionalCallExpression()){let t=e.get("callee"),n=!Array.isArray(t)&&(t.isMemberExpression()||t.isOptionalMemberExpression())?t.get("property"):null;if(!Array.isArray(t)&&(t.isMemberExpression()||t.isOptionalMemberExpression())&&!t.node.computed&&n!==null&&!Array.isArray(n)&&n.isIdentifier()&&n.node.name==="map"){let r=e.get("arguments").find(o=>!Array.isArray(o)&&(o.isArrowFunctionExpression()||o.isFunctionExpression()));if(r&&!Array.isArray(r)){let o=r.get("body");if(!Array.isArray(o)){if(o.isBlockStatement()){let i=o.get("body").find(s=>!Array.isArray(s)&&s.isReturnStatement());if(i&&!Array.isArray(i)){let s=i.get("argument");if(!Array.isArray(s)&&s.node&&s.isExpression())return Bt(s)}}else if(o.node&&o.isExpression())return Bt(o)}}}}return e.isConditionalExpression()?[...Bt(e.get("consequent")),...Bt(e.get("alternate"))]:e.isArrayExpression()?e.get("elements").flatMap(t=>Array.isArray(t)||!t.node||!t.isExpression()?[]:Bt(t)):[]}function Sh(e){return e==="&&"||e==="||"||e==="??"}function _l(e){return e.name.type==="JSXIdentifier"?e.name.name:e.name.type==="JSXMemberExpression"?Eh(e.name):null}function Eh(e){let t=[],n=e;for(;n.type==="JSXMemberExpression";)t.unshift(n.property.name),n=n.object;return t.unshift(n.name),t.join(".")}function ar(e){let t=e;for(;t;){if(t.isFunctionDeclaration())return t.node.id?.name??null;if((t.isArrowFunctionExpression()||t.isFunctionExpression())&&t.parentPath?.isVariableDeclarator()){let n=t.parentPath.node.id;return n.type==="Identifier"?n.name:null}t=t.parentPath}return null}function vh(e){return!!(e.isFunctionDeclaration()||e.isFunctionExpression()||e.isArrowFunctionExpression())}function Ih(e){let t=e.parentPath;if(!t||!t.isCallExpression()&&!t.isOptionalCallExpression())return!1;let n=t.get("callee"),r=!Array.isArray(n)&&(n.isMemberExpression()||n.isOptionalMemberExpression())?n.get("property"):null;if(Array.isArray(n)||!n.isMemberExpression()&&!n.isOptionalMemberExpression()||n.node.computed||r===null||Array.isArray(r)||!r.isIdentifier()||r.node.name!=="map")return!1;let o=t.get("arguments");return Array.isArray(o)?o.some(i=>!Array.isArray(i)&&i.node===e.node):!1}function kh(e){return!(!e.isExpression()||e.parentPath?.isMemberExpression({property:e.node}))}function Pl(e){if(e.isIdentifier())return{base:e.node.name,path:[]};if(!e.isMemberExpression())return null;let t=[],n=e.node;for(;n.type==="MemberExpression";){if(n.computed)if(n.property.type==="NumericLiteral")t.unshift({kind:"index",index:n.property.value});else if(n.property.type==="StringLiteral")t.unshift({kind:"property",name:n.property.value});else return null;else if(n.property.type==="Identifier")t.unshift({kind:"property",name:n.property.name});else return null;if(n.object.type==="Identifier")return{base:n.object.name,path:t};if(n.object.type!=="MemberExpression")return null;n=n.object}return null}function Al(e,t){return e.base===t.base&&Ch(e.path,t.path??[])}function Ch(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],o=t[n];if(r.kind!==o.kind)return!1;if(r.kind==="property"){if(o.kind!=="property"||r.name!==o.name)return!1;continue}if(o.kind!=="index"||r.index!==o.index)return!1}return!0}function Rh(e){return e.key.type==="Identifier"?e.key.name:e.key.type==="StringLiteral"?e.key.value:null}function wh(e){return e.exportKind==="named"?e.name:e.exportKind}function Re(e,t,n,r){return{ok:!1,diagnostic:rn(t,n,e,r)}}function Nh(e,t){return ar(e)!==t.component?!1:us(e)===t.structuralPath}function Ph(e,t){return!e.isJSXAttribute()||e.node.name.type!=="JSXIdentifier"?!1:e.node.name.name===t}function ds(e,t){return e.get("declarations").find(n=>!n.isVariableDeclarator()||n.node.id.type!=="Identifier"?!1:n.node.id.name===t)}function Ah(e,t){return e.isObjectProperty()?Rh(e.node)===t:!1}import fs from"@babel/generator";var Th=typeof fs=="function"?fs:fs.default;function _h(e){let t=e.split(`
2
+ `),n=[],r=!1;for(let s of t){let a=s.match(/^(\s+)/);if(a){let c=a[1];c.includes(" ")?r=!0:c.length>0&&n.push(c.length)}}if(r&&t.every(a=>{let c=a.match(/^(\s+)/);return!c||c[1].includes(" ")}))return"tab";if(n.length===0)return"2";function o(s,a){return a===0?s:o(a,s%a)}let i=n[0];for(let s=1;s<n.length;s++)i=o(i,n[s]);return i>=4?"4":"2"}function Fh(e,t){let n=e.match(/^(\s+)(.*)/s);if(!n)return e;let r=n[1],o=n[2];if(r.length===0)return e;let i=r.includes(" ")?r.split(" ").length-1:Math.max(1,Math.round(r.length/2)),s=Math.min(Math.max(i,0),20);return t==="tab"?" ".repeat(s)+o:t==="4"?" ".repeat(s)+o:" ".repeat(s)+o}function Oh(e,t){return e.split(`
3
+ `).map(r=>Fh(r,t)).join(`
4
+ `)}function vo(e){let{ast:t,source:n}=e;try{let r=_h(n),i=Th(t,{comments:!0,jsescOption:{minimal:!0,quotes:"single"}},n).code;return r!=="2"&&(i=Oh(i,r)),{ok:!0,source:i}}catch(r){return B(n,"printer-failed",`AST print failed: ${r instanceof Error?r.message:String(r)}`)}}import*as Ol from"@babel/parser";import{arrayExpression as Mh,booleanLiteral as Dh,identifier as Lh,jsxAttribute as Bh,jsxExpressionContainer as jh,jsxIdentifier as $h,nullLiteral as Vh,numericLiteral as Uh,objectExpression as Kh,objectProperty as Jh,stringLiteral as ps}from"@babel/types";function Fl(e){let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t=(t<<5)-t+r,t|=0}return`0x${Math.abs(t).toString(16)}`}function cr(e,t,n){return{ok:!0,source:t,operation:{type:n.kind,nodeId:n.target,kind:n.kind,target:n.target,beforeSourceHash:Fl(e),afterSourceHash:Fl(t),inverse:n.inverse}}}function ce(e,t,n){let r=vo({ast:e,source:t});return r.ok?cr(t,r.source,n):r}function be(e,t){let n=Gi(e,t);return n.ok?{ok:!0,ast:n.ast}:{ok:!1,result:{ok:!1,source:e,diagnostic:n.diagnostic}}}function Io(e,t){return vo({ast:e,source:t})}function Xh(e,t,n){let r=ie(e,t);return r.ok?{ok:!0,match:r.match}:{ok:!1,result:{ok:!1,source:n,diagnostic:r.diagnostic}}}function ko(e,t,n){let r=Xh(e,t,n);return r.ok?r.match.path.isJSXElement()?r:{ok:!1,result:B(n,"unsupported-syntax","JSX locator must resolve to JSXElement","jsx-node")}:r}function $t(e){return typeof e=="string"?ps(e):typeof e=="number"?Uh(e):typeof e=="boolean"?Dh(e):e===null?Vh():Array.isArray(e)?Mh(e.map(t=>$t(t))):Kh(Object.entries(e).map(([t,n])=>{let r=Jh(ms(t),$t(n));return t==="__proto__"&&(r.computed=!0),r}))}function zh(e){return typeof e=="string"?ps(e):jh($t(e))}function lr(e,t){return Bh($h(e),zh(t))}function Ml(e,t){try{let r=Ol.parse(`const __VD_NODE__ = (${t});`,{sourceType:"module",plugins:["jsx","typescript"]}).program.body[0];return r?.type!=="VariableDeclaration"||r.declarations[0]?.type!=="VariableDeclarator"||!r.declarations[0].init||r.declarations[0].init.type!=="JSXElement"&&r.declarations[0].init.type!=="JSXFragment"?{ok:!1,result:B(e,"unsupported-syntax","Provided JSX source does not resolve to a JSX node","jsx-node")}:{ok:!0,node:r.declarations[0].init}}catch(n){return{ok:!1,result:B(e,"parse-failed",`AST parse failed: ${n instanceof Error?n.message:String(n)}`,"jsx-node")}}}function ms(e){return/^[$A-Z_][0-9A-Z_$]*$/i.test(e)?Lh(e):ps(e)}function Co(e){let{source:t,locator:n,segmentIndex:r,newText:o}=e,i=be(t,"jsx-node");if(!i.ok)return i.result;let s=ie(i.ast,n);if(!s.ok)return{ok:!1,source:t,diagnostic:s.diagnostic};let c=Wh(s.match.path)[r];if(!c)return B(t,"locator-miss",`Text segment ${r} not found`,"jsx-node");switch(c.kind){case"jsx-text":c.path.node.value=Hh(c.path.node.value,o);break;case"string-literal":c.path.node.value=o;break;case"template-literal":{let l=c.quasiIndex;c.path.node.quasis[l].value.raw=o,c.path.node.quasis[l].value.cooked=o;break}}return ce(i.ast,t,{kind:"update-text",target:"jsx-node",inverse:"restore-text"})}function Wh(e){let t=[],n=e.isJSXElement()||e.isJSXFragment()?e.get("children"):[];for(let r of n){if(r.isJSXText()){r.node.value.trim().length>0&&t.push({kind:"jsx-text",path:r});continue}if(r.isJSXExpressionContainer()){let o=Gh(r.get("expression"));o.length>0&&t.push(...o)}}return t}function Hh(e,t){let n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"";return`${n}${t.trim()}${r}`}function Gh(e){if(e.isStringLiteral())return[{kind:"string-literal",path:e}];if(e.isTemplateLiteral()){let t=[],n=e.node.quasis;for(let r=0;r<n.length;r++)n[r].value.raw.trim().length>0&&t.push({kind:"template-literal",path:e,quasiIndex:r});if(t.length>0)return t}return e.isCallExpression()?[]:[]}import{nullLiteral as gs}from"@babel/types";function Fn(e){let{source:t,locator:n}=e,r=be(t,"jsx-node");if(!r.ok)return r.result;let o=ie(r.ast,n);return o.ok?(Yh(o.match.path),ce(r.ast,t,{kind:"remove-node",target:"jsx-node",inverse:"insert-child"})):{ok:!1,source:t,diagnostic:o.diagnostic}}function Yh(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(gs());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(gs());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(gs());return}e.remove()}import{cloneNode as ay}from"@babel/types";import hs from"@babel/traverse";import*as J from"@babel/types";var Zh=typeof hs=="function"?hs:hs.default;function qe(e,t,n,r){if(!e.ok)return e;let o=Ze(n);if(!o)return e;let i=qh(t,o,r);return i?{...e,selectionRef:i}:e}function qh(e,t,n){let r=Qh(e,t);if(!r)return;let o=n.sourceLocator?Dl(n.sourceLocator):void 0,i=n.targetParentLocator?Dl(n.targetParentLocator):void 0,s=n.file??i?.file??o?.file,a=n.component??ty(r)??i?.component??o?.component;if(!(!s||!a))return{key:er(s,a,ny(r))}}function Dl(e){return e.strategy==="structural-path"?{file:e.file,component:e.component,structuralPath:e.structuralPath}:e.expectedIdentity}function Qh(e,t){let n=null;return Zh(e,{JSXElement(r){r.node===t&&(n=r,r.stop())}}),n}function Ze(e){if(!e)return null;if(J.isJSXElement(e))return On(e)?Ll(e.children):e;if(J.isJSXFragment(e))return Ll(e.children);if(J.isJSXExpressionContainer(e)||J.isParenthesizedExpression(e)||J.isTSAsExpression(e)||J.isTSSatisfiesExpression(e)||J.isTSTypeAssertion(e)||J.isTSNonNullExpression(e))return Ze(e.expression);if(J.isLogicalExpression(e))return Ze(e.right);if(J.isConditionalExpression(e))return Ze(e.consequent)??Ze(e.alternate);if(J.isCallExpression(e)||J.isOptionalCallExpression(e))return Ul(e)?ey(e.arguments[0]):null;if(J.isArrayExpression(e))for(let t of e.elements){if(!t)continue;let n=Ze(t);if(n)return n}return null}function Ll(e){for(let t of e){let n=Ze(t);if(n)return n}return null}function ey(e){return!e||!J.isArrowFunctionExpression(e)&&!J.isFunctionExpression(e)?null:J.isBlockStatement(e.body)?ur(e.body.body):Ze(e.body)}function ur(e){for(let t of e){if(J.isReturnStatement(t)){let n=Ze(t.argument);if(n)return n;continue}if(J.isBlockStatement(t)){let n=ur(t.body);if(n)return n;continue}if(J.isIfStatement(t)){let n=Bl(t.consequent);if(n)return n;let r=t.alternate?Bl(t.alternate):null;if(r)return r;continue}if(J.isSwitchStatement(t))for(let n of t.cases){let r=ur(n.consequent);if(r)return r}}return null}function Bl(e){return J.isBlockStatement(e)?ur(e.body):ur([e])}function ty(e){let t=e;for(;t;){if(t.isFunctionDeclaration()||t.isClassDeclaration())return t.node.id?.name??null;if(t.isExportDefaultDeclaration()){let n=t.node.declaration;if(J.isFunctionDeclaration(n))return n.id?.name??"default"}if(t.isVariableDeclarator()&&J.isIdentifier(t.node.id)){let n=t.get("init");if(!Array.isArray(n)&&(n.isArrowFunctionExpression()||n.isFunctionExpression()))return t.node.id.name}t=t.parentPath}return null}var jl=new WeakMap,$l=new WeakMap,ys=new WeakMap;function ny(e){let t=jl.get(e.node);if(t!==void 0)return t;let n=[],r=e;for(;r;){if(r.isJSXElement()){let i=ry(r);i&&n.unshift(i)}r=r.parentPath}let o=n.join("/");return jl.set(e.node,o),o}function ry(e){let t=xs(e.node.openingElement.name);return!t||On(e.node)?null:/^[A-Z]/.test(t)?`component:${t}#${Vl(e,t)}`:`${t}#${Vl(e,t)}`}function Vl(e,t){let n=oy(e);if(!n)return 0;let r=ys.get(n.node)?.get(t)?.get(e.node);if(r!==void 0)return r;let o=ys.get(n.node);o||(o=new Map,ys.set(n.node,o));let i=o.get(t);i||(i=new WeakMap,o.set(t,i));let s=0;for(let a of cn(n))if(xs(a.node.openingElement.name)===t){if(i.set(a.node,s),a.node===e.node)return s;s+=1}return i.get(e.node)??0}function oy(e){let t=e.parentPath,n=null;for(;t;){if(t.isJSXFragment()){n=t,t=t.parentPath;continue}if(t.isJSXElement()){if(On(t.node)){t=t.parentPath;continue}return t}t=t.parentPath}return n}function cn(e){let t=$l.get(e.node);if(t)return t;let n=[],r=e.get("children");for(let o of r)if(!Array.isArray(o)){if(o.isJSXElement()){if(On(o.node)){n.push(...cn(o));continue}n.push(o);continue}if(o.isJSXFragment()){n.push(...cn(o));continue}o.isJSXExpressionContainer()&&n.push(...Rt(o.get("expression")))}return $l.set(e.node,n),n}function Rt(e){if(e.isJSXElement())return On(e.node)?cn(e):[e];if(e.isJSXFragment())return cn(e);if(e.isParenthesizedExpression())return Rt(e.get("expression"));if(e.isLogicalExpression())return Rt(e.get("right"));if(e.isConditionalExpression())return[...Rt(e.get("consequent")),...Rt(e.get("alternate"))];if(e.isArrayExpression())return e.get("elements").flatMap(t=>Array.isArray(t)||!t.node||!t.isExpression()?[]:Rt(t));if((e.isCallExpression()||e.isOptionalCallExpression())&&Ul(e.node)){let t=e.get("arguments"),n=Array.isArray(t)?t[0]:void 0;return n?iy(n):[]}return[]}function iy(e){if(!e.isArrowFunctionExpression()&&!e.isFunctionExpression())return[];let t=e.get("body");if(t.isJSXElement())return On(t.node)?cn(t):[t];if(t.isJSXFragment())return cn(t);if(t.isParenthesizedExpression())return Rt(t.get("expression"));if(t.isLogicalExpression()||t.isConditionalExpression())return Rt(t);if(!t.isBlockStatement())return[];for(let n of t.get("body")){if(!n.isReturnStatement())continue;let r=n.get("argument");return r.node?Rt(r):[]}return[]}function Ul(e){let t=e.callee;return(J.isMemberExpression(t)||J.isOptionalMemberExpression(t))&&J.isIdentifier(t.property)&&t.property.name==="map"&&!t.computed}function On(e){let t=xs(e.openingElement.name);return t==="Fragment"||t==="React.Fragment"}function xs(e){return J.isJSXIdentifier(e)?e.name:J.isJSXMemberExpression(e)?Kl(e):J.isJSXNamespacedName(e)?`${e.namespace.name}:${e.name.name}`:null}function Kl(e){return`${J.isJSXIdentifier(e.object)?e.object.name:Kl(e.object)}.${e.property.name}`}function Vt(e,t){if(t.parentPath===e&&t.listKey==="children"&&Jl(e))return e;if(!t.parentPath||t.listKey!=="children")return null;let n=t.parentPath;if(!Jl(n))return null;let r=n;for(;r&&r!==e;){if(!sy(r)||r.listKey!=="children")return null;r=r.parentPath}return r===e?n:null}function Jl(e){return e.isJSXElement()||e.isJSXFragment()}function sy(e){if(e.isJSXFragment())return!0;if(!e.isJSXElement())return!1;let t=e.node.openingElement.name;return t.type==="JSXIdentifier"?t.name==="Fragment":t.type==="JSXMemberExpression"&&t.property.name==="Fragment"}function Mn(e){let{source:t,locator:n,node:r,placement:o,anchorLocator:i,selectionContext:s}=e,a=be(t,"jsx-node");if(!a.ok)return a.result;let c=ie(a.ast,n);if(!c.ok)return{ok:!1,source:t,diagnostic:c.diagnostic};if(!c.match.path.isJSXElement()&&!c.match.path.isJSXFragment())return B(t,"unsupported-syntax","insert-child target must be a JSXElement or JSXFragment","jsx-node");let l=c.match.path;if(c.match.path.isJSXElement()){let P=c.match.path.node;if(!P.closingElement||P.openingElement.selfClosing)return B(t,"self-closing-element","Cannot insert child into self-closing element","jsx-node")}let u=Ml(t,r.jsx);if(!u.ok)return u.result;let d=ay(u.node,!0),p=l.node.children,m={...s,targetParentLocator:n},g=P=>s?qe(P,a.ast,d,m):P;if(o==="append")return p.push(d),g(ce(a.ast,t,{kind:"insert-child",target:"jsx-node",inverse:"remove-child"}));if(o==="prepend")return p.unshift(d),g(ce(a.ast,t,{kind:"insert-child",target:"jsx-node",inverse:"remove-child"}));if(!i)return B(t,"locator-miss",`Placement '${o}' requires anchorLocator`,"jsx-node");let b=ie(a.ast,i);if(!b.ok)return{ok:!1,source:t,diagnostic:b.diagnostic};let C=Vt(c.match.path,b.match.path);if(!C)return B(t,"invalid-parent-child-relation","Anchor node is not a direct child of the target parent","jsx-node");l=C;let I=l.node.children,w=I.findIndex(P=>P===b.match.path.node);return w===-1?B(t,"locator-miss","Anchor node no longer exists in target parent","jsx-node"):(I.splice(o==="before"?w:w+1,0,d),g(ce(a.ast,t,{kind:"insert-child",target:"jsx-node",inverse:"remove-child"})))}import*as Xl from"@babel/parser";import{cloneNode as cy}from"@babel/types";function Ro(e){let{source:t,locator:n,expression:r,placement:o,anchorLocator:i,selectionContext:s}=e,a=be(t,"jsx-node");if(!a.ok)return a.result;let c=ly(t,r);if(!c.ok)return c.result;let l=ie(a.ast,n);if(!l.ok)return{ok:!1,source:t,diagnostic:l.diagnostic};if(!l.match.path.isJSXElement()&&!l.match.path.isJSXFragment())return B(t,"unsupported-syntax","insert-jsx-expression-child target must be a JSXElement or JSXFragment","jsx-node");if(l.match.path.isJSXElement()){let I=l.match.path.node;if(!I.closingElement||I.openingElement.selfClosing)return B(t,"self-closing-element","Cannot insert child into self-closing element","jsx-node")}let u=l.match.path,d=null;if(i){let I=ie(a.ast,i);if(!I.ok)return{ok:!1,source:t,diagnostic:I.diagnostic};let w=Vt(l.match.path,I.match.path);if(!w)return B(t,"invalid-parent-child-relation","Anchor node is not a direct child of the target parent","jsx-node");u=w,d=I.match.path.node}else if(o==="before"||o==="after")return B(t,"locator-miss",`Placement '${o}' requires anchorLocator`,"jsx-node");let p=cy(c.node,!0),m=u.node.children,g={...s,targetParentLocator:n},b=I=>s?qe(I,a.ast,p,g):I;if(o==="append")return m.push(p),b(ce(a.ast,t,{kind:"insert-jsx-expression-child",target:"jsx-node",inverse:"remove-child"}));if(o==="prepend")return m.unshift(p),b(ce(a.ast,t,{kind:"insert-jsx-expression-child",target:"jsx-node",inverse:"remove-child"}));let C=m.findIndex(I=>I===d);return C===-1?B(t,"locator-miss","Anchor node no longer exists in target parent","jsx-node"):(m.splice(o==="before"?C:C+1,0,p),b(ce(a.ast,t,{kind:"insert-jsx-expression-child",target:"jsx-node",inverse:"remove-child"})))}function ly(e,t){try{let r=Xl.parse(`const __VD_EXPR__ = <>{${t}}</>;`,{sourceType:"module",plugins:["jsx","typescript"]}).program.body[0],o=r?.type==="VariableDeclaration"?r.declarations[0]?.init:null,i=o?.type==="JSXFragment"?o.children[0]:void 0;return i?.type!=="JSXExpressionContainer"?{ok:!1,result:B(e,"unsupported-syntax","Expression must parse as a JSX expression container","jsx-node")}:{ok:!0,node:i}}catch(n){return{ok:!1,result:B(e,"parse-failed",`AST parse failed: ${n instanceof Error?n.message:String(n)}`,"jsx-node")}}}import{cloneNode as uy,nullLiteral as bs}from"@babel/types";import*as Dn from"@babel/types";function Ln(e){let{source:t,locator:n,targetParentLocator:r,placement:o,anchorLocator:i,selectionContext:s}=e,a=be(t,"jsx-node");if(!a.ok)return a.result;let c=ie(a.ast,n);if(!c.ok)return{ok:!1,source:t,diagnostic:c.diagnostic};let l=ie(a.ast,r);if(!l.ok)return{ok:!1,source:t,diagnostic:l.diagnostic};if(!l.match.path.isJSXElement()&&!l.match.path.isJSXFragment())return B(t,"unsupported-syntax","move-node target parent must be a JSXElement or JSXFragment","jsx-node");let u=l.match.path;if(l.match.path.isJSXElement()){let w=l.match.path.node;if(!w.closingElement||w.openingElement.selfClosing)return B(t,"self-closing-element","Cannot move child into self-closing element","jsx-node")}let d=null;if(i){let w=ie(a.ast,i);if(!w.ok)return{ok:!1,source:t,diagnostic:w.diagnostic};let P=Vt(l.match.path,w.match.path);if(!P)return B(t,"invalid-parent-child-relation","Anchor node is not a direct child of the target parent","jsx-node");u=P,d=w.match.path}else if(o==="before"||o==="after")return B(t,"locator-miss",`Placement '${o}' requires anchorLocator`,"jsx-node");let p=d&&typeof d.key=="number"?d.key:-1;if(d&&p===-1)return B(t,"locator-miss","Anchor node does not exist in target parent","jsx-node");let m=uy(c.match.path.node,!0);if(!Dn.isJSXElement(m)&&!Dn.isJSXExpressionContainer(m)&&!Dn.isJSXFragment(m))return B(t,"unsupported-syntax","move-node source must resolve to a JSX child","jsx-node");let g=c.match.path.parentPath?.node===u.node&&typeof c.match.path.key=="number"?c.match.path.key:-1;if(d&&c.match.path.parentPath?.node===d.parentPath?.node&&c.match.path.key===d.key)return B(t,"invalid-parent-child-relation","Cannot move a node relative to itself","jsx-node");dy(c.match.path);let b=u.node.children,C={...s,sourceLocator:n,targetParentLocator:r};if(o==="append")return b.push(m),qe(Io(a.ast,t),a.ast,m,C);if(o==="prepend")return b.unshift(m),qe(Io(a.ast,t),a.ast,m,C);let I=p-(g!==-1&&g<p?1:0);return b.splice(o==="before"?I:I+1,0,m),qe(Io(a.ast,t),a.ast,m,C)}function dy(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(bs());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(bs());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(bs());return}e.remove()}import*as zl from"@babel/parser";import{cloneNode as fy,nullLiteral as Ss}from"@babel/types";function wo(e){let{source:t,locator:n,targetParentLocator:r,placement:o,anchorLocator:i,repeatExpression:s,selectionContext:a}=e,c=be(t,"jsx-node");if(!c.ok)return c.result;let l=py(t,s);if(!l.ok)return l.result;let u=ie(c.ast,n);if(!u.ok)return{ok:!1,source:t,diagnostic:u.diagnostic};let d=ie(c.ast,r);if(!d.ok)return{ok:!1,source:t,diagnostic:d.diagnostic};if(!d.match.path.isJSXElement()&&!d.match.path.isJSXFragment())return B(t,"unsupported-syntax","move-repeat-template-child target parent must be a JSXElement or JSXFragment","jsx-node");if(d.match.path.isJSXElement()){let P=d.match.path.node;if(!P.closingElement||P.openingElement.selfClosing)return B(t,"self-closing-element","Cannot move repeat child into self-closing element","jsx-node")}let p=d.match.path,m=null;if(i){let P=ie(c.ast,i);if(!P.ok)return{ok:!1,source:t,diagnostic:P.diagnostic};let O=Vt(d.match.path,P.match.path);if(!O)return B(t,"invalid-parent-child-relation","Anchor node is not a direct child of the target parent","jsx-node");p=O,m=P.match.path.node}else if(o==="before"||o==="after")return B(t,"locator-miss",`Placement '${o}' requires anchorLocator`,"jsx-node");if(!u.match.path.isJSXElement())return B(t,"unsupported-syntax","move-repeat-template-child source must be a JSXElement","jsx-node");let g=p.node,b=fy(l.node,!0);my(u.match.path);let C={...a,sourceLocator:n,targetParentLocator:r},I=g.children;if(o==="append")return I.push(b),qe(ce(c.ast,t,{kind:"move-repeat-template-child",target:"jsx-node",inverse:"move-repeat-template-child"}),c.ast,b,C);if(o==="prepend")return I.unshift(b),qe(ce(c.ast,t,{kind:"move-repeat-template-child",target:"jsx-node",inverse:"move-repeat-template-child"}),c.ast,b,C);let w=I.findIndex(P=>P===m);return w===-1?B(t,"locator-miss","Anchor node no longer exists in target parent","jsx-node"):(I.splice(o==="before"?w:w+1,0,b),qe(ce(c.ast,t,{kind:"move-repeat-template-child",target:"jsx-node",inverse:"move-repeat-template-child"}),c.ast,b,C))}function py(e,t){try{let r=zl.parse(`const __VD_EXPR__ = <>{${t}}</>;`,{sourceType:"module",plugins:["jsx","typescript"]}).program.body[0],o=r?.type==="VariableDeclaration"?r.declarations[0]?.init:null,i=o?.type==="JSXFragment"?o.children[0]:void 0;return i?.type!=="JSXExpressionContainer"?{ok:!1,result:B(e,"unsupported-syntax","Repeat expression must parse as a JSX expression container","jsx-node")}:{ok:!0,node:i}}catch(n){return{ok:!1,result:B(e,"parse-failed",`AST parse failed: ${n instanceof Error?n.message:String(n)}`,"jsx-node")}}}function my(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(Ss());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(Ss());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(Ss());return}e.remove()}import{SiteEditSetPropsParamsSchema as gy,classifySiteEditPropertyName as hy}from"@vcp-dev/contracts";import*as Bn from"@babel/types";function No(e){let t=gy.safeParse({kind:"set-props",scope:"selection",changes:e.changes});if(!t.success)return B(e.source,"unsupported-syntax","Invalid typed JSX property changes","jsx-node",{issues:t.error.issues});let n=be(e.source,"jsx-node");if(!n.ok)return n.result;let r=ko(n.ast,e.locator,e.source);if(!r.ok)return r.result;for(let a of t.data.changes){let c=hy(a.name);if(c.owner!=="generic")return B(e.source,"unsupported-syntax",c.diagnostic?.message??`Property '${a.name}' is not owned by the generic JSX primitive`,"jsx-node")}let o=r.match.path.node.openingElement,i=o.attributes.filter(Bn.isJSXAttribute),s=new Map;for(let a of i){let c=yy(a);if(!c)continue;let l=s.get(c)??[];l.push(a),s.set(c,l)}for(let a of t.data.changes)if((s.get(a.name)??[]).length>1)return B(e.source,"unsupported-syntax",`JSX attribute '${a.name}' has multiple sources`,"jsx-node");for(let a of t.data.changes){let c=s.get(a.name)?.[0];if(a.operation==="remove"){c&&(o.attributes=o.attributes.filter(u=>u!==c));continue}let l=lr(a.name,a.value).value;c?c.value=l:o.attributes.push(lr(a.name,a.value))}return ce(n.ast,e.source,{kind:"set-props",target:"jsx-node",inverse:"set-props"})}function yy(e){return Bn.isJSXIdentifier(e.name)?e.name.name:Bn.isJSXNamespacedName(e.name)?`${e.name.namespace.name}:${e.name.name.name}`:null}import*as Pe from"@babel/types";import{classifySiteEditPropertyName as Wl}from"@vcp-dev/contracts";function Po(e){let t=Wl(e.name),n=Wl(e.property);if(t.owner!=="generic"||n.owner!=="generic")return B(e.source,"unsupported-syntax","Property binding is only available for generic properties","jsx-node");if(!Hl(e.object))return B(e.source,"unsupported-syntax","Property binding object must be a single identifier","jsx-node");if(e.property.length===0)return B(e.source,"unsupported-syntax","Property binding requires a non-empty property name","jsx-node");let r=be(e.source,"jsx-node");if(!r.ok)return r.result;let o=ko(r.ast,e.locator,e.source);if(!o.ok)return o.result;let i=o.match.path.node.openingElement,s=i.attributes.filter(l=>Pe.isJSXAttribute(l)&&by(l)===e.name);if(s.length>1)return B(e.source,"unsupported-syntax",`JSX attribute '${e.name}' has multiple sources`,"jsx-node");let a=xy(e.object,e.property),c=s[0];if(c)c.value=Pe.jsxExpressionContainer(a);else{let l=lr(e.name,"");l.value=Pe.jsxExpressionContainer(a),i.attributes.push(l)}return ce(r.ast,e.source,{kind:"set-property-binding",target:"jsx-node",inverse:"restore-property-binding"})}function xy(e,t){return Hl(t)?Pe.memberExpression(Pe.identifier(e),Pe.identifier(t)):Pe.memberExpression(Pe.identifier(e),Pe.stringLiteral(t),!0)}function Hl(e){return/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(e)}function by(e){return Pe.isJSXIdentifier(e.name)?e.name.name:Pe.isJSXNamespacedName(e.name)?`${e.name.namespace.name}:${e.name.name.name}`:null}import{getBindingIdentifiers as Ey,identifier as dr,importDeclaration as vy,importDefaultSpecifier as Iy,importNamespaceSpecifier as ky,importSpecifier as Cy,isImportDefaultSpecifier as Gl,isImportNamespaceSpecifier as Yl,isImportSpecifier as Zl,stringLiteral as Ry}from"@babel/types";function jn(e){let{source:t,moduleSpecifier:n,imports:r}=e,o=r.findIndex(C=>!My(C));if(o!==-1){let C=r[o],I=C&&typeof C=="object"&&"kind"in C?C.kind:void 0;return B(t,"unsupported-syntax",`Unsupported import spec kind: ${String(I)}`)}let i=_y(r);if(!i.ok)return B(t,"unsupported-syntax",i.message);let s=be(t);if(!s.ok)return s.result;let{ast:a}=s,c=a.program,l=c.body.filter(C=>C.type==="ImportDeclaration"&&C.source.value===n),u=new Set(l.flatMap(C=>C.specifiers.flatMap(I=>{let w=Dy(C,I);return w?[w]:[]}))),d=i.imports.filter(C=>!u.has(ru(C)));if(d.length===0)return cr(t,t,{kind:"add-import",target:"import",inverse:"remove-import"});let p=Fy(c.body),m=d.find(C=>p.has(Es(C)));if(m)return B(t,"unsupported-syntax",`Import local binding already exists: ${Es(m)}`);let g=Ty(d);if(g.reduce((C,I)=>C+I.length,0)!==d.length)return B(t,"unsupported-syntax","Unsupported import specifier grouping");for(let C of g){if(!tu(Ql(C)))return B(t,"unsupported-syntax","Unsupported import specifier combination");let I=l.find(w=>wy(w,C));if(I)Ny(I,C);else{let w=vy(ql(C),Ry(n));Oy(c.body,w),l.push(w)}}return ce(a,t,{kind:"add-import",target:"import",inverse:"remove-import"})}function wy(e,t){return e.importKind==="type"?!1:tu(Ay(Py(e),Ql(t)))}function Ny(e,t){let n=!1,r=new Set(e.specifiers.map(o=>vs(o)));for(let o of ql(t)){let i=vs(o);r.has(i)||(e.specifiers.push(o),r.add(i),n=!0)}return nu(e.specifiers),{changed:n}}function ql(e){let t=e.map(n=>{switch(n.kind){case"named":return Cy(n.local?dr(n.local):dr(n.imported),dr(n.imported));case"default":return Iy(dr(n.local));case"namespace":return ky(dr(n.local));default:return n}});return nu(t),t}function Ql(e){let t=eu();for(let n of e)n.kind==="default"?t.defaultLocals.add(n.local):n.kind==="named"?t.hasNamed=!0:t.namespaceLocals.add(n.local);return t}function Py(e){let t=eu();for(let n of e.specifiers)Gl(n)?t.defaultLocals.add(n.local.name):Yl(n)?t.namespaceLocals.add(n.local.name):t.hasNamed=!0;return t}function eu(){return{defaultLocals:new Set,hasNamed:!1,namespaceLocals:new Set}}function Ay(e,t){return{defaultLocals:new Set([...e.defaultLocals,...t.defaultLocals]),hasNamed:e.hasNamed||t.hasNamed,namespaceLocals:new Set([...e.namespaceLocals,...t.namespaceLocals])}}function tu(e){return e.defaultLocals.size>1||e.namespaceLocals.size>1?!1:!(e.hasNamed&&e.namespaceLocals.size>0)}function nu(e){let t=[...e.filter(n=>Gl(n)),...e.filter(n=>Yl(n)),...e.filter(n=>Zl(n))];e.splice(0,e.length,...t)}function Ty(e){let t=e.filter(i=>i.kind==="default"),n=e.filter(i=>i.kind==="namespace"),r=e.filter(i=>i.kind==="named"),o=[];if(n.length>0){let i=Math.max(t.length,n.length);for(let s=0;s<i;s+=1){let a=[],c=t[s],l=n[s];c&&a.push(c),l&&a.push(l),o.push(a)}return r.length>0&&o.push(r),o}if(t.length>0){o.push([t[0],...r]);for(let i of t.slice(1))o.push([i])}else r.length>0&&o.push(r);return o}function _y(e){let t=new Map,n=new Map;for(let r of e){let o=ru(r);if(t.has(o))continue;let i=Es(r),s=n.get(i);if(s&&s!==o)return{ok:!1,message:`Import local binding is requested more than once: ${i}`};t.set(o,r),n.set(i,o)}return{ok:!0,imports:[...t.values()]}}function Fy(e){let t=new Set;for(let n of e){if(n.type==="ImportDeclaration"){for(let o of n.specifiers)t.add(o.local.name);continue}let r=(n.type==="ExportNamedDeclaration"||n.type==="ExportDefaultDeclaration")&&n.declaration?n.declaration:n;if(r.type==="VariableDeclaration")for(let o of r.declarations)for(let i of Object.keys(Ey(o.id)))t.add(i);else(r.type==="FunctionDeclaration"||r.type==="ClassDeclaration"||r.type==="TSEnumDeclaration")&&r.id&&t.add(r.id.name)}return t}function Oy(e,t){let n=[...e].reverse().findIndex(r=>r.type==="ImportDeclaration");if(n===-1)e.unshift(t);else{let r=e.length-n;e.splice(r,0,t)}}function My(e){if(!e||typeof e!="object"||!("kind"in e))return!1;let t=e.kind;return t==="named"?typeof e.imported=="string"&&(e.local===void 0||typeof e.local=="string"):t==="default"||t==="namespace"?typeof e.local=="string":!1}function ru(e){switch(e.kind){case"default":return`default:${e.local}`;case"namespace":return`namespace:${e.local}`;case"named":return`named:${e.imported}:${e.local??e.imported}`;default:return e}}function Es(e){return e.kind==="named"?e.local??e.imported:e.local}function Dy(e,t){return e.importKind==="type"||Zl(t)&&t.importKind==="type"?null:vs(t)}function vs(e){if(e.type==="ImportDefaultSpecifier")return`default:${e.local.name}`;if(e.type==="ImportNamespaceSpecifier")return`namespace:${e.local.name}`;let t=e.imported.type==="Identifier"?e.imported.name:e.imported.value,n=e.local.name;return`named:${t}:${n}`}function $n(e){let{source:t,moduleSpecifier:n,imports:r}=e,o=r.findIndex(u=>!By(u));if(o!==-1){let u=r[o],d=u&&typeof u=="object"&&"kind"in u?u.kind:void 0;return B(t,"unsupported-syntax",`Unsupported remove import spec kind: ${String(d)}`)}let i=be(t);if(!i.ok)return i.result;let{ast:s}=i,a=s.program,c=a.body.findIndex(u=>u.type==="ImportDeclaration"&&u.source.value===n);if(c===-1)return cr(t,t,{kind:"remove-import",target:"import",inverse:"add-import"});let l=a.body[c];return r.length===0?(a.body.splice(c,1),ce(s,t,{kind:"remove-import",target:"import",inverse:"add-import"})):(l.specifiers=l.specifiers.filter(u=>!r.some(d=>Ly(u,d))),l.specifiers.length===0&&a.body.splice(c,1),ce(s,t,{kind:"remove-import",target:"import",inverse:"add-import"}))}function Ly(e,t){return t.kind==="default"?e.type==="ImportDefaultSpecifier":t.kind==="namespace"?e.type==="ImportNamespaceSpecifier":e.type!=="ImportSpecifier"?!1:(e.imported.type==="Identifier"?e.imported.name:e.imported.value)===t.imported}function By(e){if(!e||typeof e!="object"||!("kind"in e))return!1;let t=e.kind;return t==="named"?typeof e.imported=="string":t==="default"||t==="namespace"}function fr(e){let{source:t,locator:n,next:r}=e,o=Fo(t,n);return o.ok?(o.path.replaceWith($t(r)),ce(o.ast,t,{kind:"update-value",target:"value",inverse:"restore-value"})):o.result}function Ao(e){let{source:t,locator:n,index:r,value:o}=e,i=Fo(t,n);return i.ok?i.path.isArrayExpression()?i.path.node.elements.some(s=>s?.type==="SpreadElement")?B(t,"unsupported-syntax","Spread array elements are not supported","value"):r<0||r>i.path.node.elements.length?B(t,"array-index-out-of-range",`Array index ${r} is out of range`,"value"):(i.path.node.elements.splice(r,0,$t(o)),ce(i.ast,t,{kind:"insert-array-element",target:"value",inverse:"remove-array-element"})):B(t,"unsupported-syntax","Array operations require array expression target","value"):i.result}function To(e){let{source:t,locator:n,index:r}=e,o=Fo(t,n);return o.ok?o.path.isArrayExpression()?o.path.node.elements.some(i=>i?.type==="SpreadElement")?B(t,"unsupported-syntax","Spread array elements are not supported","value"):r<0||r>=o.path.node.elements.length?B(t,"array-index-out-of-range",`Array index ${r} is out of range`,"value"):(o.path.node.elements.splice(r,1),ce(o.ast,t,{kind:"remove-array-element",target:"value",inverse:"insert-array-element"})):B(t,"unsupported-syntax","Array operations require array expression target","value"):o.result}function _o(e){let{source:t,locator:n,fromIndex:r,toIndex:o}=e,i=Fo(t,n);if(!i.ok)return i.result;if(!i.path.isArrayExpression())return B(t,"unsupported-syntax","Array operations require array expression target","value");if(i.path.node.elements.some(c=>c?.type==="SpreadElement"))return B(t,"unsupported-syntax","Spread array elements are not supported","value");if(r<0||r>=i.path.node.elements.length||o<0||o>i.path.node.elements.length)return B(t,"array-index-out-of-range","Array move indices are out of range","value");let[s]=i.path.node.elements.splice(r,1),a=Math.min(o,i.path.node.elements.length);return i.path.node.elements.splice(a,0,s),ce(i.ast,t,{kind:"move-array-element",target:"value",inverse:"move-array-element-back"})}function Fo(e,t){let n=be(e,"value");if(!n.ok)return{ok:!1,result:n.result};let r=ie(n.ast,t);return r.ok?{ok:!0,ast:n.ast,path:r.match.path}:{ok:!1,result:{ok:!1,source:e,diagnostic:r.diagnostic}}}import*as Te from"@babel/types";function Oo(e){let t=be(e.source,"value");if(!t.ok)return t.result;let n=ie(t.ast,e.objectLocator);if(!n.ok)return{ok:!1,source:e.source,diagnostic:n.diagnostic};if(!n.match.path.isObjectExpression())return B(e.source,"unsupported-syntax","Object property upsert requires an ObjectExpression parent","value");let r=n.match.path.node;if(r.properties.some(a=>Te.isSpreadElement(a)||Te.isObjectProperty(a)&&a.computed))return B(e.source,"unsupported-syntax","Object property upsert does not support spreads or computed keys","value");let o=r.properties.filter(a=>Te.isObjectProperty(a)&&jy(a.key)===e.name);if(o.length>1)return B(e.source,"unsupported-syntax",`Object property '${e.name}' has multiple sources`,"value");let i=e.value.kind==="undefined"?Te.unaryExpression("void",Te.numericLiteral(0)):$t(e.value.value),s=o[0];if(s)s.value=i,s.shorthand=!1;else{let a=Te.objectProperty(ms(e.name),i);e.name==="__proto__"&&(a.computed=!0),r.properties.push(a)}return ce(t.ast,e.source,{kind:"upsert-object-property",target:"value",inverse:"restore-object-property"})}function jy(e){return Te.isIdentifier(e)?e.name:Te.isStringLiteral(e)?e.value:Te.isNumericLiteral(e)?String(e.value):null}var Vy=typeof Is=="function"?Is:Is.default;function Rs(e){let t=uu(e);if(t)return{ok:!1,error:t};let n=e.projection,r=ws(n,e.placementKey,e.expectedDocumentVersion);if(!r.ok)return{ok:!1,error:{code:r.diagnostic.code==="DOCUMENT_VERSION_STALE"?"VERSION_STALE":"RUNTIME_ANCHOR_UNRESOLVED",message:r.diagnostic.message,diagnostics:[r.diagnostic]}};let o=r.placement.containerSourceRange??n.container.sourceRange,i=r.placement;if((n.container.kind==="virtual-route-root"||n.container.kind==="starter-placeholder")&&(n.container.sourceRange===null||n.container.sourceKind==="jsx-element"||n.container.sourceKind==="atomic-expression"||n.container.kind==="starter-placeholder"))return n.container.sourceKind==="atomic-expression"?{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"An indirect page expression does not expose a safe return boundary.",diagnostics:[]}}:{ok:!0,plan:{kind:"route-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:e.placementKey,placementUnitKey:i.placementUnitKey,importStep:iu(e),returnStep:{kind:"insert-return",node:{jsx:`<${e.component.localName} />`},placement:i.relation,replaceOriginal:n.container.kind==="starter-placeholder"}}};if(!o)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition does not expose a safe placement boundary.",diagnostics:[]}};let a={kind:"jsx-node",strategy:"source-range",sourceRange:o},c=Ct(e.source,a);if(!c.ok||!c.match.node)return{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:c.ok===!1?c.diagnostic.message:"Route page composition anchor could not be resolved.",diagnostics:c.ok?[]:[Mo(c.diagnostic)]}};let l=Do(e.source,c.match.node.start??null,c.match.node.end??null);if(zy(o,n.container.sourceRange)&&n.container.sourceHash&&l!==n.container.sourceHash)return{ok:!1,error:{code:"VERSION_STALE",message:"Route page composition container hash no longer matches the current source.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Route page composition container hash no longer matches the current source."}]}};let u=iu(e);return{ok:!0,plan:{kind:"route-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:e.placementKey,placementUnitKey:r.placement.placementUnitKey,parentLocator:a,importStep:u,insertStep:{kind:"insert-child",parentLocator:a,node:{jsx:`<${e.component.localName} />`},placement:r.placement.relation,...r.placement.anchorSourceRange?{anchorLocator:{kind:"jsx-node",strategy:"source-range",sourceRange:r.placement.anchorSourceRange}}:{}}}}}function iu(e){let t=Xy(e.entryFile,e.component.source);return e.component.exportName==="default"?{kind:"add-import",moduleSpecifier:t,imports:[{kind:"default",local:e.component.localName}]}:{kind:"add-import",moduleSpecifier:t,imports:[{kind:"named",imported:e.component.exportName,local:e.component.localName===e.component.exportName?void 0:e.component.localName}]}}function cu(e){let t;try{t=Lo.parse(e.source,{sourceType:"module",plugins:["jsx","typescript"]})}catch(i){return{ok:!1,source:e.source,diagnostic:{message:i instanceof Error?i.message:String(i)}}}let n=Lo.parseExpression(e.jsx,{plugins:["jsx","typescript"]}),r=!1;return(typeof ks=="function"?ks:ks.default)(t,{ExportDefaultDeclaration(i){let s=i.get("declaration"),a=Uy(i,s);if(a){if(a.isArrowFunctionExpression()&&!a.get("body").isBlockStatement()){let c=a.get("body");c.replaceWith(su(c.node,n,e.placement,e.replaceOriginal===!0)),r=!0,i.stop();return}a.traverse({Function(c){c.node!==a.node&&c.skip()},ReturnStatement(c){if(r)return;let l=c.get("argument");l.node&&(l.replaceWith(su(l.node,n,e.placement,e.replaceOriginal===!0)),r=!0,c.stop())}}),r&&i.stop()}}}),r?{ok:!0,source:Vy(t,{}).code}:{ok:!1,source:e.source,diagnostic:{message:"Route default return boundary could not be resolved."}}}function Uy(e,t){if(t.isFunctionDeclaration()||t.isFunctionExpression()||t.isArrowFunctionExpression())return t;if(!t.isIdentifier())return null;let n=e.scope.getBinding(t.node.name);if(!n)return null;let r=n.path;if(r.isFunctionDeclaration()||r.isFunctionExpression())return r;if(r.isVariableDeclarator()){let o=r.get("init");if(o.isArrowFunctionExpression()||o.isFunctionExpression())return o}return null}function su(e,t,n,r){if(Ut.isNullLiteral(e)||r)return t;let s=n==="before"||n==="prepend"?[t,e]:[e,t];return Ut.jsxFragment(Ut.jsxOpeningFragment(),Ut.jsxClosingFragment(),s)}function lu(e){let t=uu(e);if(t)return{ok:!1,error:t};let n=e.projection;if(n.container.sourceRange===null)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition does not expose a safe placement boundary.",diagnostics:[]}};let r=du(n,e.placementUnitKey,e.expectedDocumentVersion);if(!r.ok)return{ok:!1,error:{code:r.diagnostic.code==="DOCUMENT_VERSION_STALE"?"VERSION_STALE":"NO_SAFE_PAGE_PLACEMENT",message:r.diagnostic.message,diagnostics:[r.diagnostic]}};let o=r.placement;if(!o.sourceRange||!o.sourceHash)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition source placement does not expose a safe boundary.",diagnostics:[]}};let i=Cs(o.sourceRange),s=Ct(e.source,i);if(!s.ok||!s.match.node)return{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:s.ok===!1?s.diagnostic.message:"Route page composition source anchor could not be resolved.",diagnostics:s.ok?[]:[Mo(s.diagnostic)]}};if(Do(e.source,s.match.node.start??null,s.match.node.end??null)!==o.sourceHash)return{ok:!1,error:{code:"VERSION_STALE",message:"Route page composition source placement hash no longer matches the current source.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Route page composition source placement hash no longer matches the current source."}]}};if(e.operation==="remove-node")return{ok:!0,plan:{kind:"page-unit-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:o.placementKey,placementUnitKey:o.placementUnitKey,sourceHash:o.sourceHash,rewriteStep:{kind:"remove-node",locator:i}}};if(!e.targetPlacement)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Page-unit move requires a target placement.",diagnostics:[]}};if(e.targetPlacement.composition.routeId!==e.routeId||!Jy(e.targetPlacement.composition,e.composition))return{ok:!1,error:{code:"CROSS_PAGE_MOVE_UNSUPPORTED",message:"Page-unit move across routes or composition templates is not supported.",diagnostics:[]}};if(e.targetPlacement.documentVersion!==e.expectedDocumentVersion)return{ok:!1,error:{code:"VERSION_STALE",message:"Page-unit target placement belongs to a different document version.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Page-unit target placement belongs to a different document version."}]}};let c=ws(n,e.targetPlacement.placementKey,e.expectedDocumentVersion);if(!c.ok)return{ok:!1,error:{code:c.diagnostic.code==="DOCUMENT_VERSION_STALE"?"VERSION_STALE":"NO_SAFE_PAGE_PLACEMENT",message:c.diagnostic.message,diagnostics:[c.diagnostic]}};let l=c.placement;if(l.placementUnitKey!==e.targetPlacement.placementUnitKey||l.relation!==e.targetPlacement.relation)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Page-unit target placement metadata does not match the cached projection.",diagnostics:[]}};let u=l.containerSourceRange;if(!u||!l.containerSourceHash)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition target placement does not expose a verifiable container boundary.",diagnostics:[]}};let d=Cs(u),p=Ct(e.source,d);if(!p.ok||!p.match.node)return{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:p.ok===!1?p.diagnostic.message:"Route page composition target container could not be resolved.",diagnostics:p.ok?[]:[Mo(p.diagnostic)]}};if(Do(e.source,p.match.node.start??null,p.match.node.end??null)!==l.containerSourceHash)return au("Route page composition target container hash no longer matches the current source.");if(l.relation==="before"||l.relation==="after"){let g=l.anchorSourceRange,b=l.anchorSourceHash;if(!g||!b)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition target placement does not expose a verifiable anchor boundary.",diagnostics:[]}};let C=Cs(g),I=Ct(e.source,C);return!I.ok||!I.match.node?{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:I.ok===!1?I.diagnostic.message:"Route page composition target anchor could not be resolved.",diagnostics:I.ok?[]:[Mo(I.diagnostic)]}}:Do(e.source,I.match.node.start??null,I.match.node.end??null)!==b?au("Route page composition target anchor hash no longer matches the current source."):{ok:!0,plan:{kind:"page-unit-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:o.placementKey,placementUnitKey:o.placementUnitKey,sourceHash:o.sourceHash,rewriteStep:{kind:"move-node",locator:i,targetParentLocator:d,anchorLocator:C,placement:l.relation}}}}return{ok:!0,plan:{kind:"page-unit-composition-rewrite",routeId:e.routeId,entryFile:e.entryFile,documentVersion:e.expectedDocumentVersion,placementKey:o.placementKey,placementUnitKey:o.placementUnitKey,sourceHash:o.sourceHash,rewriteStep:{kind:"move-node",locator:i,targetParentLocator:d,placement:l.relation}}}}function au(e){return{ok:!1,error:{code:"VERSION_STALE",message:e,diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:e}]}}}function Mo(e){return{code:"UNSUPPORTED_PAGE_SHAPE",message:e.message,details:{astCode:e.code}}}function uu(e){let{projection:t}=e;return t.route!==e.routeId||t.entryFile!==e.entryFile?{code:"VERSION_STALE",message:"Cached page composition projection belongs to a different route.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Cached page composition projection belongs to a different route.",details:{expectedRouteId:e.routeId,projectedRouteId:t.route,expectedEntryFile:e.entryFile,projectedEntryFile:t.entryFile}}]}:e.composition&&!Ky(t.composition,e.composition)?{code:"VERSION_STALE",message:"Cached page composition projection belongs to a different composition.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Cached page composition projection belongs to a different composition.",details:{expectedComposition:e.composition,projectedComposition:t.composition}}]}:e.currentDocumentVersion!==e.expectedDocumentVersion||t.documentVersion!==e.currentDocumentVersion?{code:"VERSION_STALE",message:"Route page composition version is stale.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Route page composition version is stale.",details:{expectedDocumentVersion:e.expectedDocumentVersion,currentDocumentVersion:e.currentDocumentVersion,projectedDocumentVersion:t.documentVersion}}]}:null}function Ky(e,t){return e.routeId===t.routeId&&e.effectiveTemplateId===t.effectiveTemplateId}function Jy(e,t){return e.routeId===t.routeId&&e.templateId===t.effectiveTemplateId}function Xy(e,t){let n=ou.posix.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=ou.posix.relative(n,r);return o=o.replace(/\\/g,"/"),o.startsWith(".")||(o=`./${o}`),o}function Cs(e){return{kind:"jsx-node",strategy:"source-range",sourceRange:e}}function Do(e,t,n){return t==null||n==null?null:`sha256:${$y("sha256").update(e.slice(t,n)).digest("hex")}`}function zy(e,t){return e===null||t===null?e===t:e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}var Wy=typeof Ns=="function"?Ns:Ns.default;function pu(e){if(!e.ast)return yt(e,[$e("UNSUPPORTED_PAGE_SHAPE","SourceGraph entry AST is required",{reason:"parsed-ast-required"})]);let t=tx(e.ast);if(!t)return yt(e,[$e("UNSUPPORTED_PAGE_SHAPE","Route default export must resolve to a local function component",{reason:"default-export-unresolved"})]);let n=rx(t);if(n.length===0)return yt(e,[$e("ROUTE_RETURN_NOT_FOUND","Route default export does not contain a proven return boundary")]);if(n.length>1)return yt(e,[$e("MULTIPLE_PAGE_RETURNS","Route default export contains multiple page-level return statements",{returnCount:n.length})]);let r=ox(n[0].argument);if(!r)return yt(e,[$e("ROUTE_RETURN_NOT_FOUND","Route default export returns without a boundary expression",{reason:"bare-return"})]);if(r.isNullLiteral())return fu(e,t,"virtual-route-root");if(ix(r,t))return yt(e,[$e("INDIRECT_RETURN_ONLY","Route default export only returns through an indirect function boundary")]);if(sx(r,t)||ax(r)&&!e.source.includes("DESIGN_PLAN_REPLACE_ME"))return yt(e,[$e("UNSUPPORTED_PAGE_SHAPE","Route default export shape does not provide a single safe placement boundary",{reason:"ambiguous-placement"})]);if(r.isJSXFragment()){let i=Jt(r);if(i.unsupported)return yt(e,[$e("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let s=Ps({input:e,containerKind:"virtual-route-root",sourceKind:"jsx-fragment",source:e.source,containerPath:r,members:i.members});return Bo(e,t,s,{kind:"virtual-route-root",sourceKind:"jsx-fragment"})}if(r.isJSXElement()&&!Vn(r)){let i=_s(r),s=Ps({input:e,containerKind:"virtual-route-root",sourceKind:"jsx-element",source:e.source,containerPath:r,members:[i]});return Bo(e,t,s,{kind:"virtual-route-root",sourceKind:"jsx-element"})}if(r.isJSXElement()){let i=Jt(r);if(i.unsupported)return yt(e,[$e("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let s=i.members;if(lx(e.source,r,s))return fu(e,t,"starter-placeholder");let a=Ps({input:e,containerKind:"jsx-container",sourceKind:"jsx-element",source:e.source,containerPath:r,members:s});return Bo(e,t,a,{kind:"jsx-container",sourceKind:"jsx-element"})}if(cx(r))return yt(e,[$e("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let o=dx({input:e,source:e.source,expression:r});return Bo(e,t,o,{kind:"virtual-route-root",sourceKind:"atomic-expression"})}function ws(e,t,n){if(e.documentVersion!==n)return{ok:!1,diagnostic:$e("DOCUMENT_VERSION_STALE","Placement lookup is stale for the requested document version",{expectedDocumentVersion:e.documentVersion,requestedDocumentVersion:n})};let r=e.placementByKey.get(t)??null;return r?{ok:!0,placement:r}:{ok:!1,diagnostic:$e("PLACEMENT_KEY_NOT_FOUND","Placement key was not found in the projected page composition",{placementKey:t})}}function du(e,t,n){if(e.documentVersion!==n)return{ok:!1,diagnostic:$e("DOCUMENT_VERSION_STALE","Placement lookup is stale for the requested document version",{expectedDocumentVersion:e.documentVersion,requestedDocumentVersion:n})};let r=e.placementUnitByKey.get(t)??null;return r?{ok:!0,placement:r}:{ok:!1,diagnostic:$e("PLACEMENT_KEY_NOT_FOUND","Placement unit key was not found in the projected page composition",{placementUnitKey:t})}}function mu(e){return e.ok?Hy(e.projection):Gy(e.projection)}function Hy(e){let t=new Map,n=[];for(let l of e.placements)l.members.length===0&&e.placements.length>1||l.members.length>0&&!l.anchorSourceRange||t.has(l.placementUnitKey)||t.set(l.placementUnitKey,l);let r=new Map,o=new Map;for(let[l,u]of t){let d=u.members.flatMap((b,C)=>gu(e,u,b,C,e.container.placementKey)),p=d.filter(({member:b})=>b.isBusinessMember).map(({sourceMember:b})=>Zy(l,b,u.independent)),m=d.length>0?d:[{sourceMember:{key:`source:${l}:empty`,kind:e.container.kind==="starter-placeholder"?"starter-placeholder":"null-return",containerKey:e.container.placementKey,label:"empty-page",sourceFile:e.entryFile,isAtomic:!0},member:null}];r.set(l,m.map(({sourceMember:b})=>b)),o.set(l,p);let g=m[0]?.sourceMember.key??l;n.push({key:l,containerKey:g,businessMemberKeys:p.map(b=>b.key),isMultiMember:u.memberCount>1})}let i=[...r.values()].flat(),s=[...o.values()].flat(),a=i[0]?.key??null,c=e.placements.map(l=>({kind:"page-composition",placementKey:l.placementKey,documentVersion:e.documentVersion,composition:e.composition,placementUnitKey:l.placementUnitKey,relation:l.relation}));return{status:"supported",version:e.version,composition:e.composition,container:Yy(e,a),sourceMembers:i,businessMembers:s,placementUnits:n,placements:c}}function Gy(e){let t=e.diagnostics.map(qy);return{status:"unsupported",version:e.version,composition:e.composition,reason:Qy(e.diagnostics),diagnostics:t}}function Yy(e,t){switch(e.container.kind){case"jsx-container":return{kind:"jsx-container",key:e.container.placementKey,sourceMemberKey:t??e.container.placementKey,sourceFile:e.entryFile,componentName:e.defaultExportName??void 0};case"starter-placeholder":return{kind:"starter-placeholder",key:e.container.placementKey,sourceFile:e.entryFile};case"virtual-route-root":return{kind:"virtual-route-root",key:e.container.placementKey}}}function gu(e,t,n,r,o){let i=`source:${t.placementUnitKey}:${r}:${n.memberKey}`;return[{sourceMember:{key:i,kind:n.kind==="jsx-element"?"jsx-element":"jsx-expression",containerKey:o,label:n.label,sourceFile:e.entryFile,isAtomic:n.kind!=="jsx-element"},member:n},...n.children.flatMap((a,c)=>gu(e,t,a,c,i))]}function Zy(e,t,n){return{key:`business:${e}:${t.key}`,sourceMemberKey:t.key,containerKey:e,label:t.label,isIndependent:n}}function qy(e){return{code:ex(e),message:e.message}}function Qy(e){let t=e[0];if(!t)return"UNSUPPORTED_ROUTE_STRUCTURE";switch(t.code){case"ROUTE_RETURN_NOT_FOUND":return"ROUTE_RETURN_NOT_FOUND";case"MULTIPLE_PAGE_RETURNS":return"MULTIPLE_PAGE_RETURNS";case"INDIRECT_RETURN_ONLY":return"INDIRECT_RETURN_ONLY";case"PLACEMENT_KEY_NOT_FOUND":return"RUNTIME_ANCHOR_UNRESOLVED";case"DOCUMENT_VERSION_STALE":return"VERSION_STALE";case"UNSUPPORTED_PAGE_SHAPE":return t.details?.reason==="ambiguous-placement"?"PAGE_CONTAINER_AMBIGUOUS":"UNSUPPORTED_ROUTE_STRUCTURE";default:return"UNSUPPORTED_ROUTE_STRUCTURE"}}function ex(e){switch(e.code){case"PLACEMENT_KEY_NOT_FOUND":return"RUNTIME_ANCHOR_UNRESOLVED";case"DOCUMENT_VERSION_STALE":return"VERSION_STALE";case"UNSUPPORTED_PAGE_SHAPE":return e.details?.reason==="ambiguous-placement"?"PAGE_CONTAINER_AMBIGUOUS":"UNSUPPORTED_ROUTE_STRUCTURE";default:return e.code}}function tx(e){let t=null;return Wy(e,{ExportDefaultDeclaration(n){let r=n.get("declaration");if(r.isArrowFunctionExpression()||r.isFunctionDeclaration()||r.isFunctionExpression()){t=r,n.stop();return}if(!r.isIdentifier())return;let o=n.scope.getBinding(r.node.name);if(!o)return;let i=nx(o.path);i&&(t=i,n.stop())}}),t}function nx(e){if(e.isArrowFunctionExpression()||e.isFunctionDeclaration()||e.isFunctionExpression())return e;if(e.isVariableDeclarator()){let t=e.get("init");if(t.isArrowFunctionExpression()||t.isFunctionExpression())return t}return null}function rx(e){if(e.isArrowFunctionExpression()){let r=e.get("body");if(!r.isBlockStatement())return[{argument:r}]}let t=e.get("body");if(!t.isBlockStatement())return[];let n=[];return t.traverse({Function(r){r.node!==e.node&&r.skip()},ReturnStatement(r){n.push({argument:r.get("argument")})}}),n}function ox(e){if(!e.node)return null;let t=e;for(;;){if(t.isParenthesizedExpression()){t=t.get("expression");continue}if(t.isTSAsExpression()||t.isTSTypeAssertion()){t=t.get("expression");continue}if(t.isTSNonNullExpression()||t.isTypeCastExpression()){t=t.get("expression");continue}break}return t.isExpression()?t:null}function ix(e,t){if(e.isIdentifier())return jo(e.node.name,t);if(e.isCallExpression()){let n=e.get("callee");if(n.isIdentifier())return jo(n.node.name,t)}return!1}function sx(e,t){return e.isConditionalExpression()?Kt(e.get("consequent"),t)||Kt(e.get("alternate"),t):e.isLogicalExpression()?Kt(e.get("left"),t)||Kt(e.get("right"),t):!1}function ax(e){if(!e.isJSXElement()||!Vn(e))return!1;let t=Jt(e).members;if(t.length!==1)return!1;let n=t[0];return n.kind==="jsx-element"&&!n.isBusinessMember&&n.businessMemberCount>0}function Kt(e,t){if(e.isIdentifier())return jo(e.node.name,t);if(e.isCallExpression()){let n=e.get("callee");if(n.isIdentifier())return jo(n.node.name,t)}return e.isConditionalExpression()?Kt(e.get("consequent"),t)||Kt(e.get("alternate"),t):e.isLogicalExpression()?Kt(e.get("left"),t)||Kt(e.get("right"),t):!1}function jo(e,t){let n=t.scope.getBinding(e);if(!n)return!1;let r=n.path;if(r.isFunctionDeclaration()||r.isFunctionExpression()||r.isArrowFunctionExpression())return!0;if(r.isVariableDeclarator()){let o=r.get("init");return o.isFunctionExpression()||o.isArrowFunctionExpression()}return!1}function cx(e){return e.isJSXSpreadChild()}function lx(e,t,n){return e.includes("DESIGN_PLAN_REPLACE_ME")&&t.isJSXElement()&&n.length>0&&Ts(t)}function Ts(e){for(let t of e.get("children")){if(t.isJSXText()){if(t.node.value.trim())return!1;continue}if(t.isJSXExpressionContainer()){let n=t.get("expression");if(n.isJSXEmptyExpression()||n.isNullLiteral())continue;return!1}if(t.isJSXFragment()){if(!Ts(t))return!1;continue}if(t.isJSXElement()&&!Ts(t))return!1}return!0}function Jt(e){let t=[],n=!1;for(let r of e.get("children")){if(r.isJSXText()){if(!r.node.value.trim())continue;t.push({memberKey:Fs(r.node.type,r.node.start,r.node.end),kind:"text",nodeType:r.node.type,sourceRange:ot(r.node.loc),businessMemberCount:0,parentSourceRange:ot(e.node.loc),children:[],isBusinessMember:!1,label:"text"});continue}if(r.isJSXExpressionContainer()){let o=r.get("expression");if(o.isJSXEmptyExpression()||o.isNullLiteral())continue;if(o.isJSXFragment()){let i=Jt(o);n||=i.unsupported,t.push(...i.members);continue}if(o.isJSXElement()){let i=Vn(o)?Jt(o):null;n||=i?.unsupported??!1,t.push({..._s(o,i?.members),sourceRange:ot(r.node.loc),parentSourceRange:ot(e.node.loc)});continue}if(o.isJSXSpreadChild()){n=!0;continue}t.push({memberKey:Fs(o.node.type,o.node.start,o.node.end),kind:"atomic-expression",nodeType:o.node.type,sourceRange:ot(r.node.loc),businessMemberCount:1,parentSourceRange:ot(e.node.loc),children:[],isBusinessMember:!0,label:"atomic-expression"});continue}if(r.isJSXFragment()||r.isJSXElement()&&hu(r)){let o=Jt(r);n||=o.unsupported,t.push(...o.members);continue}if(r.isJSXElement()){let o=Vn(r)?Jt(r):null;n||=o?.unsupported??!1,t.push({..._s(r,o?.members),parentSourceRange:ot(e.node.loc)})}}return{members:t,unsupported:n}}function _s(e,t){let n=e.isJSXElement()&&Vn(e)?t??Jt(e).members:[],r=e.isJSXElement()&&!Vn(e)&&!hu(e);return{memberKey:Fs(e.node.type,e.node.start,e.node.end),kind:"jsx-element",nodeType:e.node.type,sourceRange:ot(e.node.loc),businessMemberCount:r?1:yu(n),parentSourceRange:ot(e.parentPath?.node.loc),children:n,isBusinessMember:r,label:ux(e)}}function hu(e){if(e.isJSXFragment())return!0;let t=e.node.openingElement.name;return t.type==="JSXIdentifier"&&t.name==="Fragment"||t.type==="JSXMemberExpression"&&t.object.type==="JSXIdentifier"&&t.object.name==="React"&&t.property.name==="Fragment"}function Vn(e){let t=e.node.openingElement.name;return t.type==="JSXIdentifier"&&t.name!=="Fragment"&&t.name[0]===t.name[0]?.toLowerCase()}function ux(e){if(e.isJSXFragment())return"Fragment";let t=e.node.openingElement.name;if(t.type==="JSXIdentifier")return t.name;if(t.type==="JSXMemberExpression"){let n=t.object;return`${n.type==="JSXIdentifier"?n.name:"member"}.${t.property.name}`}return t.name.name}function yu(e){return e.reduce((t,n)=>t+n.businessMemberCount,0)}function $o(e){return e.length===0?0:Math.max(1,yu(e))}function Ps(e){let t=ot(e.containerPath.node.loc),n=bu(e.source,e.containerPath.node.start,e.containerPath.node.end),r=Qe(e.input,e.containerKind,e.sourceKind,t),o=Qe(e.input,e.containerKind,"placement-unit",t);return{placementKey:r,placementUnitKey:o,version:e.input.version,containerKey:r,independent:$o(e.members)<=1,memberCount:$o(e.members),sourceRange:t,sourceHash:n,relation:"append",containerSourceRange:t,containerSourceHash:n,anchorSourceRange:null,anchorSourceHash:null,members:e.members}}function dx(e){let t=ot(e.expression.node.loc),n=bu(e.source,e.expression.node.start,e.expression.node.end),r=Qe(e.input,"virtual-route-root","atomic-expression",t),o=Qe(e.input,"virtual-route-root","placement-unit",t);return{placementKey:r,placementUnitKey:o,version:e.input.version,containerKey:r,independent:!0,memberCount:1,sourceRange:t,sourceHash:n,relation:"append",containerSourceRange:t,containerSourceHash:n,anchorSourceRange:null,anchorSourceHash:null,members:[{memberKey:Qe(e.input,"virtual-route-root","atomic-member",t),kind:"atomic-expression",nodeType:e.expression.node.type,sourceRange:t,businessMemberCount:1,parentSourceRange:null,children:[],isBusinessMember:!0,label:e.expression.node.type}]}}function Bo(e,t,n,r){let o=n.containerSourceRange??n.sourceRange,i=fx(e,n,o),s=as(i),a={status:"supported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,defaultExportName:Su(t),container:{kind:r.kind,placementKey:n.placementKey,placementUnitKey:n.placementUnitKey,version:e.version,isEmptyPage:n.memberCount===0,sourceKind:r.sourceKind,sourceRange:o,sourceHash:n.sourceHash},placements:i,diagnostics:[],placementByKey:new Map,unitByKey:new Map,placementsByUnitKey:new Map,placementUnitByKey:new Map};return Object.defineProperties(a,{placementByKey:{value:s.placementByKey,enumerable:!1},unitByKey:{value:s.unitByKey,enumerable:!1},placementsByUnitKey:{value:s.placementsByUnitKey,enumerable:!1},placementUnitByKey:{value:s.sourcePlacementByUnitKey,enumerable:!1}}),{ok:!0,projection:a}}function fx(e,t,n){if(t.members.length===0)return[t];let r=[],o=(l,u,d,p,m,g,b=n)=>({...t,placementKey:u,placementUnitKey:d,containerKey:t.placementKey,independent:$o(g)<=1,memberCount:$o(g),sourceRange:p,sourceHash:p?As(e.source,p):null,relation:l,containerSourceRange:b,containerSourceHash:b?As(e.source,b):null,anchorSourceRange:m,anchorSourceHash:m?As(e.source,m):null,members:g}),i=t.placementKey,s=t.members.map(l=>Qe(e,i,"placement-unit",l.sourceRange)),a=s[0]??t.placementUnitKey,c=s.at(-1)??t.placementUnitKey;r.push(o("prepend",Qe(e,i,"prepend",n),a,n,null,[]));for(let l of t.members){let u=l.parentSourceRange??n,d=Qe(e,i,"placement-unit",l.sourceRange);r.push(o("before",Qe(e,d,"before",l.sourceRange),d,l.sourceRange,l.sourceRange,[l],u)),r.push(o("after",Qe(e,d,"after",l.sourceRange),d,l.sourceRange,l.sourceRange,[l],u))}return r.push(o("append",i,c,n,null,[])),r}function fu(e,t,n){let r=Qe(e,n,"empty-container",void 0),o=Qe(e,n,"empty-unit",void 0),i={placementKey:r,placementUnitKey:o,version:e.version,containerKey:r,independent:!0,memberCount:0,sourceRange:null,sourceHash:null,relation:"append",containerSourceRange:null,containerSourceHash:null,anchorSourceRange:null,anchorSourceHash:null,members:[]},s=as([i]),a={status:"supported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,defaultExportName:Su(t),container:{kind:n,placementKey:r,placementUnitKey:o,version:e.version,isEmptyPage:!0,sourceKind:n==="starter-placeholder"?"starter-placeholder":"jsx-fragment",sourceRange:null,sourceHash:null},placements:[i],diagnostics:[],placementByKey:new Map,unitByKey:new Map,placementsByUnitKey:new Map,placementUnitByKey:new Map};return Object.defineProperties(a,{placementByKey:{value:s.placementByKey,enumerable:!1},unitByKey:{value:s.unitByKey,enumerable:!1},placementsByUnitKey:{value:s.placementsByUnitKey,enumerable:!1},placementUnitByKey:{value:s.sourcePlacementByUnitKey,enumerable:!1}}),{ok:!0,projection:a}}function yt(e,t){return{ok:!1,projection:{status:"unsupported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,diagnostics:t}}}function $e(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,details:n}}function Qe(e,t,n,r){return xu([e.route,e.entryFile,String(e.version),t,n,r?`${r.startLine}:${r.startColumn}-${r.endLine}:${r.endColumn}`:"no-range"])}function Fs(e,t,n){return xu(["member",e,String(t??-1),String(n??-1)])}function xu(e){return`pc_${Os("sha256").update(e.join("\0")).digest("hex").slice(0,24)}`}function bu(e,t,n){return t==null||n==null?null:`sha256:${Os("sha256").update(e.slice(t,n)).digest("hex")}`}function As(e,t){let n=[0];for(let i=0;i<e.length;i+=1)e.charCodeAt(i)===10&&n.push(i+1);let r=n[t.startLine-1],o=n[t.endLine-1];return r===void 0||o===void 0?null:`sha256:${Os("sha256").update(e.slice(r+t.startColumn,o+t.endColumn)).digest("hex")}`}function ot(e){return e?{startLine:e.start.line,startColumn:e.start.column,endLine:e.end.line,endColumn:e.end.column}:null}function Su(e){if(e.isFunctionDeclaration())return e.node.id?.name??null;let t=e.parentPath;return t?.isVariableDeclarator()&&t.node.id.type==="Identifier"?t.node.id.name:null}function mx(e){return e==="api-field"||e==="cms-field"||e==="i18n-message"||e==="config-entry"}var gx=160;function Eu(e,t,n,r={}){let o=Tn(e),i=[];for(let[s,a]of e.elements){let c=n.get(s),l={canUpdateText:r.canUpdateTextByKey?.get(s)??c?.canUpdateText??!1,canInsertChild:c?.canInsertChild??!1,canMove:c?.canMove??!1,canRemove:c?.canRemove??!1};i.push({key:s,tag:a.tag,label:a.tag===a.componentName?a.tag:`${a.tag} (${a.componentName})`,parentKey:a.parentKey,childKeys:[...a.childKeys],operationSummary:l,...r.dynamicDataSummaryByKey?.get(s)?{dynamicDataSummary:r.dynamicDataSummaryByKey.get(s)}:{}})}return{composition:o,routeId:e.routeId,version:e.version,rootKeys:[...e.rootKeys],entries:i}}function vu(e,t,n,r,o,i,s,a,c,l,u,d,p){let m=Tn(t),g=t.elements.get(e),b=n.nodes.get(e),C=r.get(e);if(!g||!b||!C)throw new Error(`Node not found: ${e}`);let I=wu(g.textSegments,s),w=Nu(e,t,g,C,I),P=I?xx(I):void 0,O=bx(i,I),se=g.textSegments.map(M=>({index:M.index,value:M.value,editable:Pu(M,C,s?.get(M.index)??null),source:o.get(M.index)??null})),re=Cu(g,t),N=g.childKeys.map(M=>{let j=t.elements.get(M);return j?{key:M,tag:j.tag,label:j.tag}:null}).filter(M=>M!==null),z=[];if(g.parentKey){let M=t.elements.get(g.parentKey);if(M)for(let j of M.childKeys){if(j===e)continue;let Y=t.elements.get(j);Y&&z.push({key:j,tag:Y.tag,label:Y.tag})}}return{composition:m,key:e,tag:g.tag,componentName:g.componentName,sourceFile:g.sourceFile,sourceLocator:ku(g),label:g.tag,capabilities:w,writeTarget:i,effectiveWriteTarget:O,provenanceChain:P,componentSemantic:c,contentModel:l,mediaModel:u,styleSource:d,conditional:a,...p?{dynamicData:p}:{},textSegments:se,boundaryKind:g.boundaryKind,isOpaque:g.isOpaque,ancestors:re,children:N,siblings:z}}function Iu(e,t,n,r,o,i,s,a){let c=Tn(t),l=t.elements.get(e),u=n.nodes.get(e),d=r.get(e);if(!l||!u||!d)throw new Error(`Node not found: ${e}`);let p=wu(l.textSegments,i);return{composition:c,key:e,tag:l.tag,componentName:l.componentName,sourceFile:l.sourceFile,sourceLocator:ku(l),label:l.tag,capabilities:Nu(e,t,l,d,p),provenanceChain:p?{editMode:p.editMode,diagnostics:p.diagnostics.map(m=>({code:m.code,message:m.message}))}:void 0,...s?{dynamicData:s}:{},...a?{properties:a}:{},textSegments:l.textSegments.map(m=>{let g=o.get(m.index);return{index:m.index,editable:Pu(m,d,i?.get(m.index)??null),source:g?{kind:g.kind}:null}}),boundaryKind:l.boundaryKind,isOpaque:l.isOpaque,ancestors:Cu(l,t)}}function ku(e){return{sourceFile:e.sourceFile,componentName:e.componentName,openingElementRange:hx(e.sourceRange),structuralPath:e.identity.structuralPath,...yx(e.textSegments)}}function Cu(e,t){let n=[],r=e.parentKey;for(;r;){let o=t.elements.get(r);if(!o)break;n.push({key:r,tag:o.tag,label:o.tag}),r=o.parentKey}return n.reverse(),n}function hx(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}function yx(e){let t=e.map(n=>n.value.trim()).filter(Boolean).join(" ").replace(/\s+/g," ").trim();return t?{textPreview:t.slice(0,gx)}:{}}function Ru(e,t){let n=t.find(r=>r.editable&&r.source&&r.source.kind!=="literal");return n?.source?{kind:"value-binding",file:n.source.file,componentName:e.componentName,isProxy:n.source.file!==e.file}:{kind:"jsx-node",file:e.file,componentName:e.componentName,isProxy:e.isProxy}}function wu(e,t){if(!t)return null;for(let n of e){let r=t.get(n.index);if(r)return r}return null}function Nu(e,t,n,r,o){let i=n.identity.structuralPath.includes("#repeat:"),s=t.regions.some(u=>u.kind==="repeat-region"&&u.childKeys.includes(e)),a=o?.diagnostics.find(u=>u.code==="missing-adapter"||u.code==="external-source-readonly")?.code,c=r.canUpdateText?{mode:o?.editMode??"direct",reasonCode:a??(o?.editMode==="upstream"?"component-prop":o?.finalSource?.kind==="repeat-template"?"repeat-item-data":void 0)}:{mode:"unsupported",reasonCode:"capability-denied"},l=r.canUpdateText&&Au(c.mode);return{...r,canUpdateText:l,editModes:{updateText:c,insertChild:r.canInsertChild?{mode:"direct",reasonCode:i||s?"repeat-template":void 0}:{mode:"unsupported",reasonCode:"capability-denied"},move:r.canMove?{mode:s?"proxy":"direct",reasonCode:s?"repeat-collection":void 0}:{mode:"unsupported",reasonCode:"capability-denied"},remove:r.canRemove?{mode:s?"proxy":"direct",reasonCode:s?"repeat-collection":void 0}:{mode:"unsupported",reasonCode:"capability-denied"}}}}function Pu(e,t,n){return!e.editable||!t.canUpdateText?!1:n?Au(n.editMode):!0}function Au(e){return e==="direct"||e==="proxy"||e==="upstream"}function xx(e){return{finalSource:e.finalSource?{kind:e.finalSource.kind,file:e.finalSource.file,displayPath:e.finalSource.displayPath,externalSource:e.finalSource.externalSource}:null,chain:e.chain.map(t=>({kind:t.kind,file:t.file,displayName:t.displayName,canEditHere:t.canEditHere})),confidence:e.confidence,editMode:e.editMode,diagnostics:e.diagnostics.map(t=>({code:t.code,message:t.message}))}}function bx(e,t){return t?.finalSource?t.finalSource.kind==="jsx-literal"?{kind:"jsx-node",file:e.file,isProxy:e.isProxy}:t.finalSource.kind==="config-entry"&&t.finalSource.locator?{kind:"value-path",file:t.finalSource.file,isProxy:t.finalSource.file!==e.file,displayPath:t.finalSource.displayPath}:mx(t.finalSource.kind)?{kind:"external-entry",file:t.finalSource.file,isProxy:!1,displayPath:t.finalSource.displayPath,sourceType:t.finalSource.externalSource?.sourceType,sourceId:t.finalSource.externalSource?.sourceId}:{kind:"value-path",file:t.finalSource.file,isProxy:t.finalSource.file!==e.file,displayPath:t.finalSource.displayPath}:{kind:e.kind==="route-export"?"route-export":"jsx-node",file:e.file,isProxy:e.isProxy}}function Tu(e){let{key:t,element:n,graph:r,provenances:o}=e,i=Ex(t,n,r),s=i?.tag??(ln(n.tag)?n.tag:n.componentName),a=i?.identity.key??_u(n,r)??t,c=kx(i),l=Cx(t,n,r,o,i),u=Sx(t,n,r,o,a);return{componentName:s,instanceKey:a,templateOwner:Ix(i??n,s),...c.length>0?{variantKeys:c}:{},...l.length>0?{slotKeys:l}:{},editableStrategy:u,impactScope:Rx(u),alternativeStrategies:wx(u)}}function Sx(e,t,n,r,o){for(let i of r.values())if(i?.editMode==="upstream")return"upstream";return Ms(e,n)?"instance":!ln(t.tag)&&t.sourceFile!==n.routeId&&o!==e?"template":"instance"}function _u(e,t){if(ln(e.tag))return e.identity.key;let n=[...t.elements.values()].filter(r=>r.importedFrom===e.sourceFile&&vx(r,e.componentName));return n.length!==1?null:n[0].identity.key}function Ex(e,t,n){if(ln(t.tag))return t;let r=Ms(e,n);if(r)return r;let o=_u(t,n);return o?n.elements.get(o)??null:null}function vx(e,t){return e.exportName===t||e.tag===t||e.exportName==="default"}function Ix(e,t){return ln(e.tag)&&e.importedFrom?`${e.importedFrom}#${t}`:`${e.sourceFile}#${t}`}function kx(e){if(!e?.attributes)return[];let t=new Set(["variant","size","tone"]);return e.attributes.filter(n=>t.has(n.name)).map(n=>n.name)}function Cx(e,t,n,r,o){let i=new Set,s=Ms(e,n);s&&o?.identity.key===s.identity.key&&i.add("children");for(let a of r.values()){let c=a?.chain.find(u=>u.kind==="component-prop");if(!c)continue;let l=c.displayName.split(".").pop();l&&i.add(l)}return i.size===0&&ln(t.tag)&&t.childKeys.length>0&&i.add("children"),[...i]}function Ms(e,t){let n=t.elements.get(e)?.parentKey??null;for(;n;){let r=t.elements.get(n);if(!r)break;if(ln(r.tag))return r;n=r.parentKey}return null}function ln(e){return/^[A-Z]/.test(e)}function Rx(e){switch(e){case"template":return"component-template";case"upstream":return"upstream-source";default:return"current-instance"}}function wx(e){switch(e){case"template":return["instance"];case"upstream":return["template"];default:return["template"]}}var Nx=new Set(["markdown","body","content","value","document"]),Fu=[];function Mu(e){if(!(!Tx(e.tag)||!e.attributes))for(let t of e.attributes){if(!Nx.has(t.name))continue;if(Ax(t))return{kind:"markdown",field:t.name,schema:"markdown",valuePath:t.source?.expression,operationBoundary:Fu};let n=Px(t.resolvedValue);if(n==="prosemirror-doc"||n==="node-array")return{kind:"rich-text-json",field:t.name,valuePath:t.source?.expression,schema:n,operationBoundary:Fu};if(n==="unsupported-json-tree")return{kind:"rich-text-json",field:t.name,valuePath:t.source?.expression,schema:"unsupported-json-tree",operationBoundary:[],diagnostics:[{code:"unsupported-schema",field:t.name,message:'Only top-level node arrays and { type: "doc", content: [] } rich-text JSON are editable in stage D'}]}}}function Px(e){if(e){if(Array.isArray(e)&&e.every(t=>Ou(t)))return"node-array";if(Ou(e)){if(e.type==="doc"&&Array.isArray(e.content))return"prosemirror-doc";if(Array.isArray(e.content)||Array.isArray(e.children))return"unsupported-json-tree"}}}function Ou(e){return!Array.isArray(e)&&typeof e=="object"&&e!==null}function Ax(e){return e.name==="markdown"}function Tx(e){return/^[A-Z]/.test(e)}var _x=["src","alt","poster","caption","width","height"];function Du(e){let t=e.attributes?.filter(s=>_x.includes(s.name))??[];if(t.length===0)return;let n=t.map(s=>s.name),r=t.filter(s=>s.resolution&&s.resolution.status!=="resolved"),o=Object.fromEntries(t.filter(s=>s.source?.expression).map(s=>[s.name,s.source.expression])),i=Ox(t.filter(s=>!s.resolution||s.resolution.status==="resolved").map(s=>s.value));return{kind:Fx(e.tag,n),sourceType:i,fields:n,editableFields:[],operationBoundary:[],...Object.keys(o).length>0?{valuePaths:o}:{},...r.length>0?{diagnostics:r.map(s=>({code:"unsupported-field",field:s.name,message:`Media attribute '${s.name}' has an unresolved source value`}))}:{}}}function Fx(e,t){return e==="img"?"image":e==="video"||t.includes("poster")?"video":"media"}function Ox(e){return e.some(t=>t.startsWith("cms:"))?"cms-media-field":e.some(t=>/^(\.?\/|\/)/.test(t))?"local-file-reference":"asset-id"}var Ds=["set-class-name-source","apply-style-draft"];function Lu(e){let t=e.attributes?.find(n=>n.name==="className");if(!t)return{kind:"class-name-source",className:"",sourceKind:"missing",editable:!0,operationBoundary:Ds,diagnostics:[{code:"missing-class-name",message:"No className attribute is present on this element"}]};if(t.resolution&&t.resolution.status!=="resolved")return{kind:"class-name-source",className:"",sourceKind:"dynamic-expression",editable:!1,operationBoundary:[],sourcePath:t.source?.expression,diagnostics:[{code:"dynamic-binding",message:"Style binding is unresolved and cannot be edited"}]};if(t.source?.expression){let n=t.source.expression,r=typeof t.resolvedValue=="string"?t.resolvedValue:t.value!==n?t.value:void 0;return typeof r!="string"?{kind:"class-name-source",className:"",sourceKind:"dynamic-expression",editable:!1,operationBoundary:[],sourcePath:n,diagnostics:[{code:t.resolvedValue===void 0?"dynamic-binding":"non-string-binding",message:t.resolvedValue===void 0?"Style binding is dynamic and cannot be edited":"Style binding must resolve to a static string before it can be edited"}]}:{kind:"class-name-source",className:r,sourceKind:"static-expression",editable:!0,operationBoundary:Ds,sourcePath:n}}return{kind:"class-name-source",className:t.value,sourceKind:t.resolvedValue===void 0?"static-attribute":"static-expression",editable:!0,operationBoundary:Ds}}import{createHash as Mx}from"node:crypto";var pr=class{constructor(t){this.original=new Map,this.files=new Map,this.versions=new Map;for(let n of t)this.original.set(n.path,n.content),this.files.set(n.path,n.content),this.versions.set(n.path,n.version??1)}async readFile(t){let n=this.files.get(t);if(n===void 0)throw new Error(`Snapshot file not found: ${t}`);return n}async readFileBytes(t){return Buffer.from(await this.readFile(t),"utf8")}async getFileInfo(t){let n=this.files.get(t);return n===void 0?null:{path:t,sizeBytes:Buffer.byteLength(n,"utf8")}}async writeFile(t,n){this.files.set(t,n)}async createExclusive(t,n){if(this.files.has(t))throw Object.assign(new Error(`Snapshot file already exists: ${t}`),{code:"EEXIST"});this.files.set(t,n)}async deleteFile(t){this.files.delete(t)}async exists(t){return this.files.has(t)}async listFiles(t={}){let n=t.roots??[],r=[...this.files.keys()].filter(a=>n.length===0?!0:n.some(c=>a===c||a.startsWith(`${c}/`))),o=[],i=new Set,s=0;for(let a of r.sort()){let c=Buffer.byteLength(this.files.get(a)??"","utf8"),l=a.split("/").length;if(t.maxDepth!==void 0&&l>t.maxDepth){i.add("max-depth");continue}if(t.maxFiles!==void 0&&o.length>=t.maxFiles){i.add("max-files");break}if(t.maxTotalBytes!==void 0&&s+c>t.maxTotalBytes){i.add("max-total-bytes");break}o.push({path:a,sizeBytes:c}),s+=c}return i.size>0?{files:o,truncated:{reasons:[...i]}}:{files:o}}getVersion(t){return this.versions.get(t)??0}bumpVersion(t){let n=this.getVersion(t)+1;return this.versions.set(t,n),n}getChangedFiles(){let t=new Set([...this.original.keys(),...this.files.keys()]),n=[];for(let r of[...t].sort()){let o=this.original.get(r),i=this.files.get(r);o!==i&&n.push({path:r,before:o,after:i})}return n}};function pe(e){return`sha256:${Mx("sha256").update(e).digest("hex")}`}function Ls(e){let t=e.route.graph.elements.get(e.key);if(!t)return{key:e.key,composition:e.route.composition,filePath:"",componentName:"",sourceKind:"missing",attrRaw:null,valueRaw:null,attrRange:null,openingElementRange:{start:0,end:0},version:{documentVersion:e.route.graph.version,contentHash:pe(e.route.source)},diagnostics:[{code:"source-locator-warning",message:`Key not found: ${e.key}`}]};let n=Dx(e.route.source,t);if(!n)return{key:e.key,composition:e.route.composition,filePath:t.sourceFile,componentName:t.componentName,sourceKind:"missing",attrRaw:null,valueRaw:null,attrRange:null,openingElementRange:{start:0,end:0},version:{documentVersion:e.route.graph.version,contentHash:pe(e.route.source)},diagnostics:[{code:"source-locator-warning",message:`Unable to locate JSX element for key ${t.identity.key}`}]};let r=n.openingElement,o=r.attributes.find(c=>c.type==="JSXAttribute"&&c.name.type==="JSXIdentifier"&&c.name.name==="className"),i={key:e.key,composition:e.route.composition,filePath:t.sourceFile,componentName:t.componentName,openingElementRange:ju(r),version:{documentVersion:e.route.graph.version,contentHash:pe(e.route.source)}};if(!o)return{...i,sourceKind:"missing",attrRaw:null,valueRaw:null,attrRange:null,diagnostics:[{code:"missing-class-name",message:"No className attribute is present on this element."}]};let s=o.value,a=s?.type==="StringLiteral"?"stringLiteral":"expression";return{...i,sourceKind:a,attrRaw:Bu(e.route.source,o),valueRaw:s?Bu(e.route.source,s):null,attrRange:ju(o),diagnostics:[]}}function $u(e){let{source:t,oldAttrRange:n,openingElementRange:r,newAttrRaw:o}=e;if(n){let a=n.start>0&&/\s/.test(t[n.start-1]??"")?n.start-1:n.start,c=o?`${a<n.start?" ":""}${o}`:"";return t.slice(0,a)+c+t.slice(n.end)}if(!o)return t;let i=r.end,s=t.slice(Math.max(0,i-2),i)==="/>"?i-2:i-1;return t.slice(0,s)+` ${o}`+t.slice(s)}function Dx(e,t){let n=gt({source:e,profile:on({filePath:t.sourceFile,source:e})});if(!n.ok)return null;let r=ie(n.ast,{kind:"jsx-node",strategy:"structural-path",file:t.identity.file,component:t.identity.component,structuralPath:t.identity.structuralPath,expectedRange:Lx(t.sourceRange)});return!r.ok||r.match.node.type!=="JSXElement"?null:r.match.node}function Vu(e){let t=gt({source:`const __v = <div ${e} />;`,profile:"tsx-module"});if(!t.ok)return!1;let n=t.ast.program.body[0],o=(n?.type==="VariableDeclaration"?n.declarations[0]:null)?.init;if(o?.type!=="JSXElement")return!1;let i=o.openingElement.attributes;return i.length===1&&i[0]?.type==="JSXAttribute"&&i[0].name.type==="JSXIdentifier"&&i[0].name.name==="className"}function Bu(e,t){return t.start==null||t.end==null?"":e.slice(t.start,t.end)}function ju(e){if(e.start==null||e.end==null)throw new Error("AST node does not include offsets.");return{start:e.start,end:e.end}}function Lx(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}import*as na from"@babel/parser";import Js from"@babel/traverse";import*as S from"@babel/types";import*as Pt from"node:path";import*as zu from"@babel/parser";import $s from"@babel/traverse";import*as Un from"@babel/types";import*as G from"@babel/types";function Ko(e,t=[]){if(e.isIdentifier()){let n=e.scope.getBinding(e.node.name);return n?Vo(n,t):null}if(e.isMemberExpression()){let n=Kx(e.node),r=Bx(e.node);if(!n||r===null)return null;let o=e.scope.getBinding(n);return o?Vo(o,[...r,...t]):null}return e.isAwaitExpression()||js(e.node)?Xt(Xx(e.node),t,"awaited or fetched expression"):null}function Bx(e){let t=[],n=e;for(;G.isMemberExpression(n);){if(n.computed)if(G.isNumericLiteral(n.property))t.unshift({kind:"index",index:n.property.value});else if(G.isStringLiteral(n.property))t.unshift({kind:"property",name:n.property.value});else return null;else if(G.isIdentifier(n.property))t.unshift({kind:"property",name:n.property.name});else return null;n=n.object}return G.isIdentifier(n)?t:null}function Vo(e,t=[]){let n=jx(e,t);if(n)return n;let r=$x(e,t);if(r)return r;let o=Vx(e,t);return o||null}function gr(e){return e?.kind==="api-source"}function jx(e,t){if(e.path.isVariableDeclarator()&&G.isIdentifier(e.path.node.id)){let s=e.path.get("init");if(s?.isCallExpression()&&Bs(s.node)&&t[0]?.kind==="property"&&t[0].name==="data")return Xt(e.identifier.name,t,"query hook result.data binding")}if(e.path.isVariableDeclarator()&&G.isObjectPattern(e.path.node.id)){let s=e.path.node.id.properties.find(c=>G.isObjectProperty(c)&&Ju(c)==="data"&&mr(c.value,e.identifier.name)),a=e.path.get("init");if(s&&a?.isCallExpression()&&Bs(a.node))return Xt(e.identifier.name,t,"query hook data binding")}let n=Ux(e);if(!n||Ju(n.node)!=="data")return null;let o=n.findParent(s=>s.isVariableDeclarator());if(!o?.isVariableDeclarator())return null;let i=o.get("init");return!i?.isCallExpression()||!Bs(i.node)?null:Xt(e.identifier.name,t,"query hook data binding")}function $x(e,t){if(e.path.isVariableDeclarator()&&G.isArrayPattern(e.path.node.id)){let a=e.path.get("init");if(!a?.isCallExpression()||!Ku(a.node))return null;let[c,l]=e.path.node.id.elements;return!G.isIdentifier(c)||c.name!==e.identifier.name||!G.isIdentifier(l)?null:Uu(e,l.name)?Xt(e.identifier.name,t,"state setter is updated by API data"):null}if(!e.path.isIdentifier())return null;let n=e.path.parentPath;if(!n?.isArrayPattern())return null;let r=n.parentPath;if(!r?.isVariableDeclarator())return null;let o=r.get("init");if(!o?.isCallExpression()||!Ku(o.node)||n.node.elements.findIndex(a=>a===e.path.node)!==0)return null;let s=n.node.elements[1];return G.isIdentifier(s)&&Uu(e,s.name)?Xt(e.identifier.name,t,"state setter is updated by API data"):null}function Vx(e,t){let n=e.path.isVariableDeclarator()?e.path:e.path.findParent(o=>o.isVariableDeclarator());if(!n?.isVariableDeclarator())return null;let r=n.get("init");return r?.isExpression()?r.isAwaitExpression()?Xt(e.identifier.name,t,"awaited binding result"):js(r.node)?Xt(e.identifier.name,t,"fetch-backed binding result"):null:null}function Ux(e){if(!e.path.isIdentifier())return null;let t=e.path.parentPath;return t?.isObjectProperty()?t:t?.isAssignmentPattern()&&t.parentPath?.isObjectProperty()?t.parentPath:null}function mr(e,t){return G.isIdentifier(e)?e.name===t:G.isAssignmentPattern(e)?mr(e.left,t):G.isObjectPattern(e)?e.properties.some(n=>G.isObjectProperty(n)?mr(n.value,t):mr(n.argument,t)):G.isArrayPattern(e)?e.elements.some(n=>!!n&&mr(G.isRestElement(n)?n.argument:n,t)):!1}function Uu(e,t){let n=!1,r=!1;return e.scope.path.traverse({CallExpression(i){js(i.node)&&(n=!0),(Jx(i.node.callee,t)||i.node.arguments.some(s=>G.isIdentifier(s)&&s.name===t))&&(r=!0)}}),n&&r}function Bs(e){let t=Jo(e.callee);return t==="useQuery"||t==="useSWR"||t==="useSuspenseQuery"}function Ku(e){return Jo(e.callee)==="useState"}function js(e){return Uo(e,t=>G.isCallExpression(t)&&Jo(t.callee)==="fetch")}function Kx(e){let t=e;for(;G.isMemberExpression(t);)t=t.object;return G.isIdentifier(t)?t.name:null}function Ju(e){return e.computed?null:G.isIdentifier(e.key)?e.key.name:G.isStringLiteral(e.key)?e.key.value:null}function Jo(e){return G.isIdentifier(e)?e.name:G.isMemberExpression(e)&&G.isIdentifier(e.property)?e.property.name:null}function Jx(e,t){return Uo(e,n=>G.isIdentifier(n)&&n.name===t)}function Uo(e,t){if(t(e))return!0;let n=G.VISITOR_KEYS[e.type];if(!n)return!1;for(let r of n){let o=e[r];if(Array.isArray(o)){for(let i of o)if(G.isNode(i)&&Uo(i,t))return!0;continue}if(G.isNode(o)&&Uo(o,t))return!0}return!1}function Xx(e){return G.isIdentifier(e)?e.name:G.isCallExpression(e)?Jo(e.callee)??"api":G.isAwaitExpression(e)?"awaited-api":"api"}function Xt(e,t,n){return{kind:"api-source",readonly:!0,sourceId:e,displayPath:zx(e,t),reason:n}}function zx(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}var Wu=typeof $s=="function"?$s:$s.default;function Hu(e,t){let n=Yu(e);if(!n)return{allowed:!0};let r=!1;return Wu(n,{CallExpression(o){if(!Zu(o.node,t.sourceRange)||!Wx(o.node))return;let i=o.get("callee");if(!i.isMemberExpression())return;let s=i.get("object");Array.isArray(s)||!s.isExpression()||gr(Ko(s))&&(r=!0,o.stop())}}),r?{allowed:!1,reason:"Cannot add data-backed items to a dynamic API list"}:{allowed:!0}}function Gu(e,t){let n=Yu(e);if(!n)return{allowed:!0};let r=!1;return Wu(n,{JSXExpressionContainer(o){Zu(o.node,t.sourceRange)&&(Un.isJSXEmptyExpression(o.node.expression)||(r=!0,o.stop()))}}),r?{allowed:!1,reason:"Cannot move subtree across files because it depends on local binding expressions"}:{allowed:!0}}function Yu(e){try{return zu.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Wx(e){let t=e.callee;return Un.isMemberExpression(t)&&Un.isIdentifier(t.property)&&t.property.name==="map"}function Zu(e,t){let n=e.loc;return n?Xu({line:n.start.line,column:n.start.column},{line:t.startLine,column:t.startColumn})>=0&&Xu({line:n.end.line,column:n.end.column},{line:t.endLine,column:t.endColumn})<=0:!1}function Xu(e,t){return e.line!==t.line?e.line<t.line?-1:1:e.column!==t.column?e.column<t.column?-1:1:0}import*as le from"@babel/types";function qu(e){if(e.path.isVariableDeclarator()){let n=e.path.get("init");return n?.isExpression()?{expressionPath:n}:null}if(!e.path.isIdentifier()||!e.path.parentPath?.isVariableDeclarator())return null;let t=e.path.parentPath.get("init");return t?.isExpression()?{expressionPath:t}:null}function xt(e){if(e.path.isObjectPattern()||e.path.isArrayPattern())return un(e.path.node,e.identifier.name);if(e.path.isVariableDeclarator()){let n=e.path.node.id;if(le.isObjectPattern(n)||le.isArrayPattern(n))return un(n,e.identifier.name)}if(!e.path.isIdentifier())return!1;let t=e.path.parentPath;for(;t;){if(t.isAssignmentPattern()){let n=t.get("left");if(Gx(e.path,n))return!0}if(t.isFunction()||t.isVariableDeclarator())return!1;t=t.parentPath}return!1}function un(e,t,n=!1){return le.isIdentifier(e)?e.name===t&&n:le.isObjectPattern(e)?e.properties.some(r=>le.isObjectProperty(r)?un(r.value,t,n):un(r.argument,t,n)):le.isArrayPattern(e)?e.elements.some(r=>{if(!r)return!1;let o=le.isRestElement(r)?r.argument:r;return un(o,t,n)}):le.isAssignmentPattern(e)?un(e.left,t,!0):le.isRestElement(e)?un(e.argument,t,n):!1}function Kn(e,t){if(e.path.isObjectPattern()){if(t){let r=it(e.path.node,t.base),[o,...i]=r??[];if(o?.kind==="property")return{propName:o.name,remainingPath:[...i,...t.path],hasDefault:xt(e)}}return t?{propName:t.base,remainingPath:t.path,hasDefault:xt(e)}:null}if(e.path.isVariableDeclarator()){let r=e.path.get("init");if(r?.isExpression()){let o=Qu(r),i=!1,s=o?o.initBinding&&Vs(o.initBinding)?(i=xt(o.initBinding),[...o.initPathPrefix]):o.initBinding?(()=>{let c=Kn(o.initBinding,{kind:"identifier",expression:o.initBinding.identifier.name,base:o.initBinding.identifier.name,path:[]});return i=c?.hasDefault??!1,c?[{kind:"property",name:c.propName},...c.remainingPath,...o.initPathPrefix]:null})():null:null,a=it(e.path.node.id,e.identifier.name);if(s&&a){let c=[...s,...a],[l,...u]=c;return!l||l.kind!=="property"?null:{propName:l.name,remainingPath:[...u,...t?.path??[]],hasDefault:i||xt(e)}}}}let n=qx(e);if(n){let r=Hx(n,e);if(r){let[s,...a]=r.path;return!s||s.kind!=="property"?null:{propName:s.name,remainingPath:[...a,...t?.path??[]],hasDefault:r.hasDefault||xt(e)}}if(n.findParent(s=>s.isVariableDeclarator()))return null;let o=Yx(e);if(o){let[s,...a]=o;return!s||s.kind!=="property"?null:{propName:s.name,remainingPath:[...a,...t?.path??[]],hasDefault:xt(e)}}let i=hr(n.node);return i?{propName:i,remainingPath:t?.path??[],hasDefault:xt(e)}:null}if(Vs(e)){let[r,...o]=t?.path??[];return!r||r.kind!=="property"?null:{propName:r.name,remainingPath:o,hasDefault:xt(e)}}return null}function Hx(e,t){let n=e.findParent(u=>u.isVariableDeclarator());if(!n?.isVariableDeclarator())return null;let r=n.get("init");if(!r?.isExpression())return null;let o=Qu(r);if(!o)return null;let{initBinding:i,initPathPrefix:s}=o;if(!i)return null;let a=!1,c=Vs(i)?(a=xt(i),[...s]):(()=>{let u=Kn(i,{kind:"identifier",expression:i.identifier.name,base:i.identifier.name,path:[]});return a=u?.hasDefault??!1,u?[{kind:"property",name:u.propName},...u.remainingPath,...s]:null})();if(!c)return null;let l=it(n.node.id,t.identifier.name);return l?{path:[...c,...l],hasDefault:a||xt(t)}:null}function Qu(e){if(e.isIdentifier())return{initBinding:e.scope.getBinding(e.node.name),initPathPrefix:[]};if(!e.isMemberExpression())return null;let t=Qx(e.node);return t?{initBinding:e.scope.getBinding(t.base),initPathPrefix:t.path}:null}function Vs(e){return e.path.isIdentifier()&&e.path.key===0&&Array.isArray(e.path.container)&&e.path.parentPath?.isFunction()===!0}function Gx(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentPath}return!1}function Yx(e){let t=e.identifier.name,n=e.path.getFunctionParent();if(!n)return null;let r=n.get("params"),o=Array.isArray(r)?r:[r];for(let i of o){let a=it(i.node,t);if(a)return a}return null}function ed(e,t,n){if(e.path.isVariableDeclarator()){let a=e.path.get("id");if(!Array.isArray(a)&&(a.isObjectPattern()||a.isArrayPattern())){let c=Xo(a,e.identifier.name);if(c&&(!n||c.propName===n))return{propName:c.propName,componentName:t,expressionPath:c.expressionPath,displayPath:`${t}.${c.propName}.default`}}}if(e.path.isObjectPattern())for(let a of e.path.get("properties")){if(!a.isObjectProperty())continue;let c=hr(a.node);if(!c||n&&c!==n)continue;let l=a.get("value");if(!l.isAssignmentPattern())continue;let u=l.get("right");if(u.isExpression())return{propName:c,componentName:t,expressionPath:u,displayPath:`${t}.${c}.default`}}let r=Zx(e);if(!r)return null;let o=r.parentPath;if(!o?.isObjectProperty())return null;let i=hr(o.node);if(!i||n&&i!==n)return null;let s=r.get("right");return s.isExpression()?{propName:i,componentName:t,expressionPath:s,displayPath:`${t}.${i}.default`}:null}function Xo(e,t){if(e.isObjectPattern()){for(let n of e.get("properties"))if(n.isObjectProperty()){let r=hr(n.node),o=n.get("value");if(o.isAssignmentPattern()){let i=o.get("left"),s=o.get("right");if(r&&!Array.isArray(i)&&it(i.node,t)&&!Array.isArray(s)&&s.isExpression())return{propName:r,expressionPath:s}}if(!Array.isArray(o)&&(o.isObjectPattern()||o.isArrayPattern())){let i=Xo(o,t);if(i)return i}}else if(n.isRestElement()){let r=n.get("argument");if(!Array.isArray(r)&&(r.isObjectPattern()||r.isArrayPattern())){let o=Xo(r,t);if(o)return o}}}if(e.isArrayPattern())for(let n of e.get("elements")){if(!n)continue;let r=n.isRestElement()&&!Array.isArray(n.get("argument"))?n.get("argument"):n;if(!Array.isArray(r)&&(r.isObjectPattern()||r.isArrayPattern())){let o=Xo(r,t);if(o)return o}}return null}function it(e,t,n=[]){if(le.isIdentifier(e))return e.name===t?n:null;if(le.isObjectPattern(e)){for(let r of e.properties)if(le.isObjectProperty(r)){let o=hr(r);if(!o)continue;let i=it(r.value,t,[...n,{kind:"property",name:o}]);if(i)return i}else if(le.isRestElement(r)){let o=it(r.argument,t,n);if(o)return o}}if(le.isArrayPattern(e))for(let r=0;r<e.elements.length;r+=1){let o=e.elements[r];if(!o)continue;let i=le.isRestElement(o)?o.argument:o,s=it(i,t,[...n,{kind:"index",index:r}]);if(s)return s}return le.isAssignmentPattern(e)?it(e.left,t,n):null}function Zx(e){if(!e.path.isIdentifier())return null;let t=e.path.parentPath;return t?.isAssignmentPattern()&&t.node.left===e.path.node?t:null}function qx(e){if(!e.path.isIdentifier())return null;let t=e.path.parentPath;if(t?.isObjectProperty()&&t.parentPath?.isObjectPattern())return t;let n=t?.isAssignmentPattern()?t.parentPath:null;return n?.isObjectProperty()&&n.parentPath?.isObjectPattern()?n:null}function hr(e){return e.computed?null:le.isIdentifier(e.key)?e.key.name:le.isStringLiteral(e.key)?e.key.value:null}function Qx(e){let t=[],n=e;for(;le.isMemberExpression(n);){if(n.computed)if(le.isNumericLiteral(n.property))t.unshift({kind:"index",index:n.property.value});else if(le.isStringLiteral(n.property))t.unshift({kind:"property",name:n.property.value});else return null;else if(le.isIdentifier(n.property))t.unshift({kind:"property",name:n.property.name});else return null;n=n.object}return le.isIdentifier(n)?{base:n.name,path:t}:null}import{SiteEditSetPropsParamsSchema as ob}from"@vcp-dev/contracts";import*as bt from"@babel/types";import{SiteEditSetPropsParamsSchema as eb}from"@vcp-dev/contracts";function td(e){let t=e.changes??(e.change?[e.change]:[]);if(!eb.safeParse({kind:"set-props",scope:"selection",changes:t}).success)return yr("invalid-change","Repeat property changes are invalid");if(t.length!==1||t[0].name!==e.target.propertyName)return yr("target-mismatch","A repeat property plan must contain exactly one change for its target property");let r=t[0];if(r.operation==="remove"&&e.target.propertyState==="missing")return{ok:!0,steps:[]};let o=be(e.source,"value");if(!o.ok)return yr("invalid-target","Repeat property source could not be parsed");let i=[{type:"set-property-binding",order:0,file:e.target.templateFile,locator:e.target.targetElementLocator,name:r.name,object:e.target.callbackItemName,property:r.name}];for(let[s,a]of e.target.parentObjectLocators.entries()){let c=ie(o.ast,a);if(!c.ok||!c.match.path.isObjectExpression())return yr("unsupported-object",`Repeat item ${s} is not a writable object expression`);let l=s===e.target.sourceItemIndex?tb(r):nb(c.match.path.node,r.name);if(!l)return yr("unsupported-property-value",`Repeat item ${s} has an unsupported value for '${r.name}'`);i.push({type:"upsert-object-property",order:i.length,file:e.target.sourceFile,locator:a,name:r.name,value:l})}return{ok:!0,steps:i}}function tb(e){return e.operation==="set"?{kind:"value",value:e.value}:{kind:"undefined"}}function nb(e,t){let n=e.properties.filter(i=>bt.isObjectProperty(i)&&rb(i.key)===t);if(n.length>1)return null;let r=n[0];if(!r)return{kind:"undefined"};if(!bt.isExpression(r.value))return null;let o=mt(r.value);return o.status==="undefined"?{kind:"undefined"}:o.status!=="resolved"?null:{kind:"value",value:o.value}}function rb(e){return bt.isIdentifier(e)?e.name:bt.isStringLiteral(e)?e.value:bt.isNumericLiteral(e)?String(e.value):null}function yr(e,t){return{ok:!1,errorCode:e,reason:t}}function nd(e){if(e.change.name!=="className"&&e.change.name!=="class")return xr("unsupported-owner",`No specialized property owner is available for '${e.change.name}'`);let t=e.classNameSource;if(!t||t.filePath!==e.node.file)return xr("owner-source-unavailable","className source details are unavailable for the selected node");if(e.change.name==="class"&&t.sourceKind==="missing")return xr("owner-source-unavailable","The class alias requires an existing className source");if(t.sourceKind==="expression")return xr("owner-source-dynamic","Dynamic className expressions are not writable by the generic property owner");if(e.change.operation==="set"&&typeof e.change.value!="string")return xr("owner-value-invalid","The className owner accepts only string values");if(e.change.operation==="remove"&&t.sourceKind==="missing")return{ok:!0,steps:[]};let n=t.sourceKind==="missing",r=e.change.operation==="set"?`className=${JSON.stringify(e.change.value)}`:null,o=e.change.operation==="remove"?"remove-attribute":n?"create-attribute":"replace-static-classname";return{ok:!0,steps:[{type:"set-class-name-source",order:0,file:e.node.file,request:{kind:"set-class-name-source",key:e.node.key,filePath:e.node.file,expectedVersion:t.version,oldAttrRaw:t.attrRaw,oldAttrRange:t.attrRange,openingElementRange:t.openingElementRange,newAttrRaw:r,intent:{source:"style-panel",operation:o}}}]}}function xr(e,t){return{ok:!1,errorCode:e,reason:t}}async function id(e){let t=ob.safeParse({kind:"set-props",scope:e.scope,changes:e.changes});if(!t.success)return wt("invalid-change","Typed property changes are invalid");let n=[];for(let r of t.data.changes){let o=await ib(e,r);if(o){if(!o.ok)return wt("owner-plan-failed",o.reason);rd(n,o.steps);continue}let i=await e.getPropertyState(e.node.key,r.name,e.selectionRef);if(!i)return wt("missing-property-state",`No authoritative property state is available for '${r.name}'`);if(i.status==="blocked")return wt("readonly-property",i.diagnostic?.message??`Property '${r.name}' is not writable`);if(!lb(i,r)&&!(r.operation==="remove"&&i.status==="missing")){if(i.status==="binding"){let s=i.target;if(s?.kind!=="value-binding"||!s.target.locator||e.scope!=="selection"||r.operation!=="set")return wt("unsupported-binding",`Property '${r.name}' does not have a safe typed binding write target`);let a=s.target.locator;if(s.target.sourceKind==="repeat-template"&&e.selectionRef?.instanceIndex!==void 0){let c=cb(s.target,e.selectionRef.instanceIndex);if(!c)return wt("unsupported-binding",`Property '${r.name}' could not resolve the selected repeat item`);a=c}Us(n,{type:"update-value",order:n.length,file:s.target.file,locator:a,value:r.value});continue}if(e.selectionRef?.instanceIndex!==void 0&&e.getRepeatPropertyTarget){let s=await e.getRepeatPropertyTarget(e.node.key,r.name,e.selectionRef);if(s.ok){let a=td({source:e.getFileContent(s.sourceFile),target:s,changes:[r]});if(!a.ok)return wt("repeat-target-failed",a.reason);rd(n,a.steps);continue}if(i.status==="missing"||i.status==="direct")return wt("repeat-target-failed",s.reason)}Us(n,{type:"set-property-changes",order:n.length,file:e.node.file,locator:sb(e.node),scope:e.scope,changes:[r]})}}return n.forEach((r,o)=>{r.order=o}),ab(n)?wt("step-conflict","Property changes resolve to conflicting write steps"):{ok:!0,steps:n}}async function ib(e,t){return t.name!=="className"&&t.name!=="class"?null:nd({node:e.node,change:t,classNameSource:e.classNameSource})}function sb(e){return e.structuralPath.includes("#repeat:")||e.key.includes("::repeat-item#")?{kind:"jsx-node",strategy:"source-range",sourceRange:e.sourceRange}:{kind:"jsx-node",strategy:"structural-path",file:e.file,component:e.component,structuralPath:e.structuralPath,expectedRange:e.sourceRange}}function ab(e){let t=new Set;for(let n of e){let{order:r,...o}=n,i=`${n.file}:${n.type}:${JSON.stringify(o)}`;if(t.has(i))return!0;t.add(i)}return!1}function rd(e,t){for(let n of t)Us(e,{...n,order:e.length})}function Us(e,t){if(t.type==="set-property-changes"){let n=e.find(r=>r.type==="set-property-changes"&&r.file===t.file&&JSON.stringify(r.locator)===JSON.stringify(t.locator)&&r.scope===t.scope);if(n){n.changes.push(...t.changes);return}}e.push(t)}function cb(e,t){if(!e.locator)return null;let n=e.collectionPathMap?.length??e.collectionIndexMap?.length;if(n!==void 0&&t>=n)return null;let r=e.collectionPathMap?.[t];if(r)return od(e.locator,r);let o=e.locator.path??[],i=o.findLastIndex(a=>a.kind==="index");if(i<0)return null;let s=o.map((a,c)=>c===i&&a.kind==="index"?{kind:"index",index:e.collectionIndexMap?.[t]??t}:a);return od(e.locator,s)}function lb(e,t){if(t.operation!=="set"||e.status!=="direct")return!1;let n=e.attribute?.resolution;return n?.status==="resolved"?Ks(n.value,t.value):e.attribute?.source===null&&e.attribute.value===t.value}function Ks(e,t){if(Object.is(e,t))return!0;if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((n,r)=>Ks(n,t[r]));if(e&&t&&typeof e=="object"&&typeof t=="object"){let n=e,r=t,o=Object.keys(n);return o.length===Object.keys(r).length&&o.every(i=>Ks(n[i],r[i]))}return!1}function od(e,t){return{kind:"value",root:e.root,path:t,expectedRange:e.expectedRange}}function wt(e,t){return{ok:!1,errorCode:e,reason:t}}var Yt=typeof Js=="function"?Js:Js.default;function he(e){return e.structuralPath.includes("#repeat:")||e.isRepeatItemRoot||e.isRepeatRegion?{kind:"jsx-node",strategy:"source-range",sourceRange:e.sourceRange}:{kind:"jsx-node",strategy:"structural-path",file:e.file,component:e.component,structuralPath:e.structuralPath,expectedRange:e.sourceRange}}function Jn(e){return{file:e.file,component:e.component}}function ub(e){return e.target.kind==="node"?e.target.key:null}function db(e){return"kind"in e}function zo(e){return!db(e)}function Ys(e,t){let n=Pt.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=Pt.relative(n,r);return o=o.replace(/\\/g,"/"),o.startsWith(".")||(o=`./${o}`),o}function Xs(e,t){let n=e.getFileContent(t.file);if(!n)return;let r=Ct(n,he(t));if(r.ok)return n.slice(r.match.start,r.match.end)}function ra(e){if(!e.component)return"Component";if(e.component.exportName!=="default")return e.component.exportName;let t=e.component.source.replace(/\\/g,"/").replace(/\/$/,""),n=t.split("/").pop()||"Component",i=(n==="index"?t.split("/").slice(-2,-1)[0]||"Component":n).replace(/\.[^.]+$/,"").split(/[^A-Za-z0-9]+/).filter(Boolean);return i.length===0?"Component":i.map(s=>s.charAt(0).toUpperCase()+s.slice(1)).join("")}function et(e){try{return na.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function fb(e){if(e.isNumericLiteral())return!0;if(!e.isUnaryExpression({operator:"-"}))return!1;let t=e.get("argument");return!Array.isArray(t)&&t.isNumericLiteral()}function pb(e){let t=e.trim();if(!/^[+-]?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:[eE][+-]?\d+)?$/.test(t))return null;let n=Number(t);return Number.isFinite(n)?n:null}function de(e){return typeof e.start=="number"&&typeof e.end=="number"?{start:e.start,end:e.end}:null}function pn(e,t){let n=de(e);return!!(n&&st(t,n))}function st(e,t){return t.start>=e.start&&t.end<=e.end}function Ed(e){if(S.isJSXIdentifier(e))return/^[A-Z]/.test(e.name)?e.name:null;if(S.isJSXMemberExpression(e)){let t=e;for(;S.isJSXMemberExpression(t);)t=t.object;return t.name}return null}function mb(e,t){let n=de(e.node);if(!n)return[];let r=new Set,o=(i,s)=>{let a=s.scope.getBinding(i);if(!a||pn(a.path.node,n))return;t.scope.getBinding(i)!==a&&r.add(i)};return e.traverse({ReferencedIdentifier(i){o(i.node.name,i)},JSXOpeningElement(i){let s=Ed(i.node.name);s&&o(s,i)}}),[...r].sort()}function sd(e,t,n){let r=et(e);if(!r)return{ok:!0};let o=ie(r,he(t));if(!o.ok||!o.match.path.isJSXElement())return{ok:!0};let i=ie(r,he(n));if(!i.ok||!i.match.path.isJSXElement())return{ok:!0};if(Dd(o.match.path,i.match.path))return{ok:!1,bindingNames:[],reason:"Cannot move node out of its conditional branch"};let s=mb(o.match.path,i.match.path);return s.length>0?{ok:!1,bindingNames:s}:{ok:!0}}function ad(e,t,n){let r=zt(t,n);return r?Nt(e,r):null}function zt(e,t){let n=ie(e,he(t));return n.ok&&n.match.path.isJSXElement()?n.match.path:ta(e,t)}function Nt(e,t){let n=t.findParent(b=>b.isArrowFunctionExpression()||b.isFunctionExpression());if(!n||!n.isArrowFunctionExpression()&&!n.isFunctionExpression())return null;let r=n,o=r.parentPath;if(!o||!o.isCallExpression()&&!o.isOptionalCallExpression())return null;let i=o;if(i.node.arguments.findIndex(b=>b===r.node)!==0)return null;let a=i.get("callee");if(!a.isMemberExpression()&&!a.isOptionalMemberExpression())return null;let c=a.node,l=c.property;if(!S.isIdentifier(l)||l.name!=="map"||c.computed)return null;let u=a.get("object"),d=Yo(e,u.node),p=r.node.params.map(b=>Yo(e,b)),m=de(i.node),g=de(r.node);return!d||p.some(b=>b.length===0)||!m||!g?null:{callStart:m.start,callEnd:m.end,callbackStart:g.start,callbackEnd:g.end,collectionExpression:d,callbackParams:p,mapOperator:S.isOptionalMemberExpression(c)&&c.optional?"?.map":".map",collectionNeedsParens:aa(u.node),callbackPath:r,collectionPath:u}}function Yo(e,t){let n=de(t);return n?e.slice(n.start,n.end):""}function Wo(e,t){return!!(e&&t&&e.callStart===t.callStart&&e.callEnd===t.callEnd&&e.callbackStart===t.callbackStart&&e.callbackEnd===t.callbackEnd)}function gb(e,t){let n=de(e.node);return n?hb(t).some(r=>{let o=de(r);return r===e.node||!!(o&&o.start===n.start&&o.end===n.end)}):!1}function hb(e){let t=e.callbackPath.node.body;return S.isBlockStatement(t)?Wt(t.body):Gt(t)}function Wt(e){let t=[];for(let n of e){if(S.isReturnStatement(n)){n.argument&&t.push(...Gt(n.argument));continue}if(S.isBlockStatement(n)){t.push(...Wt(n.body));continue}if(S.isIfStatement(n)){let r=S.isBlockStatement(n.consequent)?n.consequent.body:[n.consequent];if(t.push(...Wt(r)),n.alternate){let o=S.isBlockStatement(n.alternate)?n.alternate.body:[n.alternate];t.push(...Wt(o))}continue}if(S.isSwitchStatement(n)){for(let r of n.cases)t.push(...Wt(r.consequent));continue}S.isTryStatement(n)&&(t.push(...Wt(n.block.body)),n.handler&&t.push(...Wt(n.handler.body.body)),n.finalizer&&t.push(...Wt(n.finalizer.body)))}return t}function Gt(e){return S.isJSXElement(e)?yb(e)?cd(e.children):[e]:S.isJSXFragment(e)?cd(e.children):S.isParenthesizedExpression(e)||S.isTSAsExpression(e)||S.isTSSatisfiesExpression(e)||S.isTSNonNullExpression(e)||S.isTSTypeAssertion(e)?Gt(e.expression):S.isConditionalExpression(e)?[...Gt(e.consequent),...Gt(e.alternate)]:S.isLogicalExpression(e)&&Bd(e.operator)?Gt(e.right):[]}function cd(e){return e.flatMap(t=>S.isJSXElement(t)||S.isJSXFragment(t)?Gt(t):S.isJSXExpressionContainer(t)&&(S.isJSXElement(t.expression)||S.isJSXFragment(t.expression)||S.isConditionalExpression(t.expression)||S.isLogicalExpression(t.expression))?Gt(t.expression):[])}function yb(e){let t=e.openingElement.name;return S.isJSXIdentifier(t)?t.name==="Fragment":S.isJSXMemberExpression(t)&&t.property.name==="Fragment"}function xb(e,t){return!!(e&&t&&e.callbackStart<t.callbackStart&&e.callbackEnd>t.callbackEnd)}function zs(e){return e==="Cannot edit repeat-backed child node structure with a generic node operation"}function ld(e,t,n,r={}){if(!r.preserveConditionalBoundary&&Dd(e,t))return{ok:!1,bindingNames:[],reason:"Cannot move node out of its conditional branch"};let o=de(e.node);if(!o)return{ok:!0};let i=new Set(n.callbackPath.node.params.flatMap(c=>sa(c)).map(c=>n.callbackPath.scope.getBinding(c)?.path.node).filter(Boolean)),s=new Set,a=(c,l)=>{let u=l.scope.getBinding(c);if(!u||pn(u.path.node,o)||i.has(u.path.node))return;t.scope.getBinding(c)!==u&&s.add(c)};return e.traverse({ReferencedIdentifier(c){a(c.node.name,c)},JSXOpeningElement(c){let l=Ed(c.node.name);l&&a(l,c)}}),s.size>0?{ok:!1,bindingNames:[...s].sort()}:{ok:!0}}function ud(e,t,n){let r=de(e.node);if(!r)return{ok:!0};let o=new Set(n.callbackPath.node.params.flatMap(s=>sa(s)).map(s=>n.callbackPath.scope.getBinding(s)?.path.node).filter(Boolean)),i=new Set;return oa(e,s=>{let a=s.scope.getBinding(s.node.name);if(!a||pn(a.path.node,r)||o.has(a.path.node))return;t.scope.getBinding(s.node.name)!==a&&i.add(s.node.name)}),i.size>0?{ok:!1,bindingNames:[...i].sort()}:{ok:!0}}function bb(e,t){let n=new Set(e.callbackPath.node.params.flatMap(a=>sa(a)).map(a=>e.callbackPath.scope.getBinding(a)?.path.node).filter(Boolean)),r=new Set,o=(a,c)=>{let l=c.scope.getBinding(a);if(!l||n.has(l.path.node))return;t.scope.getBinding(a)!==l&&r.add(a)},i=e.callbackPath.get("params"),s=Array.isArray(i)?i:[i];for(let a of s)a.traverse({ReferencedIdentifier(c){o(c.node.name,c)},TSTypeReference(c){let l=c.node.typeName;if(S.isIdentifier(l))o(l.name,c);else{let u=Sb(l);u&&o(u,c)}}});return r.size>0?{ok:!1,bindingNames:[...r].sort()}:{ok:!0}}function Sb(e){let t=e;for(;S.isTSQualifiedName(t);)t=t.left;return S.isIdentifier(t)?t.name:null}function vd(e,t){let n=de(e.node),r=new Set;return oa(e,o=>{let i=o.scope.getBinding(o.node.name);if(!i||n&&pn(i.path.node,n))return;t.scope.getBinding(o.node.name)!==i&&r.add(o.node.name)}),r.size>0?{ok:!1,bindingNames:[...r].sort(),reason:"Cannot move repeat-backed child because the repeat collection is not visible at the target"}:{ok:!0}}function oa(e,t){e.isIdentifier()&&e.isReferencedIdentifier()&&t(e),e.traverse({ReferencedIdentifier(n){n.isIdentifier()&&t(n)}})}function Eb(e){let t=vb(e.ast,e.sourceNode.component,e.targetParent.component);if(!t.ok)return{ok:!1,reason:t.reason};let n=jd(t.path,e.targetParentPath);if(!n.ok)return{ok:!1,reason:n.reason};let r=Mb({source:e.source,sourceContext:e.sourceContext,callSitePath:t.path,targetParentPath:e.targetParentPath});if(!r.ok)return r;let o=Md(r.collectionExpression);return{ok:!0,context:{...e.sourceContext,collectionExpression:r.collectionExpression,collectionNeedsParens:o?aa(o):!0}}}function vb(e,t,n){let r=Cd(e,t);if(Rd(e,r),wd(e,r))return{ok:!1,reason:"Cannot move prop-backed repeat child because the component is referenced through an unsupported value usage"};let o=[];return Yt(e,{JSXElement(s){Fd(s,r)&&o.push(s)}}),o.length!==1?{ok:!1,reason:"Cannot move prop-backed repeat child without a single unambiguous component call site"}:ia(o[0])!==n?{ok:!1,reason:"Cannot move prop-backed repeat child because the call site is outside the target component"}:{ok:!0,path:o[0]}}function Ib(e){if(!e.knownSourceFiles)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without project-wide source visibility"};if(!e.routeEntryFiles)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without registered route visibility"};let t=new Set(e.knownSourceFiles.map(a=>Sr(a.file)));if(!t.has(Sr(e.sourceFile))||!t.has(Sr(e.targetFile)))return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without source and target file visibility"};for(let a of e.routeEntryFiles)if(!t.has(Sr(a)))return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component until all registered route entries are loaded"};let n=wb(e.sourceAst,e.sourceComponent);if(!n)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without an exported source component identity"};let r=[];for(let a of e.knownSourceFiles){let c=et(a.content);if(!c)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component because a loaded source file cannot be parsed"};r.push({file:a.file,ast:c})}let o=kb(r,{file:e.sourceFile,exportName:n.exportName}),i=[];for(let a of r){let c=Id({ast:a.ast,file:a.file,sourceFile:e.sourceFile,sourceComponent:e.sourceComponent,componentIdentities:o});if(c.hasUnsafeReference)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component because the component has unsupported value usages"};i.push(...c.callSites)}if(i.length!==1)return{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component without a single project-wide component call site"};let[s]=i;return!at(s.file,e.targetFile)||ia(s.path)!==e.targetComponent?{ok:!1,reason:"Cannot move repeat-backed child out of a cross-file component because the only call site is outside the target component"}:{ok:!0,callSitePath:s.path}}function kb(e,t){let n=new Map,r=i=>{let s=Xn(i);return n.has(s)?!1:(n.set(s,i),!0)};r(t);let o=!0;for(;o;){o=!1;for(let i of e)for(let s of Cb(i,n))o=r(s)||o}return[...n.values()]}function Cb(e,t){let n=[],r=Rb(e,t);for(let o of e.ast.program.body){if(S.isExportDefaultDeclaration(o)&&S.isIdentifier(o.declaration)&&(r.get(o.declaration.name)?.length??0)>0){let i=r.get(o.declaration.name)??[];for(let s of i){if(s.namespace){let a=vr(s.namespace,o.declaration.name,"default");a&&n.push({file:e.file,namespace:a,exportName:s.exportName});continue}n.push({file:e.file,exportName:"default"})}continue}if(S.isExportNamedDeclaration(o)&&o.source&&typeof o.source.value=="string"){let i=Ir(e.file,o.source.value);for(let s of o.specifiers){if(S.isExportNamespaceSpecifier(s)){let l=Ht(s.exported);for(let u of t.values())at(u.file,i)&&n.push({file:e.file,namespace:Zs(l,u.namespace),exportName:u.exportName});continue}if(!S.isExportSpecifier(s))continue;let a=Ht(s.local),c=[...t.values()].filter(l=>at(l.file,i)&&dn(l.namespace,a));if(c.length>0){let l=Ht(s.exported);for(let u of c){let d=vr(u.namespace,a,l);d&&n.push({file:e.file,namespace:d,exportName:u.exportName})}continue}t.has(Xn({file:i,exportName:a}))&&n.push({file:e.file,exportName:Ht(s.exported)})}continue}if(S.isExportNamedDeclaration(o)&&!o.source){for(let i of o.specifiers){if(!S.isExportSpecifier(i))continue;let s=Ht(i.local),a=r.get(s)??[];if(a.length>0){let c=Ht(i.exported);n.push({file:e.file,exportName:c});for(let l of a){let u=vr(l.namespace,s,c);u&&n.push({file:e.file,namespace:u,exportName:l.exportName})}}}continue}if(S.isExportAllDeclaration(o)&&typeof o.source.value=="string"){let i=Ir(e.file,o.source.value),s=o.exported;if(s){let a=Ht(s);for(let c of t.values())at(c.file,i)&&n.push({file:e.file,namespace:Zs(a,c.namespace),exportName:c.exportName});continue}for(let a of t.values())at(a.file,i)&&(a.namespace||a.exportName!=="default")&&n.push({file:e.file,namespace:a.namespace,exportName:a.exportName})}}return n}function Zs(e,t){return t?`${e}.${t}`:e}function dn(e,t){return e===t||e?.startsWith(`${t}.`)===!0}function vr(e,t,n){return!dn(e,t)||!e?null:e===t?n:`${n}${e.slice(t.length)}`}function Rb(e,t){let n=new Map,r=(i,s)=>{let a=n.get(i)??[];a.push(s),n.set(i,a)};for(let i of e.ast.program.body){if(!S.isImportDeclaration(i)||typeof i.source.value!="string")continue;let s=Ir(e.file,i.source.value);for(let a of i.specifiers){if(S.isImportDefaultSpecifier(a)){let c=t.get(Xn({file:s,exportName:"default"}));c&&r(a.local.name,c);let l=[...t.values()].filter(u=>at(u.file,s)&&dn(u.namespace,"default"));for(let u of l){let d=vr(u.namespace,"default",a.local.name);d&&r(a.local.name,{...u,namespace:d})}continue}if(S.isImportSpecifier(a)){let c=Ht(a.imported),l=[...t.values()].filter(d=>at(d.file,s)&&dn(d.namespace,c));for(let d of l)r(a.local.name,d);let u=t.get(Xn({file:s,exportName:c}));u&&r(a.local.name,u);continue}if(S.isImportNamespaceSpecifier(a))for(let c of t.values())at(c.file,s)&&r(a.local.name,{...c,namespace:Zs(a.local.name,c.namespace)})}}let o=!0;for(;o;){o=!1;for(let i of e.ast.program.body)if(S.isVariableDeclaration(i))for(let s of i.declarations){if(!S.isIdentifier(s.id)||!s.init)continue;let a=zn(s.init);if(!a||!S.isIdentifier(a))continue;let c=n.get(a.name)??[];if(c.length===0)continue;let l=n.get(s.id.name)??[],u=new Set(l.map(Xn));for(let d of c){let p=vr(d.namespace,a.name,s.id.name),m=p?{...d,namespace:p}:d,g=Xn(m);u.has(g)||(r(s.id.name,m),u.add(g),o=!0)}}}return n}function Xn(e){let t=e.namespace?`${e.namespace}.${e.exportName}`:e.exportName;return`${Qs(e.file)}#${t}`}function Ht(e){return S.isIdentifier(e)?e.name:e.value}function wb(e,t){for(let n of e.program.body){if(S.isExportDefaultDeclaration(n)){let o=n.declaration;if((S.isFunctionDeclaration(o)||S.isClassDeclaration(o))&&o.id?.name===t)return{exportName:"default"};if(S.isIdentifier(o)&&o.name===t)return{exportName:"default"}}if(!S.isExportNamedDeclaration(n))continue;let r=n.declaration;if((S.isFunctionDeclaration(r)||S.isClassDeclaration(r))&&r.id?.name===t)return{exportName:t};if(S.isVariableDeclaration(r)){for(let o of r.declarations)if(S.isIdentifier(o.id,{name:t}))return{exportName:t}}for(let o of n.specifiers){if(!S.isExportSpecifier(o)||o.local.name!==t)continue;return{exportName:S.isIdentifier(o.exported)?o.exported.name:o.exported.value}}}return null}function Id(e){let t=Nb(e),n=[],r=wd(e.ast,t);return Yt(e.ast,{JSXElement(o){at(e.file,e.sourceFile)&&ia(o)===e.sourceComponent||Fd(o,t)&&n.push({file:e.file,path:o})}}),{callSites:n,hasUnsafeReference:r}}function kd(){return{localBindings:new Set,namespaceMembers:new Map,hasUnsupportedAlias:!1}}function Cd(e,t){let n=kd();return Yt(e,{Program(r){let o=r.scope.getBinding(t);o&&n.localBindings.add(o),r.stop()}}),n}function Nb(e){let t=kd();return at(e.file,e.sourceFile)&&Pb(t,Cd(e.ast,e.sourceComponent)),Yt(e.ast,{ImportDeclaration(n){let r=n.node,o=r.source.value;if(typeof o!="string")return;let i=Ir(e.file,o),s=e.componentIdentities.filter(a=>at(a.file,i));if(s.length!==0)for(let a of r.specifiers){let c=n.scope.getBinding(a.local.name);if(c){if(S.isImportDefaultSpecifier(a)&&s.some(l=>l.exportName==="default")&&t.localBindings.add(c),S.isImportDefaultSpecifier(a)){let l=s.filter(u=>dn(u.namespace,"default"));if(l.length>0){let u=t.namespaceMembers.get(c)??new Set;for(let d of l){let p=fd(d,"default");p&&u.add(p)}t.namespaceMembers.set(c,u)}continue}if(S.isImportSpecifier(a)){let l=S.isIdentifier(a.imported)?a.imported.name:a.imported.value,u=s.filter(d=>dn(d.namespace,l));if(u.length>0){let d=t.namespaceMembers.get(c)??new Set;for(let p of u){let m=fd(p,l);m&&d.add(m)}t.namespaceMembers.set(c,d);continue}s.some(d=>!d.namespace&&d.exportName===l)&&t.localBindings.add(c);continue}if(S.isImportNamespaceSpecifier(a))for(let l of s){let u=l.namespace?`${l.namespace}.${l.exportName}`:l.exportName,d=t.namespaceMembers.get(c)??new Set;d.add(u),t.namespaceMembers.set(c,d)}}}}}),Rd(e.ast,t),t}function Pb(e,t){e.hasUnsupportedAlias||=t.hasUnsupportedAlias;for(let n of t.localBindings)e.localBindings.add(n);for(let[n,r]of t.namespaceMembers){let o=e.namespaceMembers.get(n)??new Set;for(let i of r)o.add(i);e.namespaceMembers.set(n,o)}}function Rd(e,t){Yt(e,{VariableDeclarator(n){if(!n.node.init)return;let r=zn(n.node.init);if(r){if(S.isIdentifier(n.node.id)){let o=fn(r,t,n),i=n.scope.getBinding(n.node.id.name);o&&i&&qs(t,i,o);return}if(S.isObjectPattern(n.node.id)){let o=fn(r,t,n);o?.unsupported||o?.local?t.hasUnsupportedAlias=!0:o&&o.namespaceMembers.size>0&&Ad(n.node.id,o.namespaceMembers,t,n)}}}})}function wd(e,t){if(t.hasUnsupportedAlias)return!0;let n=!1;return Yt(e,{ReferencedIdentifier(r){if(n){r.stop();return}Ab(r)||!r.isIdentifier()||!Nd(r,t)||Tb(r,t)||_b(r)||(n=!0,r.stop())}}),n}function Ab(e){let t=e;for(;t.parentPath?.isJSXMemberExpression();)t=t.parentPath;let n=t.parentPath;return!!(n?.isJSXOpeningElement()&&n.node.name===t.node||n?.isJSXClosingElement()&&n.node.name===t.node)}function Nd(e,t){let n=e.scope.getBinding(e.node.name);if(!n)return null;let r=e;for(;r.parentPath?.isMemberExpression()&&r.parentPath.node.object===r.node&&!r.parentPath.node.computed;)r=r.parentPath;return t.localBindings.has(n)||t.namespaceMembers.has(n)&&fn(r.node,t,r)?r:null}function Tb(e,t){let n=e.findParent(c=>c.isVariableDeclarator());if(!n?.isVariableDeclarator())return!1;let r=n.get("init");if(!r?.isExpression()||!dd(e,r))return!1;let o=Nd(e,t);if(!o)return!1;if(zn(r.node)===o.node)return!!fn(r.node,t,r);let s=e.findParent(c=>c.isObjectProperty());if(!s?.isObjectProperty())return!1;let a=s.get("value");return a.isExpression()&&dd(e,a)&&!!fn(a.node,t,a)}function _b(e){let t=e.parentPath;return t?.isExportDefaultDeclaration()&&t.node.declaration===e.node?!0:!!(t?.isExportSpecifier()&&t.node.local===e.node)}function dd(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentPath}return!1}function fn(e,t,n){let r=zn(e);if(!r)return null;if(S.isIdentifier(r)){let a=n.scope.getBinding(r.name);if(!a)return null;let c=t.namespaceMembers.get(a);return t.localBindings.has(a)?{local:!0,namespaceMembers:new Set,unsupported:!1}:c?{local:!1,namespaceMembers:new Set(c),unsupported:!1}:null}if(S.isObjectExpression(r))return Fb(r,t,n);let o=_d(r);if(!o||o.length===0)return null;let i=n.scope.getBinding(o[0]);if(!i)return null;let s=t.namespaceMembers.get(i);return s?Pd(s,o.slice(1).join(".")):null}function Fb(e,t,n){let r=new Set,o=!1;for(let i of e.properties){if(!S.isObjectProperty(i))continue;let s=Td(i);if(!s||!S.isExpression(i.value)){S.isExpression(i.value)&&(o||=fn(i.value,t,n)!==null);continue}let a=fn(i.value,t,n);if(a){o||=a.unsupported,a.local&&r.add(s);for(let c of a.namespaceMembers)r.add(`${s}.${c}`)}}return r.size>0||o?{local:!1,namespaceMembers:r,unsupported:o}:null}function Pd(e,t){if(!t)return{local:!1,namespaceMembers:new Set(e),unsupported:!1};let n=new Set,r=!1;for(let o of e){if(o===t){r=!0;continue}o.startsWith(`${t}.`)&&n.add(o.slice(t.length+1))}return r||n.size>0?{local:r,namespaceMembers:n,unsupported:!1}:null}function qs(e,t,n){if(e.hasUnsupportedAlias||=n.unsupported,n.local&&e.localBindings.add(t),n.namespaceMembers.size>0){let r=e.namespaceMembers.get(t)??new Set;for(let o of n.namespaceMembers)r.add(o);e.namespaceMembers.set(t,r)}}function Ad(e,t,n,r){for(let o of e.properties){if(S.isRestElement(o)){if(S.isIdentifier(o.argument)){let c=r.scope.getBinding(o.argument.name);c&&qs(n,c,{local:!1,namespaceMembers:new Set(t),unsupported:!1})}else n.hasUnsupportedAlias=!0;continue}if(!S.isObjectProperty(o))continue;let i=Td(o);if(!i){n.hasUnsupportedAlias=!0;continue}let s=Pd(t,i);if(!s)continue;n.hasUnsupportedAlias||=s.unsupported;let a=S.isAssignmentPattern(o.value)?o.value.left:o.value;if(S.isIdentifier(a)){let c=r.scope.getBinding(a.name);c&&qs(n,c,s);continue}if(S.isObjectPattern(a)&&s.namespaceMembers.size>0){Ad(a,s.namespaceMembers,n,r);continue}n.hasUnsupportedAlias=!0}}function Td(e){return e.computed?S.isStringLiteral(e.key)||S.isNumericLiteral(e.key)?String(e.key.value):null:Ob(e.key)}function Ob(e){return S.isIdentifier(e)?e.name:S.isStringLiteral(e)||S.isNumericLiteral(e)?String(e.value):null}function zn(e){return S.isParenthesizedExpression(e)||S.isTSAsExpression(e)||S.isTSSatisfiesExpression(e)||S.isTSNonNullExpression(e)||S.isTSTypeAssertion(e)?zn(e.expression):S.isExpression(e)?e:null}function _d(e){if(S.isIdentifier(e))return[e.name];if((S.isMemberExpression(e)||S.isOptionalMemberExpression(e))&&!e.computed&&S.isIdentifier(e.property)){let t=zn(e.object),n=t?_d(t):null;return n?[...n,e.property.name]:null}return null}function fd(e,t){if(!dn(e.namespace,t))return null;if(e.namespace===t)return e.exportName;let n=e.namespace?.slice(t.length+1);return n?`${n}.${e.exportName}`:e.exportName}function Fd(e,t){let n=e.node.openingElement.name;if(S.isJSXIdentifier(n)){let o=e.scope.getBinding(n.name);return!!(o&&t.localBindings.has(o))}let r=Od(n);if(r&&r.length>1){let o=e.scope.getBinding(r[0]);return o?t.namespaceMembers.get(o)?.has(r.slice(1).join("."))===!0:!1}return!1}function Od(e){if(S.isJSXIdentifier(e))return[e.name];if(S.isJSXMemberExpression(e)){let t=Od(e.object);return t?[...t,e.property.name]:null}return null}function ia(e){let t=e.getFunctionParent();if(!t)return null;if(t.isFunctionDeclaration())return t.node.id?.name??null;if(t.isArrowFunctionExpression()||t.isFunctionExpression()){let n=t.parentPath;if(n?.isVariableDeclarator()&&S.isIdentifier(n.node.id))return n.node.id.name}return null}function Mb(e){let t=de(e.sourceContext.collectionPath.node);if(!t)return{ok:!1,reason:"Cannot move prop-backed repeat child because the collection expression cannot be mapped"};let n=new Map,r=new Set,o=null,i=s=>{if(o)return;let a=s.scope.getBinding(s.node.name);if(!a||pn(a.path.node,t))return;let c=Bb(s,a,t);if(c){if(c.hasDefault){o="Cannot move prop-backed repeat child because the collection prop has a default value that cannot be preserved safely";return}let u=$b(e.callSitePath,c.propName,e.source);if(!u.ok){o=u.reason;return}let d=Db(u.expression,c.remainingPath);if(!d){o="Cannot move prop-backed repeat child because the mapped prop path is not a portable expression";return}let p=vd(u.expressionPath,e.targetParentPath);if(!p.ok){o=p.reason??`Cannot move prop-backed repeat child because the mapped prop source is not visible at the target: ${p.bindingNames.join(", ")}`;return}n.set(`${c.range.start}:${c.range.end}`,{...c.range,text:d});return}e.targetParentPath.scope.getBinding(s.node.name)!==a&&r.add(s.node.name)};return e.sourceContext.collectionPath.isIdentifier()&&e.sourceContext.collectionPath.isReferencedIdentifier()&&i(e.sourceContext.collectionPath),e.sourceContext.collectionPath.traverse({ReferencedIdentifier(s){s.isIdentifier()&&i(s)}}),o?{ok:!1,reason:o}:r.size>0?{ok:!1,reason:`Cannot move prop-backed repeat child because the collection depends on bindings outside the target scope: ${[...r].sort().join(", ")}`}:n.size===0?{ok:!1,reason:"Cannot move repeat-backed child out of its component without an explicit prop mapping"}:{ok:!0,collectionExpression:Vb(e.source,t,[...n.values()])}}function Db(e,t){if(t.length===0)return e;let n=Md(e);if(!n)return null;let r=aa(n)?`(${e})`:e;for(let o of t){if(o.kind==="property"){r=Lb(o.name)?`${r}.${o.name}`:`${r}[${JSON.stringify(o.name)}]`;continue}r=`${r}[${o.index}]`}return r}function Lb(e){return/^[$A-Z_a-z][$\w]*$/.test(e)}function Bb(e,t,n){let r=jb(e,n),o=r?{kind:"member-expression",expression:e.node.name,base:e.node.name,path:[{kind:"property",name:r.propertyName}]}:{kind:"identifier",expression:e.node.name,base:e.node.name,path:[]},i=Kn(t,o);if(!i)return null;let s=r?.range??de(e.node);return s?{propName:i.propName,remainingPath:i.remainingPath,hasDefault:i.hasDefault,range:s}:null}function jb(e,t){let n=e.parentPath;if(!n||!n.isMemberExpression()&&!n.isOptionalMemberExpression()||n.node.object!==e.node||!pn(n.node,t)||n.node.computed||!S.isIdentifier(n.node.property))return null;let r=de(n.node);return r?{propertyName:n.node.property.name,range:r}:null}function $b(e,t,n){let r=e.get("openingElement").get("attributes");if(r.some(c=>c.isJSXSpreadAttribute()))return{ok:!1,reason:"Cannot move prop-backed repeat child through spread props; use an explicit prop mapping"};let o=r.find(c=>c.isJSXAttribute()&&S.isJSXIdentifier(c.node.name)&&c.node.name.name===t);if(!o?.isJSXAttribute())return{ok:!1,reason:`Cannot move prop-backed repeat child because prop '${t}' is not passed explicitly`};let i=o.get("value");if(!i.isJSXExpressionContainer())return{ok:!1,reason:`Cannot move prop-backed repeat child because prop '${t}' is not an expression`};let s=i.get("expression");if(!s.isExpression())return{ok:!1,reason:`Cannot move prop-backed repeat child because prop '${t}' is not a usable expression`};let a=Yo(n,s.node);return a?{ok:!0,expression:a,expressionPath:s}:{ok:!1,reason:`Cannot move prop-backed repeat child because prop '${t}' cannot be read`}}function Vb(e,t,n){let r=e.slice(t.start,t.end),o=[...n].sort((i,s)=>s.start-i.start);for(let i of o)r=r.slice(0,i.start-t.start)+i.text+r.slice(i.end-t.start);return r}function Md(e){try{let n=na.parse(`const __VD_EXPR__ = (${e});`,{sourceType:"module",plugins:["jsx","typescript"]}).program.body[0],r=S.isVariableDeclaration(n)?n.declarations[0]?.init:null;return r&&S.isExpression(r)?r:null}catch{return null}}function Ub(e){let t=de(e.sourceContext.collectionPath.node);if(!t)return{ok:!1,reason:"Cannot move cross-file repeat child because the collection expression cannot be inspected"};let n=new Map,r=new Set,o=i=>{let s=i.scope.getBinding(i.node.name);if(!s||pn(s.path.node,t))return;let a=pd(s,e.sourceFile,e.targetFile);if(a){let c=e.targetParentPath.scope.getBinding(a.localName);if(c){let u=pd(c,e.targetFile,e.targetFile);(!u||u.moduleFile!==a.moduleFile||!Kb(u.importSpec,a.importSpec))&&r.add(a.localName);return}let l=n.get(a.moduleSpecifier)??[];l.some(u=>JSON.stringify(u)===JSON.stringify(a.importSpec))||l.push(a.importSpec),n.set(a.moduleSpecifier,l);return}r.add(i.node.name)};return oa(e.sourceContext.collectionPath,o),r.size>0?{ok:!1,reason:`Cannot move cross-file repeat child because the collection depends on non-importable bindings: ${[...r].sort().join(", ")}`}:{ok:!0,imports:[...n.entries()].map(([i,s])=>({moduleSpecifier:i,imports:s}))}}function Kb(e,t){return e.kind!==t.kind?!1:e.kind==="named"&&t.kind==="named"?e.imported===t.imported&&e.local===t.local:e.kind==="default"&&t.kind==="default"||e.kind==="namespace"&&t.kind==="namespace"?e.local===t.local:!1}function pd(e,t,n){let r=Jb(e),o=r?.parentPath;if(!r||!o?.isImportDeclaration())return null;let i=o.node.source.value;if(typeof i!="string")return null;let s=Ir(t,i),a=i.startsWith(".")?Ys(n,s):i;if(r.isImportDefaultSpecifier()){let c=r.node.local.name;return{localName:c,moduleFile:s,moduleSpecifier:a,importSpec:{kind:"default",local:c}}}if(r.isImportNamespaceSpecifier()){let c=r.node.local.name;return{localName:c,moduleFile:s,moduleSpecifier:a,importSpec:{kind:"namespace",local:c}}}if(r.isImportSpecifier()){let c=S.isIdentifier(r.node.imported)?r.node.imported.name:r.node.imported.value,l=r.node.local.name;return{localName:l,moduleFile:s,moduleSpecifier:a,importSpec:{kind:"named",imported:c,local:l===c?void 0:l}}}return null}function Jb(e){let t=e.path;for(;t&&!t.isImportDeclaration();){if(t.isImportSpecifier()||t.isImportDefaultSpecifier()||t.isImportNamespaceSpecifier())return t;t=t.parentPath}return null}function Ir(e,t){return t.startsWith("@/")?t.slice(2).replace(/\\/g,"/"):t.startsWith(".")?Pt.normalize(Pt.join(Pt.dirname(e),t)).replace(/\\/g,"/"):t}function at(e,t){return Qs(e)===Qs(t)}function Qs(e){let t=Sr(e);return t.endsWith("/index")?t.slice(0,-6):t}function Sr(e){return e.replace(/\.(tsx|ts|jsx|js)$/,"")}function sa(e){let t=[],n=r=>{if(r){if(S.isIdentifier(r)){t.push(r.name);return}if(S.isObjectPattern(r)){for(let o of r.properties){if(S.isRestElement(o)){n(o.argument);continue}S.isObjectProperty(o)&&n(o.value)}return}if(S.isArrayPattern(r)){for(let o of r.elements)n(o);return}if(S.isAssignmentPattern(r)){n(r.left);return}if(S.isRestElement(r)){n(r.argument);return}S.isTSParameterProperty(r)&&n(r.parameter)}};return n(e),t}function Xb(e){let t=[];for(let n of e.callbackPath.node.params){if(S.isIdentifier(n)){t.push(n.name);continue}if(S.isRestElement(n)&&S.isIdentifier(n.argument)){t.push(`...${n.argument.name}`);continue}return{ok:!1,reason:"Cannot move cross-file repeat child because the callback parameters are not portable to the target file"}}return{ok:!0,callbackParams:t}}function zb(e,t){return{...e,callbackParams:t}}function md(e,t){return`${e.collectionNeedsParens?`(${e.collectionExpression})`:e.collectionExpression}${e.mapOperator}((${e.callbackParams.join(", ")}) => ${t})`}function aa(e){return!(S.isIdentifier(e)||S.isThisExpression(e)||S.isMemberExpression(e)||S.isOptionalMemberExpression(e)||S.isCallExpression(e)||S.isOptionalCallExpression(e))}function Dd(e,t){return Ld(e,t).length>0}function Ws(e,t){let n=de(e.node),r=de(t.node);if(!n||!r)return!1;let o=e.parentPath;for(;o;){if((o.isIfStatement()||o.isSwitchCase())&&(!!!t.findParent(s=>s.node===o?.node)||o.isIfStatement()&&!Wb(o,n,r)))return!0;o=o.parentPath}return!1}function Wb(e,t,n){let r=de(e.node.consequent);if(r&&st(r,t)&&!st(r,n))return!1;let o=e.node.alternate?de(e.node.alternate):null;return!(o&&st(o,t)&&!st(o,n))}function Ld(e,t){let n=de(e.node);if(!n)return[];let r=[],o=e.parentPath;for(;o;){let i=!!t.findParent(s=>s.node===o?.node);if(!i&&o.isConditionalExpression()){let s=de(o.node.consequent),a=de(o.node.alternate);s&&n.start>=s.start&&n.end<=s.end?r.push({kind:"conditional",path:o,conditionPath:o.get("test"),branch:"consequent"}):a&&n.start>=a.start&&n.end<=a.end&&r.push({kind:"conditional",path:o,conditionPath:o.get("test"),branch:"alternate"})}else if(!i&&o.isLogicalExpression()&&Bd(o.node.operator)){let s=de(o.node.right);s&&n.start>=s.start&&n.end<=s.end&&r.push({kind:"logical",path:o,conditionPath:o.get("left"),operator:o.node.operator})}o=o.parentPath}return r}function gd(e,t,n,r){let o=Ld(t,n);if(o.length===0)return{sourceJsx:r,conditionPaths:[]};let i=r,s=[];for(let a of o){let c=Yo(e,a.conditionPath.node);if(!c)return{sourceJsx:r,conditionPaths:[]};let l=Hb(a.conditionPath,c);if(s.push(a.conditionPath),a.kind==="logical"){i=`${l} ${a.operator} ${Yb(i)}`;continue}i=a.branch==="consequent"?`${l} ? ${i} : null`:`${l} ? null : ${i}`}return{sourceJsx:i,conditionPaths:s}}function Hb(e,t){return Gb(e.node)?t:`(${t})`}function Gb(e){return S.isIdentifier(e)||S.isThisExpression(e)||S.isSuper(e)||S.isMemberExpression(e)||S.isOptionalMemberExpression(e)||S.isCallExpression(e)||S.isOptionalCallExpression(e)||S.isBooleanLiteral(e)||S.isNumericLiteral(e)||S.isStringLiteral(e)||S.isNullLiteral(e)||S.isUnaryExpression(e)}function Bd(e){return e==="&&"||e==="||"||e==="??"}function Yb(e){return e.trim().startsWith("<")?e:`(${e})`}function jd(e,t){let n=de(e.node),r=de(t.node);if(!n||!r)return{ok:!1,reason:"Cannot move repeat-backed child out of a component without proving the component call-site render scope"};let o=hd(e),i=hd(t);if(!o||!i||!Zb(o,i))return{ok:!1,reason:"Cannot move repeat-backed child out of a component because the component call site is rendered in a different return branch"};let s=e.parentPath;for(;s;){if(s.isConditionalExpression()){let a=qb(s.node,n);if(a&&!st(a,r))return{ok:!1,reason:"Cannot move repeat-backed child out of a component because the component call site is conditionally rendered outside the target scope"}}else if(s.isLogicalExpression()){let a=de(s.node.right);if(a&&st(a,n)&&!st(a,r))return{ok:!1,reason:"Cannot move repeat-backed child out of a component because the component call site is conditionally rendered outside the target scope"}}else if((s.isArrowFunctionExpression()||s.isFunctionExpression())&&Qb(s)){let a=de(s.node.body)??de(s.node);if(a&&!st(a,r))return{ok:!1,reason:"Cannot move repeat-backed child out of a component because the component call site is repeated outside the target scope"}}s=s.parentPath}return{ok:!0}}function hd(e){let t=e;for(;t;){if(t.isReturnStatement())return t.node.argument?de(t.node.argument):null;if(t.isArrowFunctionExpression()&&(S.isJSXElement(t.node.body)||S.isJSXFragment(t.node.body)||S.isConditionalExpression(t.node.body)||S.isLogicalExpression(t.node.body)))return de(t.node.body);t=t.parentPath}return null}function Zb(e,t){return e.start===t.start&&e.end===t.end}function qb(e,t){let n=de(e.consequent);if(n&&st(n,t))return n;let r=de(e.alternate);return r&&st(r,t)?r:null}function Qb(e){let t=e.parentPath;if(!t||!t.isCallExpression()&&!t.isOptionalCallExpression()||t.node.arguments[0]!==e.node)return!1;let n=t.node.callee;return(S.isMemberExpression(n)||S.isOptionalMemberExpression(n))&&S.isIdentifier(n.property)&&n.property.name==="map"&&!n.computed}var eS={table:new Set(["caption","colgroup","thead","tbody","tfoot","tr"]),thead:new Set(["tr"]),tbody:new Set(["tr"]),tfoot:new Set(["tr"]),tr:new Set(["th","td"]),ul:new Set(["li"]),ol:new Set(["li"]),select:new Set(["option","optgroup"]),optgroup:new Set(["option"])};function Ho(e,t){if(t.kind!=="native-tag")return null;let n=e.tag?.toLowerCase();if(!n||n!==e.tag||n.startsWith("component:"))return null;let r=eS[n];if(!r)return null;let o=t.tag.toLowerCase();return r.has(o)?null:`Cannot insert <${t.tag}> into <${e.tag}>; expected ${[...r].map(i=>`<${i}>`).join(", ")}`}function tS(e,t){for(let n of e.program.body){if(!S.isImportDeclaration(n)||n.source.value!==t)continue;let r=n.specifiers.find(o=>S.isImportDefaultSpecifier(o));if(r&&S.isImportDefaultSpecifier(r))return r.local.name}return null}function nS(e,t,n){for(let r of e.program.body){if(!S.isImportDeclaration(r)||r.source.value!==t)continue;let o=r.specifiers.find(i=>S.isImportSpecifier(i)&&(S.isIdentifier(i.imported)?i.imported.name:i.imported.value)===n);if(o&&S.isImportSpecifier(o))return o.local.name}return null}function yd(e){let t=new Set;return Yt(e,{Program(n){for(let r of Object.keys(n.scope.bindings))t.add(r);n.stop()}}),t}function xd(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}${n}`);)n+=1;return`${e}${n}`}function rS(e,t){if(!e.component)return{localName:"Component"};let n=e.component,r=ra(e),o=et(t);if(n.exportName!=="default"){let a=o?nS(o,n.source,n.exportName):null;if(a)return{localName:a};let c=o?xd(r,yd(o)):r;return{localName:c,importStep:Hs(e,c)}}if(!o)return{localName:r,importStep:Hs(e,r)};let i=tS(o,n.source);if(i)return{localName:i};let s=xd(r,yd(o));return{localName:s,importStep:Hs(e,s)}}function oS(e,t){if(e.kind==="native-tag")return e.text?`<${e.tag}>${e.text}</${e.tag}>`:`<${e.tag} />`;let n=t??ra(e);if(e.props&&Object.keys(e.props).length>0){let r=Object.entries(e.props).map(([o,i])=>typeof i=="string"?`${o}="${i}"`:`${o}={${JSON.stringify(i)}}`).join(" ");return`<${n} ${r} />`}return`<${n} />`}function iS(e){if(e.kind==="native-tag")return e.text===void 0?{kind:e.kind,tag:e.tag}:{kind:e.kind,tag:e.tag,text:e.text};if(!e.component)return{kind:e.kind};let t=e.props?sS(e.props):void 0;return{kind:e.kind,component:{source:e.component.source,exportName:e.component.exportName},...t?{props:t}:{}}}function sS(e){return Object.fromEntries(Object.entries(e).filter(t=>ea(t[1])))}function ea(e){return e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean"?!0:Array.isArray(e)?e.every(ea):typeof e=="object"?Object.values(e).every(ea):!1}function aS(e,t){let n=et(e);if(!n||!t.tag||!t.importedFrom||!t.exportName)return Number.POSITIVE_INFINITY;let r=Id({ast:n,file:t.file,sourceFile:t.file,sourceComponent:t.tag,componentIdentities:[{file:t.importedFrom,exportName:t.exportName}]});return r.hasUnsafeReference?Number.POSITIVE_INFINITY:r.callSites.length}function Hs(e,t=ra(e)){if(!e.component)throw new Error("Materialized component calls do not have a component import");return{moduleSpecifier:e.component.source,imports:e.component.exportName==="default"?[{kind:"default",local:t}]:[{kind:"named",imported:e.component.exportName,...t!==e.component.exportName?{local:t}:{}}]}}function bd(e,t){if("kind"in e)return{parentNode:null,anchorNode:null,placement:e.relation};if("parentKey"in e)return{parentNode:t.getNode(e.parentKey),anchorNode:null,placement:e.relation};let n=t.getNode(e.anchorKey);return{parentNode:n?.parentKey?t.getNode(n.parentKey)??n:n,anchorNode:n,placement:e.relation}}function cS(e,t,n){let r=e;for(;r;){if(r===t)return!0;r=n.getNode(r)?.parentKey}return!1}function br(e,t){return`Operation kind '${e}' does not match params.kind '${t}'`}function ca(e,t=e.path){return{kind:"value",root:e.root,path:t&&t.length>0?t:void 0,expectedRange:e.expectedRange}}function Er(e){let t=e.path??[];for(let n=t.length-1;n>=0;n-=1){let r=t[n];if(r.kind==="index")return{locator:ca(e,t.slice(0,n)),index:r.index}}return null}function Gs(e,t){return e.locator?e.collectionPathMap?.[t]?ca(e.locator,e.collectionPathMap[t]):Er(e.locator)?uS(e.locator,dS(t,e.collectionIndexMap)):null:null}function lS(e,t){let n=e.path??[],r=n.findLastIndex(i=>i.kind==="index");if(r===-1)return;let o=n.slice(r+1);return o.length===0?t:$d(o,t)}function $d(e,t){let[n,...r]=e;if(!n)return t;if(n.kind!=="property")return;let o=$d(r,t);return o===void 0?void 0:{[n.name]:o}}function Go(e,t,n){return n?.finalSource?.kind==="component-prop"?"Cannot edit prop-backed node structure with a generic node operation":t?.kind==="value-binding"&&t.sourceKind==="repeat-template"&&!e.isRepeatItemRoot?"Cannot edit repeat-backed child node structure with a generic node operation":t?.kind==="value-binding"&&t.file!==e.file&&t.sourceKind!=="repeat-template"?"Cannot edit upstream-bound node structure with a generic node operation":null}function uS(e,t){let n=e.path??[];for(let r=n.length-1;r>=0;r-=1)if(n[r].kind==="index"){let i=[...n];return i[r]={kind:"index",index:t},ca(e,i)}return null}function dS(e,t){return t?.[e]??e}function Sd(e,t){return!t||t.length===0?e:e<=0?t[0]??0:e>=t.length?(t[t.length-1]??t.length-1)+1:t[e]??e}function fS(e,t){return pS(e.root,t.root)&&gS(e.path??[],t.path??[])}function pS(e,t){if(e.kind!==t.kind)return!1;switch(e.kind){case"binding":case"hook-state":case"named-export":return"name"in t&&e.name===t.name;case"default-export":return!0;case"expression":return"sourceRange"in t&&mS(e.sourceRange,t.sourceRange)}}function mS(e,t){return e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}function ta(e,t){let n=null;return Yt(e,{JSXElement(r){let o=r.node.loc;o&&o.start.line===t.sourceRange.startLine&&o.start.column===t.sourceRange.startColumn&&o.end.line===t.sourceRange.endLine&&o.end.column===t.sourceRange.endColumn&&(n=r,r.stop())}}),n}function gS(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],o=t[n];if(r.kind!==o.kind)return!1;if(r.kind==="property"){if(o.kind!=="property"||r.name!==o.name)return!1;continue}if(o.kind!=="index"||r.index!==o.index)return!1}return!0}var Zo=class{constructor(t){this.operationCounter=0,this.graph=t}async plan(t){let n=`op-${++this.operationCounter}-${Date.now()}`;switch(t.kind){case"update-text":{if(t.params.kind!=="update-text")return{ok:!1,errorCode:"unknown",reason:br(t.kind,t.params.kind)};let r=t,o=this.resolveNodeRequest(t);if(!o.ok)return o.result;let i=o.node,s=this.graph.getFileVersion(i.file);return t.documentVersion!==s?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${s})`}:this.planUpdateText(n,r,i,this.graph.getCapability(i.key),await this.graph.getTextWriteTarget(i.key,r.params.segmentIndex))}case"update-array-item":{if(t.params.kind!=="update-array-item")return{ok:!1,errorCode:"unknown",reason:br(t.kind,t.params.kind)};let r=t,o=this.resolveNodeRequest(t);if(!o.ok)return o.result;let i=o.node,s=this.graph.getFileVersion(i.file);return t.documentVersion!==s?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${s})`}:this.planUpdateArrayItem(n,r,this.graph.getCapability(i.key),await this.graph.getTextWriteTarget(i.key,r.params.segmentIndex))}case"remove-node":{if(t.params.kind!=="remove-node")return{ok:!1,errorCode:"unknown",reason:br(t.kind,t.params.kind)};let r=t,o=this.resolveNodeRequest(t);if(!o.ok)return o.result;let i=o.node,s=this.graph.getFileVersion(i.file);return t.documentVersion!==s?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${s})`}:this.planRemoveNode(n,r,i,this.graph.getCapability(i.key))}case"insert-child":{if(t.params.kind!=="insert-child")return{ok:!1,errorCode:"unknown",reason:br(t.kind,t.params.kind)};let r=t;if(!zo(r.params.position))return{ok:!1,errorCode:"unsupported-operation",reason:"Page composition insert-child requires the page composition transaction planner"};let o=bd(r.params.position,this.graph);if(!o.parentNode)return{ok:!1,errorCode:"locator-miss",reason:`Insert target parent for request '${t.id}' not found in graph`};let i=this.graph.getFileVersion(o.parentNode.file);return t.documentVersion!==i?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${i})`}:this.planInsertChild(n,r,o.parentNode,this.graph.getCapability(o.parentNode.key),o.anchorNode)}case"move-node":{if(t.params.kind!=="move-node")return{ok:!1,errorCode:"unknown",reason:br(t.kind,t.params.kind)};let r=t,o=this.resolveNodeRequest(t);if(!o.ok)return o.result;let i=o.node,s=this.graph.getFileVersion(i.file);return t.documentVersion!==s?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${s})`}:this.planMoveNode(n,r,i,this.graph.getCapability(i.key))}case"set-class-name-source":{let r=this.resolveNodeRequest(t);if(!r.ok)return r.result;let o=this.graph.getFileVersion(r.node.file);return t.documentVersion!==o?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${o})`}:this.planNodeAttributeOperation(n,t,r.node)}case"set-props":{let r=this.resolveNodeRequest(t);if(!r.ok)return r.result;let o=this.graph.getFileVersion(r.node.file);return t.documentVersion!==o?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${o})`}:await this.planSetProps(n,t,r.node)}case"apply-style-draft":{let r=this.resolveNodeRequest(t);if(!r.ok)return r.result;let o=this.graph.getFileVersion(r.node.file);return t.documentVersion!==o?{ok:!1,errorCode:"stale-version",reason:`Document version ${t.documentVersion} is stale or otherwise does not match current version (current: ${o})`}:await this.planApplyStyleDraft(n,t,r.node)}default:return{ok:!1,errorCode:"unknown",reason:`Unknown operation kind: ${t.kind}`}}}resolveNodeRequest(t){let n=ub(t);if(!n)return{ok:!1,result:{ok:!1,errorCode:"invalid-target",reason:`Operation '${t.kind}' requires a node target`}};let r=this.graph.getNode(n);return r?{ok:!0,node:r}:{ok:!1,result:{ok:!1,errorCode:"locator-miss",reason:`Target key '${n}' not found in graph`}}}planNodeAttributeOperation(t,n,r){let o=r.file,i=this.graph.getCapability(r.key);return n.params.filePath!==o?{ok:!1,errorCode:"stale-version",reason:"The className source file changed before save."}:this.buildPlan(t,n,[{order:0,file:o,type:"set-class-name-source",request:{...n.params,key:r.key}}],i)}async planSetProps(t,n,r){let o=this.graph.getCapability(r.key),i=await this.buildTypedPropertySteps({node:r,scope:n.params.scope,changes:n.params.changes,selectionRef:n.selectionRef});return i.ok?this.buildPlan(t,n,i.steps,o):hS(i)}async planApplyStyleDraft(t,n,r){let o=r.file,i=this.graph.getCapability(r.key),s=[];if(n.params.className){if(n.params.className.filePath!==o)return{ok:!1,errorCode:"stale-version",reason:"The className source file changed before save."};s.push({order:s.length,file:o,type:"set-class-name-source",request:{kind:"set-class-name-source",...n.params.className,key:r.key}})}if(n.params.props){let a=await this.buildStyleDraftPropertySteps({initialOrder:s.length,node:r,props:n.params.props,selectionRef:n.selectionRef});if(!a.ok)return a;s.push(...a.steps)}return this.buildPlan(t,n,s,i)}async buildTypedPropertySteps(t){let n=this.graph.getPropertyState;return n?id({node:t.node,scope:t.scope,changes:t.changes,selectionRef:t.selectionRef,getPropertyState:n,getRepeatPropertyTarget:this.graph.getRepeatPropertyTarget,getFileContent:r=>this.graph.getFileContent(r),getFileVersion:r=>this.graph.getFileVersion(r),classNameSource:this.graph.getClassNameSource?.(t.node.key)??void 0}):{ok:!1,errorCode:"missing-property-state",reason:"Typed property planning requires authoritative property provenance"}}async buildStyleDraftPropertySteps(t){let{initialOrder:n,node:r,props:o,selectionRef:i}=t,s=[],a=[];for(let[c,l]of Object.entries(o)){if(l===void 0)continue;let u=await this.graph.getElementPropertyWriteTarget?.(r.key,c),d=r.attributes?.find(p=>p.name===c);if(!(typeof d?.resolvedValue=="string"&&d.resolvedValue===l||d?.source===null&&d.value===l)){if(u?.kind==="external-entry")return{ok:!1,errorCode:"capability-denied",reason:`apply-style-draft cannot overwrite readonly external property '${c}'`};if(u?.kind==="value-binding"&&u.locator){let p=u.locator;if(u.sourceKind==="repeat-template"&&typeof i?.instanceIndex=="number"){let m=Gs(u,i.instanceIndex);if(!m)return{ok:!1,errorCode:"invalid-params",reason:"apply-style-draft could not resolve the selected repeat item"};p=m}s.push({order:n+s.length,file:u.file,type:"update-value",locator:p,value:l});continue}a.push({operation:"set",name:c,value:l})}}return a.length>0&&s.push({order:n+s.length,file:r.file,type:"set-property-changes",locator:he(r),scope:"selection",changes:a}),{ok:!0,steps:s}}buildTextRewriteSteps(t,n,r,o,i){if(o?.kind==="value-binding"&&o.locator){if(o.sourceKind==="repeat-template"&&typeof i?.instanceIndex=="number"){let a=Gs(o,i.instanceIndex);if(!a)return{ok:!1,errorCode:"invalid-params",reason:"update-text could not resolve the selected repeat item"};let c=this.coerceTextValueForValueTarget(o.file,a,r);return c.ok?{ok:!0,steps:[{order:0,file:o.file,type:"update-array-item",locator:a,value:c.value}]}:c}let s=this.coerceTextValueForValueTarget(o.file,o.locator,r);return s.ok?{ok:!0,steps:[{order:0,file:o.file,type:"update-value",locator:o.locator,value:s.value}]}:s}return{ok:!0,steps:o?.kind==="external-entry"?[{order:0,file:`external:${o.sourceId}`,type:"invoke-external-adapter",sourceType:o.sourceType,sourceId:o.sourceId,adapterId:o.adapterId,capability:"write-text",value:r}]:[{order:0,file:t.file,type:"update-text",locator:he(t),segmentIndex:n,newText:r}]}}coerceTextValueForValueTarget(t,n,r,o="update-text"){let i=this.graph.getFileContent(t),s=et(i);if(!s)return{ok:!1,errorCode:"invalid-params",reason:`${o} could not inspect the value source`};let a=ie(s,n);if(!a.ok)return{ok:!1,errorCode:"invalid-params",reason:`${o} could not resolve the value source`};if(!fb(a.match.path))return{ok:!0,value:r};let c=pb(r);return c===null?{ok:!1,errorCode:"invalid-params",reason:`${o} value must be a valid number for numeric source`}:{ok:!0,value:c}}planUpdateArrayItem(t,n,r,o){if(!r.canUpdateText)return{ok:!1,errorCode:"capability-denied",reason:"Cannot update repeated text on this node"};if(o?.kind!=="value-binding"||o.sourceKind!=="repeat-template"||!o.locator)return{ok:!1,errorCode:"invalid-params",reason:"update-array-item requires a writable repeat-template source"};let{index:i,value:s}=n.params,a=o.collectionPathMap?.length??o.collectionIndexMap?.length;if(a!==void 0&&i>=a)return{ok:!1,errorCode:"invalid-params",reason:`update-array-item index ${i} is outside the repeated source`};let c=Gs(o,i);if(!c)return{ok:!1,errorCode:"invalid-params",reason:"update-array-item could not resolve the selected repeat item"};let l=this.coerceTextValueForValueTarget(o.file,c,s,"update-array-item");return l.ok?this.isValueTargetUnchanged(o.file,c,l.value)?{ok:!1,errorCode:"invalid-params",reason:"update-array-item value is unchanged"}:this.buildPlan(t,n,[{order:0,file:o.file,type:"update-array-item",locator:c,value:l.value}],r):l}isValueTargetUnchanged(t,n,r){let o=et(this.graph.getFileContent(t));if(!o)return!1;let i=ie(o,n);if(!i.ok)return!1;let s=i.match.path;if(s.isStringLiteral())return typeof r=="string"&&s.node.value===r;if(s.isNumericLiteral())return typeof r=="number"&&Object.is(s.node.value,r);if(s.isBooleanLiteral())return typeof r=="boolean"&&s.node.value===r;if(s.isNullLiteral())return r===null;if(s.isUnaryExpression({operator:"-"})){let a=s.get("argument");return typeof r=="number"&&!Array.isArray(a)&&a.isNumericLiteral()&&Object.is(-a.node.value,r)}return!1}planUpdateText(t,n,r,o,i){if(!o.canUpdateText)return{ok:!1,errorCode:"capability-denied",reason:"Cannot update text on this node"};let s=this.buildTextRewriteSteps(r,n.params.segmentIndex,n.params.value,i,n.selectionRef);return s.ok?this.buildPlan(t,n,s.steps,o):s}async planRemoveNode(t,n,r,o){if(!o.canRemove)return{ok:!1,errorCode:"capability-denied",reason:"Cannot remove this node"};let i=await this.graph.getTextWriteTarget(r.key,0);if(i?.kind==="external-entry")return this.buildPlan(t,n,[{order:0,file:`external:${i.sourceId}`,type:"invoke-external-adapter",sourceType:i.sourceType,sourceId:i.sourceId,adapterId:i.adapterId,capability:"remove-node",value:{operation:"remove-node"}}],o);if(r.isRepeatItemRoot){let d=i;if(d?.kind==="value-binding"&&d.locator){let p=Er(d.locator);if(p)return this.buildPlan(t,n,[{order:0,file:d.file,type:"remove-bound-array-item",locator:p.locator,index:p.index}],o)}return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed node removal requires a writable array target"}}let s=Go(r,i,this.graph.getTextProvenance?.(r.key,0)??null);if(s)return{ok:!1,errorCode:"unsupported-operation",reason:s};let a=this.getRepeatBackedTemplateStructureReason(r);if(a)return{ok:!1,errorCode:"unsupported-operation",reason:a};let c=await this.getUpstreamBackedDescendantReason(r);if(c)return{ok:!1,errorCode:"unsupported-operation",reason:c};let l=[{order:0,file:r.file,type:"remove-node",locator:he(r),removeWhitespace:!0}],u=this.buildRemoveComponentImportStep(r);return u&&l.push({...u,order:l.length}),this.buildPlan(t,n,l,o)}buildRemoveComponentImportStep(t,n=this.graph.getFileContent(t.file)){if(!t.importedFrom||!t.exportName||!t.tag||aS(n,t)>1)return null;let r=Ys(t.file,t.importedFrom);return{order:0,file:t.file,type:"remove-import",moduleSpecifier:r,imports:t.exportName==="default"?[{kind:"default"}]:[{kind:"named",imported:t.exportName}]}}async planInsertChild(t,n,r,o,i){if(!zo(n.params.position))return{ok:!1,errorCode:"unsupported-operation",reason:"Page composition insert-child requires the page composition transaction planner"};if(n.params.node.kind==="component-call"&&!n.params.node.component)return{ok:!1,errorCode:"unsupported-operation",reason:"Materialized component insertion requires the materialization transaction planner"};if(!o.canInsertChild)return{ok:!1,errorCode:"capability-denied",reason:"Cannot insert child into this node"};let s=this.graph.getEditableTextSegmentIndex(r.key),a=s!==null?await this.graph.getTextWriteTarget(r.key,s):null,c=Go(r,a,s!==null?this.graph.getTextProvenance?.(r.key,s)??null:null);if(c)return{ok:!1,errorCode:"unsupported-operation",reason:c};let l=await this.getUpstreamBackedDescendantReason(r);if(l)return{ok:!1,errorCode:"unsupported-operation",reason:l};let u=await this.planExternalBackedInsertChild(t,n,r,o,i,a);if(u)return u;let d=await this.planRepeatBackedInsertChild(t,n,r,o);if(d)return d;let p=this.getRepeatBackedTemplateStructureReason(r);if(p)return{ok:!1,errorCode:"unsupported-operation",reason:p};let m=Hu(this.graph.getFileContent(r.file),r);if(!m.allowed)return{ok:!1,errorCode:"unsupported-operation",reason:m.reason??"Cannot insert child into this node"};let g=Ho(r,n.params.node);if(g)return{ok:!1,errorCode:"unsupported-operation",reason:g};let b=[],C=0,I=n.params.node.kind==="component-call"?rS(n.params.node,this.graph.getFileContent(r.file)):void 0,w=I?.importStep;return w&&b.push({order:C++,file:r.file,type:"add-import",moduleSpecifier:w.moduleSpecifier,imports:w.imports}),b.push({order:C++,file:r.file,type:"insert-child",parentLocator:he(r),node:{jsx:oS(n.params.node,I?.localName)},placement:n.params.position.relation,anchorLocator:i?he(i):void 0}),this.buildPlan(t,n,b,o)}async planExternalBackedInsertChild(t,n,r,o,i,s){if(!zo(n.params.position))return{ok:!1,errorCode:"unsupported-operation",reason:"Page composition insert-child requires the page composition transaction planner"};let a=s?.kind==="external-entry"?s:await this.findExternalInsertContext(r,i);if(!a)return null;let c=i?await this.graph.getTextWriteTarget(i.key,0):null;return this.buildPlan(t,n,[{order:0,file:`external:${a.sourceId}`,type:"invoke-external-adapter",sourceType:a.sourceType,sourceId:a.sourceId,adapterId:a.adapterId,capability:"insert-child",value:{operation:"insert-child",relation:n.params.position.relation,parentKey:r.key,anchorSourceId:c?.kind==="external-entry"?c.sourceId:null,node:iS(n.params.node)}}],o)}async findExternalInsertContext(t,n){if(n){let o=await this.graph.getTextWriteTarget(n.key,0);if(o?.kind==="external-entry")return o}if(!this.graph.getChildNodes)return null;let r=[...this.graph.getChildNodes(t.key)];for(;r.length>0;){let o=r.shift();if(!o)continue;let i=await this.graph.getTextWriteTarget(o.key,0);if(i?.kind==="external-entry")return i;let s=this.graph.getTextProvenance?.(o.key,0)?.finalSource?.externalSource;if(s)return{kind:"external-entry",file:`external:${s.sourceId}`,sourceType:s.sourceType,sourceId:s.sourceId,adapterId:s.adapterId,displayExpression:s.sourceId};r.push(...this.graph.getChildNodes(o.key))}return null}async planRepeatBackedInsertChild(t,n,r,o){if(!zo(n.params.position))return{ok:!1,errorCode:"unsupported-operation",reason:"Page composition insert-child requires the page composition transaction planner"};if(n.params.position.relation!=="append"&&n.params.position.relation!=="prepend")return null;let i=n.params.node;if(i.kind!=="native-tag"||i.text===void 0||!this.graph.getChildNodes)return null;let s=this.graph.getChildNodes(r.key).find(d=>d.isRepeatItemRoot&&d.tag?.toLowerCase()===i.tag.toLowerCase());if(!s)return null;let a=await this.graph.getTextWriteTarget(s.key,0);if(!a||a.kind!=="value-binding"||!a.locator)return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed insert-child requires a writable value target"};let c=Er(a.locator);if(!c)return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed insert-child requires an array-backed target"};let l=lS(a.locator,i.text);if(l===void 0)return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed insert-child could not infer an item shape from the template"};let u=n.params.position.relation==="prepend"?Sd(0,a.collectionIndexMap):Sd(a.collectionIndexMap?.length??c.index+1,a.collectionIndexMap);return this.buildPlan(t,n,[{order:0,file:a.file,type:"insert-bound-array-item",locator:c.locator,index:u,value:l}],o)}async getUpstreamBackedDescendantReason(t){if(!this.graph.getChildNodes)return null;let n=[...this.graph.getChildNodes(t.key)];for(;n.length>0;){let r=n.shift();if(!r)continue;let o=this.graph.getEditableTextSegmentIndex(r.key),i=o!==null?await this.graph.getTextWriteTarget(r.key,o):null,s=Go(r,i,o!==null?this.graph.getTextProvenance?.(r.key,o)??null:null);if(s)return s;n.push(...this.graph.getChildNodes(r.key))}return null}getRepeatBackedTemplateStructureReason(t){if(t.isRepeatItemRoot)return this.isRepeatTemplateRootNode(t)?"Cannot edit repeat-backed item template structure with a generic node operation":"Cannot edit repeat-backed child node structure with a generic node operation";if(t.structuralPath.includes("#repeat:")||this.isInsideMapCallback(t))return"Cannot edit repeat-backed child node structure with a generic node operation";let n=t.parentKey;for(;n;){let r=this.graph.getNode(n);if(!r)return null;if(r.isRepeatItemRoot||r.isRepeatRegion)return"Cannot edit repeat-backed child node structure with a generic node operation";n=r.parentKey}return null}isRepeatTemplateRootNode(t){let n=et(this.graph.getFileContent(t.file));if(!n)return t.isRepeatItemRoot===!0;let r=ie(n,he(t)),o=r.ok&&r.match.path.isJSXElement()?r.match.path:ta(n,t);if(!o)return t.isRepeatItemRoot===!0;let i=Nt(this.graph.getFileContent(t.file),o);return i?gb(o,i):t.isRepeatItemRoot===!0}isInsideMapCallback(t){let n=et(this.graph.getFileContent(t.file));if(!n)return!1;let r=ie(n,he(t)),o=r.ok&&r.match.path.isJSXElement()?r.match.path:ta(n,t);return o?!!o.findParent(i=>{if(!i.isCallExpression()&&!i.isOptionalCallExpression())return!1;let s=i.node.callee;return(S.isMemberExpression(s)||S.isOptionalMemberExpression(s))&&S.isIdentifier(s.property)&&s.property.name==="map"}):!1}planRepeatTemplateInternalMove(t,n,r,o,i,s,a){if(r.isRepeatItemRoot&&this.isRepeatTemplateRootNode(r)||r.file!==o.file)return null;let c=this.graph.getFileContent(r.file),l=et(c);if(!l)return null;let u=zt(l,r),d=zt(l,o);if(!u||!d)return null;let p=Nt(c,u),m=Nt(c,d);if(!Wo(p,m))return null;if(a&&(s==="before"||s==="after")){let b=zt(l,a),C=b?Nt(c,b):null;if(!Wo(p,C))return null}if(Ws(u,d))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child across statement-level conditional branches"};let g=sd(c,r,o);return g.ok?this.buildPlan(t,n,[{order:0,file:r.file,type:"move-node",locator:he(r),targetParentLocator:he(o),placement:s,anchorLocator:a?he(a):void 0,selectionContext:Jn(o)}],i):{ok:!1,errorCode:"unsupported-operation",reason:g.reason??`Cannot move node because it depends on bindings outside the target scope: ${g.bindingNames.join(", ")}`}}planRepeatTemplateHoistMove(t,n,r,o,i,s,a){if(r.isRepeatItemRoot&&this.isRepeatTemplateRootNode(r)||r.file!==o.file)return null;let c=this.graph.getFileContent(r.file),l=et(c);if(!l)return null;let u=zt(l,r),d=zt(l,o);if(!u||!d)return null;let p=Nt(c,u);if(!p)return null;let m=Nt(c,d);if(Wo(p,m))return null;if(m&&!xb(m,p))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child into a different repeat template"};if(a&&(s==="before"||s==="after")){let P=ad(c,l,a);if(m&&!Wo(m,P)||!m&&P)return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child relative to a repeat-template anchor outside the target scope"}}if(r.tag&&r.tag.toLowerCase()===r.tag){let P=Ho(o,{kind:"native-tag",tag:r.tag});if(P)return{ok:!1,errorCode:"unsupported-operation",reason:P}}let g=Xs(this.graph,r);if(!g)return{ok:!1,errorCode:"locator-miss",reason:"Cannot move repeat-backed child outside its repeat template without preserving the repeat expression"};if(Ws(u,d))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child out of a statement-level conditional branch"};let b=gd(c,u,d,g);for(let P of b.conditionPaths){let O=ud(P,d,p);if(!O.ok)return{ok:!1,errorCode:"unsupported-operation",reason:`Cannot move repeat-backed child because its condition depends on bindings outside the target scope: ${O.bindingNames.join(", ")}`}}let C=ld(u,d,p,{preserveConditionalBoundary:b.conditionPaths.length>0});if(!C.ok)return{ok:!1,errorCode:"unsupported-operation",reason:C.reason??`Cannot move repeat-backed child because it depends on callback-local bindings: ${C.bindingNames.join(", ")}`};let I=bb(p,d);if(!I.ok)return{ok:!1,errorCode:"unsupported-operation",reason:`Cannot move repeat-backed child because its callback parameters depend on bindings outside the target scope: ${I.bindingNames.join(", ")}`};let w=p;if(r.component!==o.component){let P=Eb({source:c,ast:l,sourceContext:p,sourceNode:r,targetParent:o,targetParentPath:d});if(!P.ok)return{ok:!1,errorCode:"unsupported-operation",reason:P.reason};w=P.context}else{let P=vd(p.collectionPath,d);if(!P.ok)return{ok:!1,errorCode:"unsupported-operation",reason:P.reason??`Cannot move repeat-backed child because the repeat collection is not visible at the target: ${P.bindingNames.join(", ")}`}}return this.buildPlan(t,n,[{order:0,file:r.file,type:"move-repeat-template-child",locator:he(r),targetParentLocator:he(o),placement:s,anchorLocator:a?he(a):void 0,repeatExpression:md(w,b.sourceJsx),selectionContext:Jn(o)}],i)}planCrossFileRepeatTemplateHoistMove(t,n,r,o,i,s,a){if(r.isRepeatItemRoot&&this.isRepeatTemplateRootNode(r)||r.file===o.file)return null;let c=this.graph.getFileContent(r.file),l=this.graph.getFileContent(o.file),u=et(c),d=et(l);if(!u||!d)return null;let p=Ib({knownSourceFiles:this.graph.getKnownSourceFiles?.(),routeEntryFiles:this.graph.getRouteEntryFiles?.(),sourceAst:u,sourceFile:r.file,targetFile:o.file,sourceComponent:r.component,targetComponent:o.component});if(!p.ok)return{ok:!1,errorCode:"unsupported-operation",reason:p.reason};let m=zt(u,r),g=zt(d,o);if(!m||!g)return null;let b=jd(p.callSitePath,g);if(!b.ok)return{ok:!1,errorCode:"unsupported-operation",reason:b.reason};let C=Nt(c,m);if(!C)return null;if(Nt(l,g))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child into a different repeat template"};if(a&&(s==="before"||s==="after")&&ad(l,d,a))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child relative to a repeat-template anchor outside the target scope"};if(r.tag&&r.tag.toLowerCase()===r.tag){let M=Ho(o,{kind:"native-tag",tag:r.tag});if(M)return{ok:!1,errorCode:"unsupported-operation",reason:M}}let w=Xs(this.graph,r);if(!w)return{ok:!1,errorCode:"locator-miss",reason:"Cannot move repeat-backed child outside its repeat template without preserving the repeat expression"};if(Ws(m,g))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child out of a statement-level conditional branch"};let P=gd(c,m,g,w);for(let M of P.conditionPaths){let j=ud(M,g,C);if(!j.ok)return{ok:!1,errorCode:"unsupported-operation",reason:`Cannot move repeat-backed child because its condition depends on bindings outside the target scope: ${j.bindingNames.join(", ")}`}}let O=ld(m,g,C,{preserveConditionalBoundary:P.conditionPaths.length>0});if(!O.ok)return{ok:!1,errorCode:"unsupported-operation",reason:O.reason??`Cannot move repeat-backed child because it depends on callback-local bindings: ${O.bindingNames.join(", ")}`};let se=Ub({sourceFile:r.file,targetFile:o.file,sourceContext:C,targetParentPath:g});if(!se.ok)return{ok:!1,errorCode:"unsupported-operation",reason:se.reason};let re=Xb(C);if(!re.ok)return{ok:!1,errorCode:"unsupported-operation",reason:re.reason};let N=zb(C,re.callbackParams),z=[{order:0,file:r.file,type:"remove-node",locator:he(r),removeWhitespace:!0}];for(let M of se.imports)z.push({order:z.length,file:o.file,type:"add-import",moduleSpecifier:M.moduleSpecifier,imports:M.imports});return z.push({order:z.length,file:o.file,type:"insert-jsx-expression-child",parentLocator:he(o),expression:md(N,P.sourceJsx),placement:s,anchorLocator:a?he(a):void 0,selectionContext:Jn(o)}),this.buildPlan(t,n,z,i)}async planMoveNode(t,n,r,o){if(!o.canMove)return{ok:!1,errorCode:"capability-denied",reason:"Cannot move this node"};let i=bd(n.params.target,this.graph),s=i.parentNode;if(!s)return{ok:!1,errorCode:"locator-miss",reason:`Target parent for request '${n.id}' not found in graph`};if(cS(s.key,r.key,this.graph))return{ok:!1,errorCode:"capability-denied",reason:"Cannot move node into its own subtree"};if(r.isRepeatRegion&&s.isBoundary)return{ok:!1,errorCode:"capability-denied",reason:"Cannot move repeat-region node across boundary"};if(!this.graph.getCapability(s.key).canInsertChild)return{ok:!1,errorCode:"capability-denied",reason:"Cannot move node into this parent"};let a=await this.graph.getTextWriteTarget(r.key,0);if(a?.kind==="external-entry"){let I=n.params.target.relation,w=i.anchorNode&&(I==="before"||I==="after")?await this.graph.getTextWriteTarget(i.anchorNode.key,0):null;return this.buildPlan(t,n,[{order:0,file:`external:${a.sourceId}`,type:"invoke-external-adapter",sourceType:a.sourceType,sourceId:a.sourceId,adapterId:a.adapterId,capability:"move-node",value:{operation:"move-node",relation:I,anchorSourceId:w?.kind==="external-entry"?w.sourceId:null,parentKey:"parentKey"in n.params.target?n.params.target.parentKey:null}}],o)}let c=r.file!==s.file,l=n.params.target.relation,u=i.anchorNode,d=Go(r,a,this.graph.getTextProvenance?.(r.key,0)??null);if(d&&!zs(d))return{ok:!1,errorCode:"unsupported-operation",reason:d};if(r.isRepeatItemRoot&&u?.isRepeatItemRoot&&r.repeatOwnerKey&&r.repeatOwnerKey===u.repeatOwnerKey&&(l==="before"||l==="after")){let I=a,w=await this.graph.getTextWriteTarget(u.key,0);if(I?.kind==="value-binding"&&w?.kind==="value-binding"&&I.locator&&w.locator){let P=Er(I.locator),O=Er(w.locator);if(P&&O&&I.file===w.file&&fS(P.locator,O.locator)){let se=P.index,re=O.index,N=l==="before"?re-(se<re?1:0):re+(se<re?0:1);return this.buildPlan(t,n,[{order:0,file:I.file,type:"move-array-item",locator:P.locator,fromIndex:se,toIndex:N}],o)}}}if(r.isRepeatItemRoot&&this.isRepeatTemplateRootNode(r))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed item outside its collection"};let p=this.getRepeatBackedTemplateStructureReason(r),m=zs(d)?d:p;if(m&&zs(m)){let I=this.planRepeatTemplateInternalMove(t,n,r,s,o,l,u);if(I)return I;let w=this.planRepeatTemplateHoistMove(t,n,r,s,o,l,u);if(w)return w;let P=this.planCrossFileRepeatTemplateHoistMove(t,n,r,s,o,l,u);return P||{ok:!1,errorCode:"unsupported-operation",reason:m}}if(p)return{ok:!1,errorCode:"unsupported-operation",reason:p};let g=await this.getUpstreamBackedDescendantReason(r);if(g)return{ok:!1,errorCode:"unsupported-operation",reason:g};if(r.tag&&r.tag.toLowerCase()===r.tag){let I=Ho(s,{kind:"native-tag",tag:r.tag});if(I)return{ok:!1,errorCode:"unsupported-operation",reason:I}}if(c)return this.planCrossFileMove(t,n,r,s,o,l,u);let b=sd(this.graph.getFileContent(r.file),r,s);if(!b.ok)return{ok:!1,errorCode:"unsupported-operation",reason:b.reason??`Cannot move node because it depends on bindings outside the target scope: ${b.bindingNames.join(", ")}`};let C=[{order:0,file:r.file,type:"move-node",locator:he(r),targetParentLocator:he(s),placement:l,anchorLocator:u?he(u):void 0,selectionContext:Jn(s)}];return this.buildPlan(t,n,C,o)}planCrossFileMove(t,n,r,o,i,s,a){let c=[],l=0,u=this.graph.getFileContent(r.file),d=Xs(this.graph,r)??`<${r.component} />`,p=Gu(u,r);if(!p.allowed)return{ok:!1,errorCode:"unsupported-operation",reason:p.reason??"Cannot move subtree across files"};if(c.push({order:l++,file:r.file,type:"remove-node",locator:he(r),removeWhitespace:!0}),r.importedFrom&&r.exportName){let g=r.tag??r.component,C={moduleSpecifier:Ys(o.file,r.importedFrom),imports:r.exportName==="default"?[{kind:"default",local:g}]:[{kind:"named",imported:r.exportName,local:g===r.exportName?void 0:g}]};c.push({order:l++,file:o.file,type:"add-import",moduleSpecifier:C.moduleSpecifier,imports:C.imports}),c.push({order:l++,file:o.file,type:"insert-child",parentLocator:he(o),node:{jsx:d},placement:s,anchorLocator:a?he(a):void 0,selectionContext:Jn(o)})}else c.push({order:l++,file:o.file,type:"insert-child",parentLocator:he(o),node:{jsx:d},placement:s,anchorLocator:a?he(a):void 0,selectionContext:Jn(o)});let m=this.buildRemoveComponentImportStep(r,u);return m&&c.push({...m,order:l++}),this.buildPlan(t,n,c,i)}buildPlan(t,n,r,o){let s=[...new Set(r.map(a=>a.file))].map(a=>({file:a,content:this.graph.getFileContent(a),version:this.graph.getFileVersion(a),exists:!0,sha256:pe(this.graph.getFileContent(a))}));return{ok:!0,plan:{operationId:t,kind:n.kind,target:n.target,documentVersion:n.documentVersion,steps:r,preSnapshots:s,validatedCapability:o}}}};function hS(e){return{ok:!1,errorCode:e.errorCode==="readonly-property"?"capability-denied":e.errorCode==="missing-property-state"||e.errorCode==="repeat-target-failed"||e.errorCode==="unsupported-binding"?"unsupported-operation":"invalid-params",reason:e.reason}}import kr from"node:path";import*as Zd from"@babel/parser";import la from"@babel/traverse";import*as v from"@babel/types";var qd=typeof la=="function"?la:la.default;function Qd(e){return new Map([...e].map(t=>[t.file,{source:t.source,ast:t.ast}]))}var Vd=new WeakMap;function Ud(e,t,n){return{kind:"external",file:e,sourceType:"api-field",sourceId:t,displayPath:n,editMode:"readonly",diagnostics:[{code:"external-source-readonly",message:"Dynamic API data is read-only for content edits"}]}}async function ef(e){let{file:t,source:n,segment:r,readFile:o,exists:i}=e,s=e.fileCache??new Map,a=Ea(s,t,n);if(!a)return null;let c=va(a,r.sourceRange);if(!c)return null;let l=r.source??await ut({expression:c.node,scope:c.scope,source:n,currentFile:t,readFile:o,exists:i,fileCache:s,visited:new Set});if(!l){let m=await Pa({currentFile:t,expressionPath:c,readFile:o,exists:i,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:s,visited:new Set});if(!m)return null;if(m.kind==="external")return{kind:"external-entry",file:m.file,sourceType:m.sourceType,sourceId:m.sourceId,adapterId:m.adapterId,displayExpression:m.displayPath};let g={kind:"value",root:m.root,path:m.path.length>0?m.path:[]};return{kind:"value-binding",file:m.file,locator:g,root:m.root,path:m.path,displayExpression:m.displayExpression??wr(c.node,n),sourceKind:m.sourceKind,...m.collectionIndexMap?{collectionIndexMap:m.collectionIndexMap}:{},...m.collectionPathMap?{collectionPathMap:m.collectionPathMap}:{}}}let u=new Set,d=await JS({currentFile:t,expressionPath:c,segment:{...r,source:l},readFile:o,exists:i,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:s,visited:u});if(!d)return null;if(d.kind==="external")return{kind:"external-entry",file:d.file,sourceType:d.sourceType,sourceId:d.sourceId,adapterId:d.adapterId,displayExpression:d.displayPath};let p={kind:"value",root:d.root,path:d.path.length>0?d.path:[]};return{kind:"value-binding",file:d.file,locator:p,root:d.root,path:d.path,displayExpression:d.displayExpression??l.expression,sourceKind:d.sourceKind,...d.collectionIndexMap?{collectionIndexMap:d.collectionIndexMap}:{},...d.collectionPathMap?{collectionPathMap:d.collectionPathMap}:{}}}async function Wn(e){let{file:t,source:n,readFile:r,exists:o}=e,i=e.fileCache??new Map,s=Ea(i,t,n);if(!s)return null;let a=e.expression!==void 0?(e.sourceRange?of(s,n,e.expression,e.sourceRange):null)??Ca(s,n,e.expression):e.sourceRange?va(s,e.sourceRange):null;if(!a)return null;let c=SS(a),l=new Set,u=e.sourceInfo??await ut({expression:c.node,scope:c.scope,source:n,currentFile:t,readFile:r,exists:o,fileCache:i,visited:l}),d=u?await Xe({currentFile:t,expressionPath:c,sourceInfo:u,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:l}):await oE({currentFile:t,expressionPath:c,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:l});return bS(d,e.expression??wr(c.node,n))}async function Sa(e){let{file:t,source:n,readFile:r,exists:o}=e,i=e.fileCache??new Map,s=Ea(i,t,n);if(!s)return Je("unsupported-expression","Unable to parse source for provenance resolution");let a=new Set;return e.target.kind==="text-segment"?ES({file:t,source:n,ast:s,segment:e.target.segment,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:a}):vS({file:t,source:n,ast:s,candidate:e.target.candidate,readFile:r,exists:o,graph:e.graph,fileCache:i,visited:a})}function tf(e){try{return Zd.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Ea(e,t,n){let r=e.get(t);if(r?.source===n)return r.ast;let o=tf(n);return e.set(t,{source:n,ast:o}),o}function va(e,t){let n=null,r=-1;for(let o of Rr(e).expressions){let i=o.node.loc;if(!i||!Ia(i,t))continue;let s=(o.node.end??0)-(o.node.start??0);s>=r&&(n=o,r=s)}return n}function yS(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let o of Rr(e).expressions){if(!xS(o.node.loc,t))continue;let i=(o.node.end??0)-(o.node.start??0);i<=r&&(n=o,r=i)}return n}function nf(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let o of Rr(e).jsxElements){let i=o.node.loc;if(!i||!Ia(i,t))continue;let s=(o.node.end??0)-(o.node.start??0);s<=r&&(n=o,r=s)}return n}function Rr(e){let t=Vd.get(e);if(t)return t;let n={expressions:[],jsxElements:[]};return qd(e,{Expression(r){n.expressions.push(r)},JSXElement(r){n.jsxElements.push(r)}}),Vd.set(e,n),n}function xS(e,t){return e?e.start.line===t.startLine&&e.start.column===t.startColumn&&e.end.line===t.endLine&&e.end.column===t.endColumn:!1}function Ia(e,t){let n=Kd({line:e.start.line,column:e.start.column},{line:t.startLine,column:t.startColumn}),r=Kd({line:e.end.line,column:e.end.column},{line:t.endLine,column:t.endColumn});return n>=0&&r<=0}function rf(e){return e.loc?{startLine:e.loc.start.line,startColumn:e.loc.start.column,endLine:e.loc.end.line,endColumn:e.loc.end.column}:null}function Kd(e,t){return e.line!==t.line?e.line<t.line?-1:1:e.column!==t.column?e.column<t.column?-1:1:0}async function ut(e){if(v.isIdentifier(e.expression))return{kind:"identifier",expression:e.expression.name,base:e.expression.name,path:[]};if(!v.isMemberExpression(e.expression))return null;let t=await hf(e.expression,e.scope,e.currentFile,e.readFile,e.exists,e.fileCache,e.visited);return t?{kind:t.path.some(n=>n.kind==="index")?"index-expression":"member-expression",expression:wr(e.expression,e.source),base:t.base,path:t.path}:null}function bS(e,t){if(!e)return null;if(e.kind==="external")return{kind:"external-entry",file:e.file,sourceType:e.sourceType,sourceId:e.sourceId,adapterId:e.adapterId,displayExpression:e.displayPath};let n={kind:"value",root:e.root,path:e.path.length>0?e.path:[]};return{kind:"value-binding",file:e.file,locator:n,root:e.root,path:e.path,displayExpression:e.displayExpression??t,sourceKind:e.sourceKind,...e.collectionIndexMap?{collectionIndexMap:e.collectionIndexMap}:{},...e.collectionPathMap?{collectionPathMap:e.collectionPathMap}:{}}}function SS(e){if(e.isLogicalExpression()&&(e.node.operator==="||"||e.node.operator==="??")){let t=e.get("left");if(!Array.isArray(t)&&t.isExpression())return t}return e}function wr(e,t){if(t)return ka(e,t);let n=pE(e);return n?n.path.reduce((r,o)=>o.kind==="property"?`${r}.${o.name}`:`${r}[${o.index}]`,n.base):""}function ka(e,t){return e.start==null||e.end==null?"":t.slice(e.start,e.end)}function Ca(e,t,n){let r=null,o=Number.POSITIVE_INFINITY;for(let i of Rr(e).expressions){if(ka(i.node,t)!==n)continue;let s=(i.node.end??0)-(i.node.start??0);s<=o&&(r=i,o=s)}return r}function of(e,t,n,r){let o=null,i=Number.POSITIVE_INFINITY;for(let s of Rr(e).expressions){if(ka(s.node,t)!==n)continue;let a=s.node.loc;if(!a||!Ia(a,r))continue;let c=(s.node.end??0)-(s.node.start??0);c<=i&&(o=s,i=c)}return o}async function ES(e){let{file:t,source:n,ast:r,segment:o,readFile:i,exists:s,fileCache:a,visited:c}=e,l=va(r,o.sourceRange),u=o.source??(l?await ut({expression:l.node,scope:l.scope,source:n,currentFile:t,readFile:i,exists:s,fileCache:a,visited:c}):null);if(!u){if(!l)return IS(t,o.value);let p=await Pa({currentFile:t,expressionPath:l,readFile:i,exists:s,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:a,visited:c});return p?p.kind==="external"?Hd(t,p):ga(t,wr(l.node,n),p):kS({expression:l.node,scope:l.scope,currentFile:t,source:n,readFile:i,exists:s,fileCache:a,visited:c,functionCallContracts:e.functionCallContracts})}if(!l)return Je("unsupported-expression","Unable to locate text expression for provenance resolution");let d=await Xe({currentFile:t,expressionPath:l,sourceInfo:u,readFile:i,exists:s,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:a,visited:c});if(!d){let p=ma(l.node);if(p)return Je(p.code,p.message);let m=l.scope.getBinding(u.base);if(m?.path.isVariableDeclarator()){let g=ma(m.path.node.init);if(g)return Je(g.code,g.message)}return m?.path.isVariableDeclarator()&&v.isCallExpression(m.path.node.init)?CS("unsupported-expression",uf(m.path.node.init,e.functionCallContracts)):Je("unsupported-expression",`Unable to resolve provenance for expression "${u.expression}"`)}return d.kind==="external"?Hd(t,d):ga(t,u.expression,d)}async function vS(e){let{file:t,source:n,ast:r,candidate:o,readFile:i,exists:s,fileCache:a,visited:c}=e;if(!o.conditionSource)return Je("conditional-branch-unresolved",`Unable to resolve conditional branch source for "${o.conditionExpression}"`);let l=Ca(r,n,o.conditionExpression);if(!l)return Je("conditional-branch-unresolved",`Unable to locate conditional expression "${o.conditionExpression}"`);let u=await Xe({currentFile:t,expressionPath:l,sourceInfo:o.conditionSource,readFile:i,exists:s,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:a,visited:c});if(!u)return Je("conditional-branch-unresolved",`Unable to resolve conditional branch source for "${o.conditionExpression}"`);if(u.kind==="external")return Je("conditional-branch-unresolved",`Unable to resolve conditional branch source for "${o.conditionExpression}"`);let d=ga(t,o.conditionExpression,u);return d.finalSource?{...d,finalSource:{...d.finalSource,kind:"conditional-branch",displayPath:o.conditionExpression},chain:[...d.chain,{kind:"conditional-branch",file:u.file,displayName:o.conditionExpression,canEditHere:!0}]}:d}function IS(e,t){return{finalSource:{kind:"jsx-literal",file:e,locator:null,displayPath:t},chain:[{kind:"jsx-literal",file:e,displayName:t,canEditHere:!0}],confidence:"exact",editMode:"direct",diagnostics:[]}}async function kS(e){let t=await af(e);if(t.length===0)return Je("unsupported-expression",`Unsupported expression type: ${e.expression.type}`);if(RS(e.expression))return sf(t);if(lf(e.expression))return Je("unsupported-expression","i18n helpers require a static message id string");if(v.isMemberExpression(e.expression)&&e.expression.computed&&!v.isNumericLiteral(e.expression.property)&&!v.isStringLiteral(e.expression.property))return Je("dynamic-key","Computed member expressions are not supported for provenance resolution");let[n]=t;return Je(n.code,n.message)}function Je(e,t){return{finalSource:null,chain:[],confidence:"unknown",editMode:"unsupported",diagnostics:[{code:e,message:t}]}}function CS(e,t){return sf([{code:e,message:t}])}function sf(e){return{finalSource:null,chain:[],confidence:"partial",editMode:"readonly",diagnostics:e}}function RS(e){return v.isCallExpression(e)||v.isConditionalExpression(e)||v.isLogicalExpression(e)||v.isBinaryExpression(e)}function Cr(e){let t=new Set;return e.filter(n=>{let r=`${n.code}:${n.message}`;return t.has(r)?!1:(t.add(r),!0)})}async function af(e){let{expression:t,scope:n,currentFile:r,readFile:o,exists:i,fileCache:s,visited:a,functionCallContracts:c}=e,l=ma(t);if(l)return[l];if(v.isCallExpression(t))return[{code:"unsupported-expression",message:uf(t,c)}];if(v.isMemberExpression(t)&&t.computed){let u=t.property;if(!v.isNumericLiteral(u)&&!v.isStringLiteral(u)){if(!v.isExpression(u))return[{code:"dynamic-key",message:"Computed member expressions are not supported for provenance resolution"}];let p=await dt(u,n,r,o,i,s,a);if(typeof p!="string"&&!Number.isInteger(p))return[{code:"dynamic-key",message:"Computed member expressions are not supported for provenance resolution"}]}}return v.isBinaryExpression(t)?Cr([...await ua(t.left,t.right,e),{code:"unsupported-expression",message:"Mixed expressions are recognized but remain readonly until a safer composition editing strategy is available"}]):v.isLogicalExpression(t)?Cr([...await ua(t.left,t.right,e),{code:"unsupported-expression",message:t.operator==="??"||t.operator==="||"?"Fallback expressions are recognized but remain readonly until a safer composition editing strategy is available":"Complex conditional expressions are recognized but remain readonly until a safer editing strategy is available"}]):v.isConditionalExpression(t)?Cr([...await ua(t.test,t.consequent,t.alternate,e),{code:"unsupported-expression",message:"Complex conditional expressions are recognized but remain readonly until a safer editing strategy is available"}]):[]}function ma(e){return lf(e)?Jd("i18n helpers require a static message id string"):TS(e)?Jd("CMS helpers require static entry id and field path string arguments"):null}async function ua(...e){let t=e[e.length-1],n=e.slice(0,-1),r=[];for(let o of n)r.push(...await af({...t,expression:o}));return r}function wS(e,t){let n=(t??[]).filter(r=>r.sourceType===e.sourceType&&(r.capabilities===void 0||r.capabilities.includes("write-text")));if(e.adapterId){let r=n.find(o=>o.adapterId===e.adapterId);if(r)return{adapterId:r.adapterId,editMode:"proxy",diagnostics:[]}}else if(n.length>0)return{adapterId:n[0]?.adapterId,editMode:"proxy",diagnostics:[]};return{adapterId:void 0,editMode:"readonly",diagnostics:[NS(e.sourceType)]}}async function Ra(e){for(let n of MS){if(!Xd(e.expressionPath,n.helperNames))continue;let r=await n.resolve(e);if(r)return Wd(zd(r),e.externalAdapters)}let t={currentFile:e.currentFile,expressionPath:e.expressionPath,readFile:e.readFile,exists:e.exists,graph:e.graph};for(let n of e.externalSourceResolvers??[]){if(!Xd(e.expressionPath,n.helperNames))continue;let r=await n.resolve(t);if(r)return Wd(zd(r),e.externalAdapters)}return null}function NS(e){return{code:"missing-adapter",message:`No external adapter is registered for ${e}`}}function PS(e){return{code:"external-source-readonly",message:e}}function Jd(e){return{code:"unsupported-expression",message:e}}function wa(e){return!e||!v.isCallExpression(e)?null:v.isIdentifier(e.callee)?e.callee.name:v.isMemberExpression(e.callee)&&!e.callee.computed&&v.isIdentifier(e.callee.object)&&v.isIdentifier(e.callee.property)?`${e.callee.object.name}.${e.callee.property.name}`:null}function Xd(e,t){if(!t||t.length===0)return!0;let n=wa(e.node);return n?t.includes(n):!1}function zd(e){return"match"in e?{match:e.match,editMode:e.editMode,diagnostics:Cr(e.diagnostics??[])}:{match:e,diagnostics:[]}}function Wd(e,t){let n=wS(e.match,t);return{kind:"external",file:e.match.file,sourceType:e.match.sourceType,sourceId:e.match.sourceId,adapterId:e.match.adapterId??n.adapterId,displayPath:e.match.displayPath,editMode:e.editMode==="readonly"?"readonly":n.editMode,diagnostics:Cr([...e.diagnostics,...e.editMode==="readonly"||n.editMode==="readonly"?n.diagnostics:[]])}}function AS(e){if(!e.isCallExpression())return null;let t=e.node.callee;if(!v.isIdentifier(t)||t.name!=="getCmsField")return null;let[n,r]=e.node.arguments;if(!n||!r||!v.isStringLiteral(n)||!v.isStringLiteral(r))return null;let o=n.value,i=r.value;return{sourceType:"cms-field",sourceId:`${o}:${i}`,file:`cms://${o}/${i.replace(/\./g,"/")}`,displayPath:`${o}.${i}`}}function TS(e){return!!e&&v.isCallExpression(e)&&v.isIdentifier(e.callee)&&e.callee.name==="getCmsField"&&(e.arguments.length<2||!v.isStringLiteral(e.arguments[0])||!v.isStringLiteral(e.arguments[1]))}function cf(e){if(!(!e||!v.isCallExpression(e))){if(v.isIdentifier(e.callee)&&e.callee.name==="t"){let[t]=e.arguments;return t&&v.isStringLiteral(t)?t.value:null}if(v.isMemberExpression(e.callee)&&!e.callee.computed&&v.isIdentifier(e.callee.object)&&e.callee.object.name==="intl"&&v.isIdentifier(e.callee.property)&&e.callee.property.name==="formatMessage"){let[t]=e.arguments;if(!t||!v.isObjectExpression(t))return null;for(let n of t.properties)if(v.isObjectProperty(n)&&!n.computed&&(v.isIdentifier(n.key)&&n.key.name==="id"||v.isStringLiteral(n.key)&&n.key.value==="id")&&v.isStringLiteral(n.value))return n.value.value;return null}}}function lf(e){return cf(e)===null}async function _S(e,t,n){let r=new Set,o=kr.posix.dirname(e);for(;r.add(o),!(o==="."||o==="/");){let i=kr.posix.dirname(o);if(i===o){r.add(".");break}o=i}r.add("src"),r.add(".");for(let i of r){let s=i==="."?["locales","messages"]:[kr.posix.join(i,"locales"),kr.posix.join(i,"messages")];for(let a of s){let c=kr.posix.join(a,`${t}.json`);if(await n(c))return c}}return null}async function FS(e){let t=cf(e.expressionPath.node);if(typeof t!="string"||t.length===0)return null;let n="en",r=await _S(e.currentFile,n,e.exists);return r?{sourceType:"i18n-message",sourceId:`${n}:${t}`,file:r,displayPath:t}:null}async function OS(e){if(!e.expressionPath.isCallExpression())return null;let t=e.expressionPath.node.callee;if(!v.isIdentifier(t)||t.name!=="apiField")return null;let[n,r]=e.expressionPath.node.arguments;if(!n||!v.isExpression(n))return null;let o=await dt(n,e.expressionPath.scope,e.currentFile,e.readFile,e.exists,e.fileCache,e.visited);if(typeof o!="string"||o.length===0)return null;let i={sourceType:"api-field",sourceId:o,file:`api://${o}`,displayPath:o};return r?{match:i,editMode:"readonly",diagnostics:[PS("API mapping transforms must stay readonly until a reversible mapping strategy is registered")]}:i}var MS=[{helperNames:["getCmsField"],resolve:({expressionPath:e})=>AS(e)},{helperNames:["apiField"],resolve:e=>OS(e)},{helperNames:["t","intl.formatMessage"],resolve:({currentFile:e,expressionPath:t,exists:n})=>FS({currentFile:e,expressionPath:t,exists:n})}];function Hd(e,t){return{finalSource:{kind:t.sourceType,file:t.file,locator:null,displayPath:t.displayPath,externalSource:{sourceType:t.sourceType,sourceId:t.sourceId,adapterId:t.adapterId}},chain:[...t.chainPrefix??[],{kind:t.sourceType,file:t.file,displayName:t.displayPath,canEditHere:t.editMode!=="readonly"}],confidence:"exact",editMode:t.editMode==="direct"?t.file===e?"direct":"proxy":t.editMode,diagnostics:t.diagnostics}}function ga(e,t,n){let r={kind:"value",root:n.root,path:n.path.length>0?n.path:[]},o=n.path.some(l=>l.kind==="index"),i=KS(n),s;n.semanticKind?s=n.semanticKind:i?s="config-entry":n.sourceKind==="repeat-template"?s="repeat-template":n.path.length===0?s=n.sourceKind==="imported-binding"?"imported-binding":"binding":s=o?"array-item":"object-field";let a=n.displayExpression??t,c=[...n.chainPrefix??[]];return n.sourceKind==="binding"?c.push({kind:"binding",file:n.file,displayName:n.root.kind==="binding"?n.root.name:a,canEditHere:!0}):n.sourceKind==="imported-binding"?c.push({kind:"imported-binding",file:n.file,displayName:n.root.kind==="named-export"?n.root.name:"default",canEditHere:!0}):n.sourceKind==="repeat-template"&&c.push({kind:"repeat-template",file:n.file,displayName:t,canEditHere:!0}),n.path.length>0&&n.sourceKind!=="repeat-template"&&c.push({kind:o?"array-item":"object-field",file:n.file,displayName:a,canEditHere:!0}),i&&c.push({kind:"config-entry",file:n.file,displayName:i.displayPath,canEditHere:!0}),{finalSource:{kind:s,file:n.file,locator:r,root:n.root,path:n.path,displayPath:a,externalSource:i?{sourceType:"config-entry",sourceId:i.sourceId}:void 0},chain:c,confidence:n.sourceKind==="repeat-template"?"safe-derived":"exact",editMode:n.editMode??(n.file===e?"direct":"proxy"),diagnostics:n.diagnostics??[]}}var DS=[{helperName:"formatPrice",purity:"pure",sourceArgIndex:0},{helperName:"formatDate",purity:"pure",sourceArgIndex:0},{helperName:"pickLabel",purity:"pure",sourceArgIndex:0}];function Na(e,t){let n=[...DS,...t??[]];for(let r=n.length-1;r>=0;r-=1){let o=n[r];if(o?.helperName===e)return o}return null}function uf(e,t){let n=e.callee;return v.isIdentifier(n)&&Na(n.name,t)?.purity==="side-effect"?`Helper "${n.name}" is registered as side-effectful and remains readonly`:"Function calls are recognized but remain readonly until a pure-call strategy is registered"}async function Pa(e){let t=await Ra(e);if(t)return t;let n=await df({...e,expressionPath:e.expressionPath});if(n)return n;if(e.expressionPath.isTemplateLiteral()){let r=e.expressionPath.node.expressions[0],o=e.expressionPath.get("expressions.0");if(e.expressionPath.node.expressions.length===1&&r&&o&&!Array.isArray(o)&&o.isExpression()){let i=await ut({expression:o.node,scope:o.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(i){let s=await Xe({...e,expressionPath:o,sourceInfo:i});if(s&&s.kind==="value")return{...s,displayExpression:i.expression,editMode:"readonly",diagnostics:[{code:"unsupported-expression",message:"Mixed expressions are recognized but remain readonly until a safer composition editing strategy is available"}]}}}}return await VS(e)}async function df(e){let t=await ct({...e,allowComposed:!1});return t?.kind==="source"?t.provenance:null}async function ct(e){let t=LS(e.expressionPath),n=$S(e.currentFile,t.node);if(n&&e.visited.has(n))return null;n&&e.visited.add(n);try{if(t.isStringLiteral()||t.isNumericLiteral()||t.isBooleanLiteral()||t.isNullLiteral())return{kind:"none"};if(t.isIdentifier()){let r=await ut({expression:t.node,scope:t.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(!r)return null;let o=await Xe({currentFile:e.currentFile,expressionPath:t,sourceInfo:r,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return!o||o.kind==="external"?null:{kind:"source",provenance:o}}if(t.isMemberExpression()){let r=await ut({expression:t.node,scope:t.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(!r)return null;let o=await Xe({currentFile:e.currentFile,expressionPath:t,sourceInfo:r,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return!o||o.kind==="external"?null:{kind:"source",provenance:o}}if(t.isConditionalExpression()){let r=t.get("test"),o=t.get("consequent"),i=t.get("alternate");if(Array.isArray(r)||Array.isArray(o)||Array.isArray(i)||!r.isExpression()||!o.isExpression()||!i.isExpression())return null;let s=await ct({...e,expressionPath:r,allowComposed:!0}),a=await ct({...e,expressionPath:o,allowComposed:!1}),c=await ct({...e,expressionPath:i,allowComposed:!1});return da(s,a,c)}if(t.isCallExpression())return BS({...e,expressionPath:t});if(!e.allowComposed)return null;if(t.isBinaryExpression()){let r=t.get("left"),o=t.get("right");if(Array.isArray(r)||Array.isArray(o)||!r.isExpression()||!o.isExpression())return null;let i=await ct({...e,expressionPath:r,allowComposed:!0}),s=await ct({...e,expressionPath:o,allowComposed:!0});return da(i,s)}if(t.isLogicalExpression()){let r=t.get("left"),o=t.get("right");if(Array.isArray(r)||Array.isArray(o)||!r.isExpression()||!o.isExpression())return null;let i=await ct({...e,expressionPath:r,allowComposed:!0}),s=await ct({...e,expressionPath:o,allowComposed:!0});return da(i,s)}if(t.isUnaryExpression()){let r=t.get("argument");return Array.isArray(r)||!r.isExpression()?null:ct({...e,expressionPath:r,allowComposed:!0})}return null}finally{n&&e.visited.delete(n)}}function LS(e){let t=e;for(;t.isParenthesizedExpression()||t.isTSAsExpression()||t.isTSSatisfiesExpression()||t.isTSNonNullExpression()||t.isTSTypeAssertion();){let n=t.get("expression");if(Array.isArray(n)||!n.isExpression())return t;t=n}return t}async function BS(e){let t=wa(e.expressionPath.node);if(t==="Math.round"||t==="Math.floor"||t==="Math.ceil"||t==="Math.trunc"||t==="useCountUp"){let r=e.expressionPath.get("arguments.0");return!r||Array.isArray(r)||!r.isExpression()?null:ct({...e,expressionPath:r,allowComposed:!1})}let n=e.expressionPath.get("callee");if(n.isMemberExpression()&&!n.node.computed){let r=n.node.property;if(v.isIdentifier(r)&&(r.name==="toFixed"||r.name==="toString")){let o=n.get("object");return Array.isArray(o)||!o.isExpression()?null:ct({...e,expressionPath:o,allowComposed:!1})}}return null}function da(...e){let t=null;for(let n of e){if(!n)return null;if(n.kind!=="none"){if(!t){t=n.provenance;continue}if(!jS(t,n.provenance))return null}}return t?{kind:"source",provenance:t}:{kind:"none"}}function jS(e,t){return e.file===t.file&&e.sourceKind===t.sourceKind&&JSON.stringify(e.root)===JSON.stringify(t.root)&&JSON.stringify(e.path)===JSON.stringify(t.path)&&JSON.stringify(e.collectionIndexMap??null)===JSON.stringify(t.collectionIndexMap??null)&&JSON.stringify(e.collectionPathMap??null)===JSON.stringify(t.collectionPathMap??null)}function $S(e,t){return t.start==null||t.end==null?null:`safe-derived:${e}:${t.start}:${t.end}`}async function VS(e){if(!e.expressionPath.isCallExpression())return null;let t=wa(e.expressionPath.node);if(!t)return null;let n=Na(t,e.functionCallContracts);if(!n||n.purity!=="pure")return null;let r=n.sourceArgIndex??0,o=e.expressionPath.get(`arguments.${r}`);return!o||Array.isArray(o)||!o.isExpression()?null:await ff({currentFile:e.currentFile,argumentPath:o,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited})}async function ff(e){let t=await Ra({currentFile:e.currentFile,expressionPath:e.argumentPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(t)return t;let n=await ut({expression:e.argumentPath.node,scope:e.argumentPath.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(n){let r=await Xe({currentFile:e.currentFile,expressionPath:e.argumentPath,sourceInfo:n,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return!r||r.kind==="external"?r:{...r,displayExpression:n.expression}}return await Pa({currentFile:e.currentFile,expressionPath:e.argumentPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited})}async function US(e){if(!e.binding.path.isVariableDeclarator())return null;let t=e.binding.path.node.init;if(!t||!v.isCallExpression(t))return null;let n=t.callee;if(!v.isIdentifier(n))return null;let r=Na(n.name,e.functionCallContracts);if(!r||r.purity!=="pure")return null;let o=r.sourceArgIndex??0,i=e.binding.path.get("init");if(!i||Array.isArray(i)||!i.isCallExpression())return null;let s=i.get(`arguments.${o}`);return!s||Array.isArray(s)||!s.isExpression()?null:await ff({currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited,argumentPath:s})}function KS(e){if(e.sourceKind!=="imported-binding")return null;let t=e.root.kind==="binding"||e.root.kind==="named-export"?e.root.name:e.root.kind==="default-export"?"default":null;if(!t)return null;let n=/(^|[\/.-])(config|settings)([\/.-]|$)/i.test(e.file),r=/config|settings/i.test(t);if(!n&&!r)return null;let o=Qo(t,e.path);return{sourceId:o,displayPath:o}}async function JS(e){let t=e.segment.source;return t?Xe({currentFile:e.currentFile,expressionPath:e.expressionPath,sourceInfo:t,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited}):null}async function Xe(e){let t=e.sourceInfo,n=pf(e.expressionPath,t.base);if(n){let l=await mf({currentFile:e.currentFile,callPath:n.callPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,fileCache:e.fileCache,visited:e.visited});if(!l){let b=zS(n.callPath,[...n.basePath,...t.path]);return gr(b)?Ud(e.currentFile,b.sourceId,b.displayPath):null}let u=mE(l,[...n.basePath,...t.path]),d=l.collectionIndexMap?.[0]??0,p=[...l.pathPrefix??[],{kind:"index",index:d},...n.basePath,...t.path],m=[{kind:"index",index:0},...n.basePath,...t.path];return lt(l.value,m)===void 0?null:{kind:"value",file:l.file,root:l.root,path:u?.[0]??p,sourceKind:"repeat-template",collectionIndexMap:l.collectionIndexMap,...u?{collectionPathMap:u}:{}}}let r=e.expressionPath.scope.getBinding(t.base);if(!r)return null;if(r.path.isImportNamespaceSpecifier()){let l=t.path[0],u=r.path.parentPath;if(!l||l.kind!=="property"||!u?.isImportDeclaration())return null;let d=await Nn(e.currentFile,u.node.source.value,e.exists);if(!d)return null;let p=await qo({file:d,exportName:l.name,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!p||p.kind==="external")return null;let m=t.path.slice(1);return lt(p.value,m)===void 0?null:{kind:"value",file:p.file,root:p.root,path:m,sourceKind:"imported-binding",collectionIndexMap:p.collectionIndexMap}}let o=qu(r);if(o){let l=o.expressionPath,u=await ut({expression:l.node,scope:l.scope,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(u){let d=await Xe({...e,expressionPath:l,sourceInfo:{...u,expression:Qo(u.expression,t.path),path:[...u.path,...t.path]}});if(d)return d}if(t.path.length===0){let d=await df({currentFile:e.currentFile,expressionPath:l,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(d)return d}}if(r.kind==="param")return lE({currentFile:e.currentFile,binding:r,sourceInfo:t,graph:e.graph,readFile:e.readFile,exists:e.exists,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});let i=await US({currentFile:e.currentFile,binding:r,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(i)return i;let s=Vo(r,t.path);if(gr(s))return Ud(e.currentFile,s.sourceId,s.displayPath);let a=await gn({currentFile:e.currentFile,binding:r,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return a?a.kind==="external"?t.path.length===0?a:null:lt(a.value,t.path)===void 0?null:{kind:"value",file:a.file,root:a.root,path:t.path,sourceKind:a.sourceKind,collectionIndexMap:a.collectionIndexMap}:null}function pf(e,t){let n=e.scope.getBinding(t);if(!n)return null;let r=n.path.getFunctionParent();if(!r||!r.isArrowFunctionExpression()&&!r.isFunctionExpression())return null;let o=r.node.params[0],i=it(o,t);if(!i)return null;let s=r.parentPath;return!s||!s.isCallExpression()||!XS(s,r)?null:{callPath:s,basePath:i}}function XS(e,t){let n=e.node.callee;return!v.isMemberExpression(n)||!v.isIdentifier(n.property)||n.property.name!=="map"?!1:e.node.arguments.some(r=>r===t.node)}async function mf(e){let{currentFile:t,callPath:n,readFile:r,exists:o,fileCache:i,visited:s}=e,a=n.node.callee;if(!v.isMemberExpression(a)||!v.isIdentifier(a.property)||a.property.name!=="map")return null;let c=n.get("callee");if(!c.isMemberExpression())return null;let l=c.get("object");if(Array.isArray(l)||!l.isExpression())return null;let u=await Nr({currentFile:t,expressionPath:l,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});return!u||!Array.isArray(u.value)||u.value.length===0?null:u}function zS(e,t){let n=e.get("callee");if(!n.isMemberExpression())return null;let r=n.get("object");return Array.isArray(r)||!r.isExpression()?null:Ko(r,t)}async function Nr(e){let{currentFile:t,expressionPath:n,readFile:r,exists:o,fileCache:i,visited:s}=e;if(n.isIdentifier()){let a=n.scope.getBinding(n.node.name);if(!a)return null;let c=await gn({currentFile:t,binding:a,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});return c?.kind==="static"?c:null}if(n.isCallExpression())return gf({currentFile:t,callPath:n,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(n.isTSAsExpression()||n.isTSSatisfiesExpression()||n.isTSNonNullExpression()){let a=n.get("expression");if(!Array.isArray(a)&&a.isExpression())return Nr({...e,expressionPath:a})}if(n.isArrayExpression()){let a=rf(n.node);if(!a)return null;let c=await dt(n.node,n.scope,t,r,o,i,s);return Array.isArray(c)?{kind:"static",file:t,root:{kind:"expression",sourceRange:a},value:c,sourceKind:"binding"}:null}if(n.isMemberExpression()){let a=await ut({expression:n.node,scope:n.scope,currentFile:t,readFile:r,exists:o,fileCache:i,visited:s});if(!a)return null;let c=await Xe({currentFile:t,expressionPath:n,sourceInfo:a,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(!c||c.kind==="external")return null;let l=await WS({currentFile:t,expressionPath:n,provenance:c,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(!l||l.kind!=="static")return null;if(c.collectionPathMap?.length){let d=gE(l.value,c.collectionPathMap);if(d)return{kind:"static",file:c.file,root:c.root,value:d.value,sourceKind:c.sourceKind,collectionPathMap:d.collectionPathMap}}let u=lt(l.value,c.path);return Array.isArray(u)?{kind:"static",file:c.file,root:c.root,value:u,sourceKind:c.sourceKind,pathPrefix:c.path,collectionIndexMap:c.collectionIndexMap,collectionPathMap:c.collectionPathMap}:null}return null}async function WS(e){let{provenance:t}=e;if(t.root.kind==="binding"){let i=e.expressionPath.scope.getBinding(t.root.name);if(!i&&t.file!==e.currentFile){let s=await Zt(t.file,e.readFile,e.fileCache);i=s.ast?xa(s.ast).getBinding(t.root.name):void 0}return i?await gn({currentFile:t.file,binding:i,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited}):null}if(t.root.kind!=="expression")return null;let n=await Zt(t.file,e.readFile,e.fileCache);if(!n.ast)return null;let r=yS(n.ast,t.root.sourceRange);if(!r)return null;let o=await dt(r.node,r.scope,t.file,e.readFile,e.exists,e.fileCache,e.visited);return o===void 0?null:{kind:"static",file:t.file,root:t.root,value:o,sourceKind:t.sourceKind}}async function gf(e){return await HS(e)??await GS(e)??await YS(e)}async function HS(e){let{callPath:t}=e,n=t.node.callee;if(!v.isMemberExpression(n)||!v.isIdentifier(n.property)||n.property.name!=="filter")return null;let r=t.get("callee");if(!r.isMemberExpression())return null;let o=r.get("object");if(Array.isArray(o)||!o.isExpression())return null;let i=await Nr({currentFile:e.currentFile,expressionPath:o,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!i||!Array.isArray(i.value))return null;let[s]=t.node.arguments;if(!v.isArrowFunctionExpression(s)&&!v.isFunctionExpression(s))return null;let a=s.params[0];if(!v.isIdentifier(a))return null;let c=ZS(s);if(!c)return null;let l=[],u=[],d=[];for(let[p,m]of i.value.entries()){let g=qS(c,a.name,m);if(typeof g!="boolean")return null;if(g){l.push(m),u.push(i.collectionIndexMap?.[p]??p);let b=i.collectionPathMap?.[p];b&&d.push(b)}}return{...i,value:l,pathPrefix:i.pathPrefix,collectionIndexMap:u,...d.length>0?{collectionPathMap:d}:{}}}async function GS(e){let{callPath:t}=e,n=t.node.callee;if(!v.isMemberExpression(n)||!v.isIdentifier(n.property)||n.property.name!=="slice")return null;let r=t.get("callee");if(!r.isMemberExpression())return null;let o=r.get("object");if(Array.isArray(o)||!o.isExpression())return null;let i=await Nr({currentFile:e.currentFile,expressionPath:o,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!i||!Array.isArray(i.value))return null;let[s,a]=t.node.arguments,c=Gd(s,0),l=Gd(a,i.value.length);if(c===null||l===null)return null;let u=Math.max(0,c<0?i.value.length+c:c),d=Math.max(0,l<0?i.value.length+l:l),p=i.value.map((g,b)=>i.collectionIndexMap?.[b]??b).slice(u,d),m=i.collectionPathMap?.slice(u,d);return{...i,value:i.value.slice(u,d),pathPrefix:i.pathPrefix,collectionIndexMap:p,...m?{collectionPathMap:m}:{}}}function Gd(e,t){return e?v.isNumericLiteral(e)&&Number.isInteger(e.value)?e.value:null:t}async function YS(e){let{callPath:t}=e,n=t.node.callee;if(!v.isMemberExpression(n)||!v.isIdentifier(n.property)||n.property.name!=="sort"&&n.property.name!=="toSorted")return null;let r=t.get("callee");if(!r.isMemberExpression())return null;let o=r.get("object");if(Array.isArray(o)||!o.isExpression())return null;let i=await Nr({currentFile:e.currentFile,expressionPath:o,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!i||!Array.isArray(i.value))return null;let[s]=t.node.arguments;if(!v.isArrowFunctionExpression(s)&&!v.isFunctionExpression(s))return null;let[a,c]=s.params;if(!v.isIdentifier(a)||!v.isIdentifier(c))return null;let l=i.value.map((d,p)=>({value:d,sourceIndex:i.collectionIndexMap?.[p]??p,originalIndex:p})),u=[...l];for(let d of l)for(let p of l)if(Yd(s,a.name,c.name,d.value,p.value)===void 0)return null;return u.sort((d,p)=>{let m=Yd(s,a.name,c.name,d.value,p.value)??0;return m===0?d.originalIndex-p.originalIndex:m}),{...i,value:u.map(d=>d.value),pathPrefix:i.pathPrefix,collectionIndexMap:u.map(d=>d.sourceIndex),...i.collectionPathMap?{collectionPathMap:u.map(d=>i.collectionPathMap?.[d.originalIndex]).filter(d=>!!d)}:{}}}function Yd(e,t,n,r,o){let i=v.isExpression(e.body)?e.body:e.body.body.find(a=>v.isReturnStatement(a))?.argument;if(!i||!v.isExpression(i))return;let s=ha(i,t,n,r,o);return typeof s=="number"?s:void 0}function ha(e,t,n,r,o){if(v.isNumericLiteral(e)||v.isStringLiteral(e)||v.isBooleanLiteral(e))return e.value;if(v.isIdentifier(e))return e.name===t?r:e.name===n?o:void 0;if(v.isMemberExpression(e)){let i=ya(e,t);if(i)return lt(r,i);let s=ya(e,n);return s?lt(o,s):void 0}if(v.isBinaryExpression(e)&&e.operator==="-"){let i=v.isExpression(e.left)?ha(e.left,t,n,r,o):void 0,s=v.isExpression(e.right)?ha(e.right,t,n,r,o):void 0;return typeof i=="number"&&typeof s=="number"?i-s:void 0}}function ZS(e){if(v.isExpression(e.body))return e.body;for(let t of e.body.body)if(v.isReturnStatement(t)&&t.argument&&v.isExpression(t.argument))return t.argument;return null}function qS(e,t,n){let r=mn(e,t,n);return typeof r=="boolean"?r:void 0}function mn(e,t,n){if(v.isStringLiteral(e)||v.isNumericLiteral(e)||v.isBooleanLiteral(e))return e.value;if(v.isNullLiteral(e))return null;if(v.isIdentifier(e))return e.name===t?n:void 0;if(v.isMemberExpression(e)){let r=ya(e,t);return r?lt(n,r):void 0}if(v.isUnaryExpression(e)&&e.operator==="!"){let r=mn(e.argument,t,n);return r===void 0?void 0:!r}if(v.isLogicalExpression(e)){let r=mn(e.left,t,n);if(r===void 0)return;if(e.operator==="&&")return r&&mn(e.right,t,n);if(e.operator==="||")return r||mn(e.right,t,n)}if(v.isBinaryExpression(e)){let r=v.isExpression(e.left)?mn(e.left,t,n):void 0,o=v.isExpression(e.right)?mn(e.right,t,n):void 0;if(r===void 0||o===void 0)return;switch(e.operator){case"===":return r===o;case"!==":return r!==o;case"==":return r==o;case"!=":return r!=o;default:return}}}function ya(e,t){let n=[],r=e;for(;v.isMemberExpression(r);){if(r.computed)if(v.isNumericLiteral(r.property))n.unshift({kind:"index",index:r.property.value});else if(v.isStringLiteral(r.property))n.unshift({kind:"property",name:r.property.value});else return null;else{if(!v.isIdentifier(r.property))return null;n.unshift({kind:"property",name:r.property.name})}r=r.object}return!v.isIdentifier(r)||r.name!==t?null:n}async function gn(e){let{currentFile:t,binding:n,readFile:r,exists:o,fileCache:i,visited:s}=e,a=`${t}::${n.kind}::${n.identifier.name}`;if(s.has(a))return null;s.add(a);try{let c=await QS({currentFile:t,binding:n,readFile:r,exists:o,fileCache:i,visited:s});if(c)return c;if(n.path.isImportSpecifier()||n.path.isImportDefaultSpecifier())return await fE({currentFile:t,binding:n,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,fileCache:i,visited:s});if(n.kind==="param")return null;if(n.path.isVariableDeclarator()){let l=n.path.node.init;if(!l||!v.isExpression(l))return null;let u=n.path.get("init");if(u&&!Array.isArray(u)&&u.isExpression()){let p=await Ra({currentFile:t,expressionPath:u,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(p)return p;if(u.isCallExpression()){let m=await gf({currentFile:t,callPath:u,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});if(m)return m}}let d=await dt(l,n.path.scope,t,r,o,i,s);return d===void 0?null:{kind:"static",file:t,root:{kind:"binding",name:n.identifier.name},value:d,sourceKind:"binding"}}if(n.path.isIdentifier()&&n.path.parentPath?.isExportDefaultDeclaration()){let l=n.path.parentPath.node.declaration;if(!v.isExpression(l))return null;let u=await dt(l,n.path.scope,t,r,o,i,s);return u===void 0?null:{kind:"static",file:t,root:{kind:"binding",name:n.identifier.name},value:u,sourceKind:"binding"}}return null}finally{s.delete(a)}}async function QS(e){let{currentFile:t,binding:n,readFile:r,exists:o,fileCache:i,visited:s}=e;if(!n.path.isVariableDeclarator()||!n.path.get("id").isArrayPattern())return null;let a=n.path,c=a.node.init;if(!c||!v.isCallExpression(c))return null;let l=eE(c);if(!l||!v.isArrayPattern(a.node.id)||a.node.id.elements.findIndex(g=>v.isIdentifier(g)&&g.name===n.identifier.name)!==0)return null;let d=l==="useReducer"?1:0,p=c.arguments[d];if(!p||!v.isExpression(p))return null;let m=await dt(p,a.scope,t,r,o,i,s);return m===void 0?null:{kind:"static",file:t,root:{kind:"hook-state",name:n.identifier.name,hook:l},value:m,sourceKind:"binding"}}function eE(e){return v.isIdentifier(e.callee)&&(e.callee.name==="useState"||e.callee.name==="useReducer")?e.callee.name:v.isMemberExpression(e.callee)&&v.isIdentifier(e.callee.property)&&(e.callee.property.name==="useState"||e.callee.property.name==="useReducer")?e.callee.property.name:null}function tE(e){let t=e.getFunctionParent();if(!t)return null;if(t.isFunctionDeclaration()){let s=t.node.id?.name;if(!s)return null;let a=t.parentPath?.isExportDefaultDeclaration()?"default":(t.parentPath?.isExportNamedDeclaration(),s);return{componentName:s,exportName:a}}if(!t.isArrowFunctionExpression()&&!t.isFunctionExpression())return null;let n=t.parentPath;if(!n?.isVariableDeclarator()||!v.isIdentifier(n.node.id))return null;let r=n.node.id.name,o=n.parentPath,i=o?.parentPath?.isExportDefaultDeclaration()?"default":(o?.parentPath?.isExportNamedDeclaration(),r);return{componentName:r,exportName:i}}function nE(e,t){let n=tE(e.path);if(!n)return null;let r=Kn(e,t);return r?{...n,...r}:null}function Qo(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}function rE(e,t,n,r){return e.importedFrom===t?r?e.exportName===r:!0:e.sourceFile===t&&e.tag===n}async function oE(e){let t=sE(e.expressionPath.node);if(!t||!aE(t.segments))return null;let n=await Xe({currentFile:e.currentFile,expressionPath:e.expressionPath,sourceInfo:{kind:"identifier",expression:t.base,base:t.base,path:[]},readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!n||n.kind==="external")return n;let r=await iE({...e,rootPath:n.path,segments:t.segments});return r?{...n,path:r.collectionPathMap[0]??n.path,sourceKind:"repeat-template",displayExpression:wr(e.expressionPath.node,e.fileCache.get(e.currentFile)?.source),...r.collectionIndexMap?{collectionIndexMap:r.collectionIndexMap}:{},collectionPathMap:r.collectionPathMap}:null}async function iE(e){let t=null,n,r=[];for(let i of e.segments){if(i.kind!=="dynamic")continue;let s=await ut({expression:i.expression,scope:e.expressionPath.scope,source:e.fileCache.get(e.currentFile)?.source,currentFile:e.currentFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(!s)return null;let a=pf(e.expressionPath,s.base);if(!a)return null;let c=await mf({currentFile:e.currentFile,callPath:a.callPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(!c||!Array.isArray(c.value))return null;let l=c.value.map((u,d)=>{let p=lt(c.value,[{kind:"index",index:d},...a.basePath,...s.path]);return cE(p)});if(l.some(u=>u===null)||t!==null&&t!==l.length)return null;t=l.length,n??=c.collectionIndexMap,r.push(l)}if(t===null||t===0)return null;let o=[];for(let i=0;i<t;i+=1){let s=[...e.rootPath],a=0;for(let c of e.segments){if(c.kind==="dynamic"){let l=r[a]?.[i];if(!l)return null;s.push(l),a+=1;continue}s.push({...c})}o.push(s)}return{...n?{collectionIndexMap:n}:{},collectionPathMap:o}}function sE(e){let t=[],n=e;for(;v.isMemberExpression(n)||v.isOptionalMemberExpression(n);){let r=n.property;if(n.computed)if(v.isNumericLiteral(r))t.unshift({kind:"index",index:r.value});else if(v.isStringLiteral(r))t.unshift({kind:"property",name:r.value});else if(v.isExpression(r))t.unshift({kind:"dynamic",expression:r});else return null;else if(v.isIdentifier(r))t.unshift({kind:"property",name:r.name});else return null;n=n.object}return v.isIdentifier(n)?{base:n.name,segments:t}:null}function aE(e){return e.some(t=>t.kind==="dynamic")}function cE(e){return typeof e=="string"?{kind:"property",name:e}:Number.isInteger(e)?{kind:"index",index:e}:null}async function lE(e){let t=nE(e.binding,e.sourceInfo);if(!t||!e.graph)return null;let n=[...e.graph.elements.values()].filter(l=>rE(l,e.currentFile,t.componentName,t.exportName));if(n.length!==1)return null;let r=n[0],o=r.attributes?.find(l=>l.name===t.propName);if(o&&!o.source){let l=await uE({caller:r,propName:t.propName,remainingPath:t.remainingPath,readFile:e.readFile,fileCache:e.fileCache});if(l)return fa(l,{componentName:t.componentName,propName:t.propName,file:r.sourceFile})}if(!o?.source){let l=await dE({caller:r,propName:t.propName,remainingPath:t.remainingPath,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(l)return fa(l,{componentName:t.componentName,propName:t.propName,file:r.sourceFile});let u=ed(e.binding,t.componentName,t.propName);if(!u||u.propName!==t.propName)return null;let d=await dt(u.expressionPath.node,u.expressionPath.scope,e.currentFile,e.readFile,e.exists,e.fileCache,e.visited);if(d===void 0)return null;let p=t.remainingPath;return p.length>0&&lt(d,p)===void 0?null:{kind:"value",file:e.currentFile,root:{kind:"binding",name:t.propName},path:p,sourceKind:"binding",semanticKind:"component-prop",displayExpression:u.displayPath,chainPrefix:[{kind:"component-prop",file:e.currentFile,displayName:u.displayPath,canEditHere:!0}],editMode:"upstream",diagnostics:[]}}let i=await Zt(r.sourceFile,e.readFile,e.fileCache);if(!i.ast)return null;let s=of(i.ast,i.source,o.source.expression,o.sourceRange)??Ca(i.ast,i.source,o.source.expression);if(!s)return null;let a={...o.source,expression:Qo(o.source.expression,t.remainingPath),path:[...o.source.path,...t.remainingPath]},c=await Xe({currentFile:r.sourceFile,expressionPath:s,sourceInfo:a,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});return c?fa(c.kind==="external"?c:{...c,displayExpression:a.expression},{componentName:t.componentName,propName:t.propName,file:r.sourceFile}):null}async function uE(e){let t=await Zt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=nf(t.ast,e.caller.sourceRange);if(!n)return null;let r=n.get("openingElement").get("attributes").find(a=>a.isJSXAttribute()&&a.node.name.type==="JSXIdentifier"&&a.node.name.name===e.propName);if(!r?.isJSXAttribute())return null;let o=r.get("value"),i=o.isStringLiteral()?o:o.isJSXExpressionContainer()?o.get("expression"):null;if(!i?.isExpression())return null;let s=rf(i.node);return s?{kind:"value",file:e.caller.sourceFile,root:{kind:"expression",sourceRange:s},path:e.remainingPath,sourceKind:"binding",semanticKind:"component-prop",displayExpression:e.propName,editMode:"upstream",diagnostics:[]}:null}async function dE(e){let t=await Zt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=nf(t.ast,e.caller.sourceRange);if(!n)return null;let r=n.get("openingElement");for(let o of r.get("attributes")){if(!o.isJSXSpreadAttribute())continue;let i=o.get("argument");if(!i.isExpression())continue;let s=await ut({expression:i.node,scope:i.scope,source:t.source,currentFile:e.caller.sourceFile,readFile:e.readFile,exists:e.exists,fileCache:e.fileCache,visited:e.visited});if(!s)continue;let a=[{kind:"property",name:e.propName},...e.remainingPath],c={...s,expression:Qo(s.expression,a),path:[...s.path,...a]},l=await Xe({currentFile:e.caller.sourceFile,expressionPath:i,sourceInfo:c,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache,visited:e.visited});if(l)return l.kind==="external"?l:{...l,displayExpression:c.expression}}return null}function fa(e,t){let n=[{kind:"component-prop",file:t.file,displayName:`${t.componentName}.${t.propName}`,canEditHere:!0}];return e.kind==="external"?{...e,chainPrefix:[...n,...e.chainPrefix??[]],editMode:e.editMode==="readonly"?"readonly":"upstream"}:{...e,chainPrefix:[...n,...e.chainPrefix??[]],editMode:"upstream"}}async function fE(e){let{currentFile:t,binding:n,readFile:r,exists:o,fileCache:i,visited:s}=e,a=n.path.parentPath;if(!a||!a.isImportDeclaration())return null;let c=a.node.source.value;if(typeof c!="string")return null;let l=await Nn(t,c,o);if(!l)return null;if(n.path.isImportDefaultSpecifier()){let b=await Zt(l,r,i),C=b.ast?ba(b.ast,"default"):null,I=await qo({file:l,exportName:"default",readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});return!I||I.kind!=="static"?null:{kind:"static",file:C?.kind==="default-expression"?I.file:l,root:C?.kind==="default-expression"?I.root:{kind:"default-export"},value:I.value,sourceKind:"imported-binding"}}if(!n.path.isImportSpecifier())return null;let u=n.path.node.imported,d=v.isIdentifier(u)?u.name:u.value,p=await Zt(l,r,i),m=p.ast?ba(p.ast,d):null,g=await qo({file:l,exportName:d,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s});return g?g.kind==="external"?g:{kind:"static",file:m?.kind==="re-export"?g.file:l,root:m?.kind==="re-export"?g.root:{kind:"named-export",name:d},value:g.value,sourceKind:"imported-binding"}:null}async function qo(e){let{file:t,exportName:n,readFile:r,exists:o,fileCache:i,visited:s}=e,a=`export::${t}::${n}`;if(!s.has(a)){s.add(a);try{let c=await Zt(t,r,i);if(!c.ast)return;let l=ba(c.ast,n);if(!l)return;if(l.kind==="default-expression"){let m=l.expression;if(!m||!v.isIdentifier(m))return;let g=xa(c.ast).getBinding(m.name);return g?await gn({currentFile:t,binding:g,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s})??void 0:void 0}if(l.kind==="re-export"){if(!l.source||!l.name)return;let m=await Nn(t,l.source,o);return m?qo({...e,file:m,exportName:l.name}):void 0}let u=l.name;if(!u)return;let d=xa(c.ast).getBinding(u);return d?await gn({currentFile:t,binding:d,readFile:r,exists:o,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:i,visited:s})??void 0:void 0}finally{s.delete(a)}}}function xa(e){let t=null;if(qd(e,{Program(n){t=n.scope,n.stop()}}),!t)throw new Error("Unable to determine program scope");return t}function ba(e,t){for(let n of e.program.body){if(t==="default"&&v.isExportDefaultDeclaration(n))return v.isExpression(n.declaration)?{kind:"default-expression",expression:n.declaration}:(v.isFunctionDeclaration(n.declaration)||v.isClassDeclaration(n.declaration))&&n.declaration.id?{kind:"default-binding",name:n.declaration.id.name}:null;if(v.isExportNamedDeclaration(n)){if(n.declaration){if(v.isVariableDeclaration(n.declaration)){for(let r of n.declaration.declarations)if(v.isIdentifier(r.id)&&r.id.name===t)return{kind:"local-binding",name:r.id.name}}if((v.isFunctionDeclaration(n.declaration)||v.isClassDeclaration(n.declaration))&&n.declaration.id&&n.declaration.id.name===t)return{kind:"local-binding",name:t}}for(let r of n.specifiers)if((v.isIdentifier(r.exported)?r.exported.name:r.exported.value)===t&&v.isExportSpecifier(r))return n.source?{kind:"re-export",name:r.local.name,source:n.source.value}:{kind:"local-binding",name:r.local.name}}}return null}async function dt(e,t,n,r,o,i,s){if(v.isStringLiteral(e)||v.isNumericLiteral(e)||v.isBooleanLiteral(e))return e.value;if(v.isNullLiteral(e))return null;if(v.isTemplateLiteral(e))return e.expressions.length===0&&e.quasis.length===1?e.quasis[0].value.cooked??e.quasis[0].value.raw:void 0;if(v.isTSAsExpression(e)||v.isTSSatisfiesExpression(e)||v.isTSNonNullExpression(e))return await dt(e.expression,t,n,r,o,i,s);if(v.isIdentifier(e)){let a=t.getBinding(e.name);if(!a)return;let c=await gn({currentFile:n,binding:a,readFile:r,exists:o,fileCache:i,visited:s});return c?.kind==="static"?c.value:void 0}if(v.isArrayExpression(e)){let a=[];for(let c of e.elements){if(!c||v.isSpreadElement(c))return;let l=await pa(c,t,n,r,o,i,s);if(l===void 0)return;a.push(l)}return a}if(v.isObjectExpression(e)){let a={};for(let c of e.properties){if(!v.isObjectProperty(c)||c.computed)return;let l=null;if(v.isIdentifier(c.key)?l=c.key.name:v.isStringLiteral(c.key)&&(l=c.key.value),!l)return;if(c.shorthand){if(!v.isIdentifier(c.value))return;let d=await pa(c.value,t,n,r,o,i,s);if(d===void 0)return;a[l]=d;continue}if(!v.isExpression(c.value))return;let u=await pa(c.value,t,n,r,o,i,s);u!==void 0&&(a[l]=u)}return a}if(v.isMemberExpression(e)){let a=await hf(e,t,n,r,o,i,s);if(!a)return;let c=t.getBinding(a.base);if(!c)return;let l=await gn({currentFile:n,binding:c,readFile:r,exists:o,fileCache:i,visited:s});return!l||l.kind!=="static"?void 0:lt(l.value,a.path)}}async function pa(e,t,n,r,o,i,s){if(!v.isSpreadElement(e))return await dt(e,t,n,r,o,i,s)}async function hf(e,t,n,r,o,i,s){if(v.isIdentifier(e))return{base:e.name,path:[]};if(!v.isMemberExpression(e))return null;let a=[],c=e;for(;v.isMemberExpression(c);){if(c.computed){let l=c.property;if(v.isNumericLiteral(l))a.unshift({kind:"index",index:l.value});else if(v.isStringLiteral(l))a.unshift({kind:"property",name:l.value});else{let u=v.isExpression(l)?await dt(l,t,n,r,o,i,s):void 0;if(typeof u=="string")a.unshift({kind:"property",name:u});else if(Number.isInteger(u))a.unshift({kind:"index",index:u});else return null}}else{if(!v.isIdentifier(c.property))return null;a.unshift({kind:"property",name:c.property.name})}c=c.object}return v.isIdentifier(c)?{base:c.name,path:a}:null}function pE(e){if(v.isIdentifier(e))return{base:e.name,path:[]};if(!v.isMemberExpression(e))return null;let t=[],n=e;for(;v.isMemberExpression(n);){if(n.computed)if(v.isNumericLiteral(n.property))t.unshift({kind:"index",index:n.property.value});else if(v.isStringLiteral(n.property))t.unshift({kind:"property",name:n.property.value});else return null;else{if(!v.isIdentifier(n.property))return null;t.unshift({kind:"property",name:n.property.name})}n=n.object}return v.isIdentifier(n)?{base:n.name,path:t}:null}function lt(e,t){let n=e;for(let r of t){if(r.kind==="property"){if(n===null||Array.isArray(n)||typeof n!="object"||!(r.name in n))return;n=n[r.name];continue}if(!Array.isArray(n)||r.index<0||r.index>=n.length)return;n=n[r.index]}return n}function mE(e,t){if(!Array.isArray(e.value))return null;let n=e.collectionPathMap?.length?e.collectionPathMap:e.value.map((r,o)=>[...e.pathPrefix??[],{kind:"index",index:e.collectionIndexMap?.[o]??o}]);return n.length>0?n.map(r=>[...r,...t]):null}function gE(e,t){let n=[],r=[];for(let o of t){let i=lt(e,o);if(!Array.isArray(i))return null;for(let[s,a]of i.entries())n.push(a),r.push([...o,{kind:"index",index:s}])}return{value:n,collectionPathMap:r}}async function Zt(e,t,n){let r=n.get(e);if(r)return r;let o=await t(e),i=tf(o),s={source:o,ast:i};return n.set(e,s),s}import Oa from"@babel/generator";import{parse as AE}from"@babel/parser";import Ma from"@babel/traverse";import*as k from"@babel/types";import*as Et from"@babel/types";import Aa from"@babel/generator";import*as ue from"@babel/types";var hE=typeof Aa=="function"?Aa:Aa.default,yE=/(?:token|secret|key|password|authorization|cookie|signature|credential)/i,xE=/^((?:https?:)?\/\/)[^/@\s]+@/i,bE=/(\/(?:token|secret|api[-_]?key|password|credential|signature)\/)[^/?#]+/gi;function xf(e,t){let n=St(e.callee);if(!n)return null;if(n==="fetch")return Ta(e.arguments[0],"GET",t,["fetch call"]);if(n.startsWith("axios.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if(yf(r))return Ta(e.arguments[0],r,t,["axios client contract"])}if(n.startsWith("ky.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if(yf(r))return Ta(e.arguments[0],r,t,["ky client contract"])}return null}function Ta(e,t,n,r){if(!e||ue.isSpreadElement(e)||ue.isJSXNamespacedName(e))return IE(t,n,r,"missing url argument");let o=Pr(e);return{sourceKind:vE(o),...o?{endpointPattern:o}:{},method:t,confidence:o?"exact":"partial",evidence:[{file:n.file,reason:[...r,o?"endpoint pattern resolved":"endpoint pattern unresolved"].join("; ")}]}}function Pr(e){if(ue.isStringLiteral(e))return ei(e.value);if(ue.isTemplateLiteral(e))return ei(SE(e));if(ue.isBinaryExpression(e)&&e.operator==="+"){let t=Pr(e.left),n=Pr(e.right);return!t&&!n?void 0:ei(`${t??_a(e.left)}${n??_a(e.right)}`)}if(ue.isMemberExpression(e)){let t=bf(e);if(t)return`env:${t}`}if(!(ue.isCallExpression(e)&&St(e.callee)==="new URL")){if(ue.isNewExpression(e)&&ue.isIdentifier(e.callee,{name:"URL"})){let[t,n]=e.arguments,r=t&&!ue.isSpreadElement(t)?Pr(t):void 0,o=n&&!ue.isSpreadElement(n)?Pr(n):void 0;return o&&r?ei(`${o} + ${r}`):r??o}if(ue.isIdentifier(e))return`:${e.name}`}}function SE(e){let t="";for(let n=0;n<e.quasis.length;n+=1){t+=e.quasis[n]?.value.cooked??e.quasis[n]?.value.raw??"";let r=e.expressions[n];r&&(t+=_a(r))}return t}function _a(e){if(ue.isIdentifier(e))return`:${e.name}`;if(ue.isMemberExpression(e)){let t=bf(e);if(t)return`env:${t}`}return`:${EE(e)}`}function EE(e){return hE(e,{comments:!1}).code.replace(/[^a-zA-Z0-9_$]+/g,"_").replace(/^_+|_+$/g,"")||"param"}function ei(e){let[t]=e.split("#"),[n,r]=t.split("?"),o=n.replace(xE,"$1<redacted>@").replace(bE,"$1<redacted>");if(!r)return o;let i=r.split("&").map(s=>{let[a]=s.split("=");return a?yE.test(a)?`${a}=<redacted>`:`${a}=:${a}`:""}).filter(Boolean).join("&");return i?`${o}?${i}`:o}function vE(e){return e?e.startsWith("/api/")?"site-api-route":/^(?:https?:)?\/\//.test(e)||e.startsWith("env:")?"external-api":e.startsWith("/")?"site-api-route":"unknown-api":"unknown-api"}function IE(e,t,n,r){return{sourceKind:"unknown-api",method:e,confidence:"partial",evidence:[{file:t.file,reason:[...n,r].join("; ")}]}}function yf(e){return["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(e)}function bf(e){return!ue.isMemberExpression(e.object)||!ue.isIdentifier(e.object.object,{name:"process"})||!kE(e.object.property,"env")?null:ue.isIdentifier(e.property)?e.property.name:ue.isStringLiteral(e.property)?e.property.value:null}function kE(e,t){return ue.isIdentifier(e)&&e.name===t}function St(e){if(ue.isIdentifier(e))return e.name;if(ue.isMemberExpression(e)){let t=St(e.object),n=ue.isIdentifier(e.property)?e.property.name:ue.isStringLiteral(e.property)?e.property.value:null;if(t&&n)return`${t}.${n}`}return null}var CE=new Set(["list","listStrict","get","getStrict","getByUrl","getByUrlStrict","schema","categories"]),RE=new Set(["getConfig","submit"]);function Sf(e,t){let n=wE(St(e.callee),t);if(!n)return null;let r="cms.collections.";if(n.startsWith(r)){let i=n.slice(r.length);if(!CE.has(i))return null;let s=Fa(e,0),a=i==="getByUrl"||i==="getByUrlStrict",c=a?void 0:s,l=a?s??"/:record-url":c?`/collections/${c}`:"/collections/:collection";return{sourceKind:"vcp-cms-collection",sourceType:"cms-field",operation:i,...c?{collection:c}:{},endpointPattern:l,confidence:s?"exact":"partial",evidence:[{file:t.file,symbol:n,reason:"VCP CMS collection facade"}]}}let o="cms.forms.";if(n.startsWith(o)){let i=n.slice(o.length);if(!RE.has(i))return null;let s=Fa(e,0);return{sourceKind:"vcp-cms-form",sourceType:"cms-field",operation:i,...s?{collection:s}:{},endpointPattern:s?`/forms/${s}`:"/forms/:form",confidence:s?"exact":"partial",evidence:[{file:t.file,symbol:n,reason:"VCP CMS form facade"}]}}if(n==="cmsFetch"||n==="cmsFetchResult"||n==="cmsFetchEnvelope"){let i=Fa(e,0)??NE(e,0,"path")??"/cms/:path",s=PE(i);return{sourceKind:"vcp-cms-collection",sourceType:"cms-field",operation:n,...s?{collection:s}:{},endpointPattern:i,confidence:i==="/cms/:path"?"partial":"safe-derived",evidence:[{file:t.file,symbol:n,reason:"VCP CMS fetch helper"}]}}return null}function wE(e,t){let n=e?.indexOf(".")??-1;if(!e||n<1)return e;let r=t.imports?.get(e.slice(0,n));return r?.importedName==="collections"&&/(?:^|\/)lib\/cms\/collections(?:\.js)?$/.test(r.source)?`cms.collections${e.slice(n)}`:e}function Ef(e,t){let n=St(e);return n==="cms.settings"?{sourceKind:"vcp-cms-settings",sourceType:"cms-field",operation:"settings",endpointPattern:"/settings",confidence:"exact",evidence:[{file:t.file,symbol:n,reason:"VCP CMS settings facade"}]}:n==="cms.navigation"?{sourceKind:"vcp-cms-navigation",sourceType:"cms-field",operation:"navigation",endpointPattern:"/navigation",confidence:"exact",evidence:[{file:t.file,symbol:n,reason:"VCP CMS navigation facade"}]}:null}function vf(e){let t=St(e.callee);return typeof t=="string"&&t.startsWith("cms.field.")}function Fa(e,t){let n=e.arguments[t];return Et.isStringLiteral(n)?n.value:null}function NE(e,t,n){let r=e.arguments[t];if(!Et.isObjectExpression(r))return null;for(let o of r.properties)if(Et.isObjectProperty(o)&&!o.computed&&(Et.isIdentifier(o.key)&&o.key.name===n||Et.isStringLiteral(o.key)&&o.key.value===n)&&Et.isStringLiteral(o.value))return o.value.value;return null}function PE(e){return/^\/collections\/([^/]+)(?:\/|$)/.exec(e)?.[1]??null}var La=typeof Ma=="function"?Ma:Ma.default,GA=typeof Oa=="function"?Oa:Oa.default,TE={maxFunctionDepth:8,maxImportDepth:6},_E=new Set(["src","href","alt","poster","content","title","aria-label"]);async function Nf(e){let t=e.fileCache??new Map,n=$a(e.file,e.source,t),r={file:e.file,analysis:n,readFile:e.readFile,exists:e.exists,fileCache:t,options:{...TE,...e.options},variableCache:new Map,functionDepth:0,importDepth:0,paramSources:new Map,resolvingVariables:new Set,resolvingComponentProps:new Set,scopeVariables:Uf(n,e.element.componentName)};await Pf(e.element.componentName,e.graph,r);let o=[];o.push(...await LE(e.element,e.graph,r),...await BE(e.element,e.graph,r));for(let s of e.element.textSegments){let a=await jE(s,e.element,e.graph,r);a&&o.push(ri(a,"text","children"))}for(let s of e.element.attributes??[]){let a=DE(s,e.element);if(!a)continue;let c=await _f(s.source,e.element,e.graph,r);c&&o.push(ri(c,a,s.name))}let i=ev(o).sort($f);return{hasDynamicData:i.length>0,bindings:i}}async function Pf(e,t,n){if(n.importDepth>=n.options.maxImportDepth)return;let r=n.analysis.functions.get(e)??n.analysis.functions.get("default"),o=r?.params[0];if(!r||!o)return;let i=n.analysis.functions.get("default")===r?"default":e,s=[];for(let l of t.elements.values()){if(l.sourceFile===n.file&&l.tag===e){s.push(l);continue}!l.importedFrom||!l.exportName||l.importedFrom===n.file&&l.exportName!==i||(l.importedFrom===n.file||await Af(l.importedFrom,l.exportName,n.file,n))&&s.push(l)}if(s.length===0)return;let a=new Map;for(let l of s){let u=`${n.file}#${e}<-${l.identity.key}`;if(!n.resolvingComponentProps.has(u)){n.resolvingComponentProps.add(u);try{let d=await Tf(l.sourceFile,n);if(!d)continue;let p=ii(d,n,{importDepth:n.importDepth+1});p.paramSources.clear(),p.scopeVariables=Uf(d,l.componentName),await Pf(l.componentName,t,p);let m=await FE(l,p);for(let[g,b]of m){if(!b)continue;let C=a.get(g)??[];C.push(b),a.set(g,C)}}finally{n.resolvingComponentProps.delete(u)}}}let c=new Map;for(let[l,u]of a){let d=Bf(u);d.length===1&&c.set(l,d[0])}ME(o,c,n)}async function Af(e,t,n,r,o=new Set){if(e===n)return!0;if(o.size>=r.options.maxImportDepth||o.has(`${e}#${t}`))return!1;o.add(`${e}#${t}`);let s=(await Tf(e,r))?.imports.get(t);if(!s||!ht(s.source))return!1;let a=await Xf(e,s.source,r.exists);return a?a===n?!0:Af(a,s.importedName,n,r,o):!1}async function FE(e,t){let n=new Map;La(t.analysis.ast,{JSXElement(o){if(OE(o.node,e.sourceRange)){for(let i of o.node.openingElement.attributes)!k.isJSXAttribute(i)||!k.isJSXIdentifier(i.name)||!k.isJSXExpressionContainer(i.value)||!k.isExpression(i.value.expression)||n.set(i.name.name,i.value.expression);o.stop()}}});let r=new Map;for(let[o,i]of n){let s=await we(i,t);s&&r.set(o,s)}return r}function OE(e,t){return e.loc?.start.line===t.startLine&&e.loc.start.column===t.startColumn&&e.loc.end.line===t.endLine&&e.loc.end.column===t.endColumn}async function Tf(e,t){let n=t.fileCache.get(e);if(n)return n;if(!await t.exists(e))return null;let r=await t.readFile(e);return $a(e,r,t.fileCache)}function ME(e,t,n){if(k.isIdentifier(e)){t.size>0&&n.paramSources.set(e.name,ja(Object.fromEntries(t),n.file));return}if(k.isObjectPattern(e))for(let r of e.properties){if(!k.isObjectProperty(r)||r.computed||!k.isIdentifier(r.key))continue;let o=t.get(r.key.name);if(!o)continue;let i=k.isAssignmentPattern(r.value)?r.value.left:r.value;k.isIdentifier(i)&&n.paramSources.set(i.name,_e(o))}}function DE(e,t){return e.name==="dangerouslySetInnerHTML"?"richtext":_E.has(e.name)?"attribute":t.importedFrom||/^[A-Z]/.test(t.tag)?"component-prop":null}async function LE(e,t,n){let r=[];for(let o of t.regions){if(o.kind!=="repeat-region"||o.ownerKey!==e.identity.key)continue;let i=o.sourceCandidates?.find(a=>a.kind==="repeat-template");if(!i)continue;let s=await oi(i.collectionSource,n);s&&r.push(ri(hn(s),"repeat-region",i.collectionExpression))}return r}async function BE(e,t,n){let r=[];for(let o of t.regions){if(o.kind!=="conditional-region"||o.ownerKey!==e.identity.key)continue;let i=o.sourceCandidates?.find(a=>a.kind==="conditional-branch");if(!i)continue;let s=await oi(i.conditionSource,n);s&&r.push(ri(hn(s),"conditional-region",i.conditionExpression))}return r}async function jE(e,t,n,r){return _f(e.source,t,n,r)}async function _f(e,t,n,r){let o=await $E(e,t,n,r);return o||oi(e,r)}async function $E(e,t,n,r){if(!e)return null;let o=VE(e.base,t,n);if(!o)return null;let i=await oi(o.collectionSource,r);return i?Fr(i,e.path,!0):null}function VE(e,t,n){let r=t.identity.key;for(;r;){for(let o of n.regions){if(o.kind!=="repeat-region"||!o.childKeys.includes(r))continue;let i=o.sourceCandidates?.find(s=>s.kind==="repeat-template"&&s.itemParamName===e);if(i)return i}r=n.elements.get(r)?.parentKey??null}return null}async function oi(e,t){if(!e)return null;let n=await Ff(e.base,t);return n?Fr(n,e.path,!1):null}async function Ff(e,t){let n=t.paramSources.get(e);if(n)return _e(n);if(t.variableCache.has(e))return tv(t.variableCache.get(e)??null);if(t.resolvingVariables.has(e))return null;t.resolvingVariables.add(e);let r=await UE(e,t);if(r)return t.variableCache.set(e,_e(r)),t.resolvingVariables.delete(e),r;let o=t.scopeVariables?.get(e)??t.analysis.variables.get(e);if(o){let s=await we(o,t);return t.variableCache.set(e,s?_e(s):null),t.resolvingVariables.delete(e),s}let i=t.analysis.imports.get(e);if(i&&t.importDepth<t.options.maxImportDepth){let s=await Kf(i,t);if(s){let a=ii(s,t,{importDepth:t.importDepth+1}),c=Jf(i,s);if(c){let d=(await yn(c,[],a)).returnSource;return t.variableCache.set(e,d?_e(d):null),t.resolvingVariables.delete(e),d}let l=s.variables.get(i.importedName);if(l){let u=await we(l,a);return t.variableCache.set(e,u?_e(u):null),t.resolvingVariables.delete(e),u}}}return t.variableCache.set(e,null),t.resolvingVariables.delete(e),null}async function UE(e,t){let n=t.analysis.stateSetters.get(e);if(!n)return null;let r=[];La(t.analysis.ast,{CallExpression(o){if(k.isIdentifier(o.node.callee,{name:n})){let i=o.node.arguments[0];k.isExpression(i)&&r.push(i);return}o.node.arguments.some(i=>k.isIdentifier(i)&&i.name===n)&&r.push(o.node)}});for(let o of r){let i=await we(o,t);if(i)return i}return null}async function we(e,t){if(k.isIdentifier(e))return Ff(e.name,t);if(k.isMemberExpression(e)||k.isOptionalMemberExpression(e)){let n=k.isMemberExpression(e)?Ef(e,{file:t.file}):null;if(n)return Lf(n);let r=await KE(e,t);if(!r)return null;let o=qE(e);return Fr(r,o,!1)}if(k.isAwaitExpression(e))return k.isExpression(e.argument)?we(e.argument,t):null;if(k.isCallExpression(e))return Of(e,t);if(k.isObjectExpression(e)){let n=await Mf(e,t);return Object.keys(n).length>0?ja(n,t.file):null}if(k.isConditionalExpression(e)){let n=await we(e.consequent,t),r=await we(e.alternate,t);return _r(kf(n,r))}if(k.isLogicalExpression(e)){let n=await we(e.left,t),r=await we(e.right,t);return _r(kf(n,r))}return k.isTSAsExpression(e)||k.isTSSatisfiesExpression(e)||k.isTSNonNullExpression(e)||k.isTypeCastExpression(e)||k.isParenthesizedExpression(e)?we(e.expression,t):null}async function KE(e,t){let n=e;for(;k.isMemberExpression(n)||k.isOptionalMemberExpression(n);)n=n.object;return k.isExpression(n)?we(n,t):null}async function Of(e,t){let n=Sf(e,{file:t.file,imports:t.analysis.imports});if(n)return Lf(n);if(vf(e)){let d=e.arguments[0];if(d&&k.isExpression(d))return _r(await we(d,t))}let r=await JE(e,t);if(r)return r;let o=xf(e,{file:t.file});if(o)return{sourceKind:o.sourceKind,sourceType:"api-field",endpointPattern:o.endpointPattern,valuePath:o.valuePath,confidence:o.confidence,readonly:!0,evidence:o.evidence};let i=await WE(e,t);if(i)return i;let s=await HE(e,t);if(s)return s;let a=await GE(e,t);if(a)return a;let c=await YE(e,t);if(c)return c;let l=[];for(let d of e.arguments)if(k.isExpression(d)){let p=await we(d,t);p&&l.push(p)}let u=Bf(l);return u.length===1?_r(u[0]):null}async function JE(e,t){let n=St(e.callee);if(n!=="useQuery"&&n!=="useSuspenseQuery"&&n!=="useInfiniteQuery"&&n!=="useSWR")return null;if(n==="useSWR"){let i=zE(e.arguments[0],t.file,"SWR key"),s=e.arguments[1];if(k.isIdentifier(s)){let a=await Tr(s.name,t);if(a)return(await yn(a.node,i?[i]:[],a.context)).returnSource??i}return i}let r=e.arguments[0];if(!k.isObjectExpression(r))return ti(t.file,`${n} without static options`);let o=XE(r,"queryFn");if(!o)return ti(t.file,`${n} without queryFn`);if(k.isIdentifier(o)){let i=await Tr(o.name,t);return i?(await yn(i.node,[],i.context)).returnSource:ti(t.file,`${n} queryFn unresolved`)}return k.isArrowFunctionExpression(o)||k.isFunctionExpression(o)?(await yn(o,[],t)).returnSource:k.isCallExpression(o)?Of(o,t):null}function XE(e,t){for(let n of e.properties){if(!k.isObjectProperty(n)||!k.isExpression(n.value))continue;if(Df(n)===t)return n.value}return null}function zE(e,t,n){return k.isStringLiteral(e)?{sourceKind:e.value.startsWith("/api/")?"site-api-route":"external-api",sourceType:"api-field",endpointPattern:e.value,confidence:"exact",readonly:!0,evidence:[{file:t,reason:n}]}:null}async function WE(e,t){if(!k.isMemberExpression(e.callee)||!k.isIdentifier(e.callee.property))return null;let n=e.callee.property.name;if(!["map","filter","slice","sort","toSorted"].includes(n))return null;let r=k.isExpression(e.callee.object)?await we(e.callee.object,t):null;if(!r)return null;if(n!=="map")return hn(r);let o=e.arguments[0];if(k.isIdentifier(o)){let i=await Tr(o.name,t);if(!i)return hn(r);let s=await yn(i.node,[r],i.context);return{...hn(r),...s.objectReturnMap??s.returnSource?.fieldMap?{fieldMap:s.objectReturnMap??s.returnSource.fieldMap}:{}}}if(k.isArrowFunctionExpression(o)||k.isFunctionExpression(o)){let i=await yn(o,[r],t);return{...hn(r),...i.objectReturnMap??i.returnSource?.fieldMap?{fieldMap:i.objectReturnMap??i.returnSource.fieldMap}:{}}}return hn(r)}async function HE(e,t){return!k.isMemberExpression(e.callee)||!k.isIdentifier(e.callee.property,{name:"json"})||!k.isExpression(e.callee.object)?null:we(e.callee.object,t)}async function GE(e,t){return!k.isMemberExpression(e.callee)||!k.isIdentifier(e.callee.property,{name:"then"})||!k.isExpression(e.callee.object)?null:_r(await we(e.callee.object,t))}async function YE(e,t){if(!k.isIdentifier(e.callee))return null;let n=await Tr(e.callee.name,t);if(!n)return null;let r=[];for(let i of e.arguments){if(!k.isExpression(i)){r.push(ti(t.file,`unsupported argument for ${e.callee.name}`));continue}let s=await we(i,t);r.push(s)}return(await yn(n.node,r,n.context)).returnSource}async function Tr(e,t){let n=t.analysis.functions.get(e);if(n)return{node:n,context:t};let r=t.analysis.imports.get(e);if(!r||t.importDepth>=t.options.maxImportDepth)return null;let o=await Kf(r,t);if(!o)return null;let i=ii(o,t,{importDepth:t.importDepth+1}),s=Jf(r,o);return s?{node:s,context:i}:Tr(r.importedName,i)}async function yn(e,t,n){if(n.functionDepth>=n.options.maxFunctionDepth)return{returnSource:null};let r=ii(n.analysis,n,{functionDepth:n.functionDepth+1});r.scopeVariables=n.analysis.functionVariables.get(e),e.params.forEach((c,l)=>{let u=t[l];u&&Da(c,QE(u),r)});let o=ZE(e),i=null,s,a=!1;for(let c of o){if(k.isObjectExpression(c)){s={...s??{},...await Mf(c,r)},i=i??ja(s,n.file);continue}let l=await we(c,r);if(l){if(!i){i=l;continue}let u=Ba(i,l);if(!u){a=!0,i=null;continue}i=u}}return{returnSource:a?null:i,...s?{objectReturnMap:s}:{}}}function Da(e,t,n){if(k.isIdentifier(e)){n.paramSources.set(e.name,_e(t));return}if(k.isAssignmentPattern(e)){Da(e.left,t,n);return}if(k.isObjectPattern(e))for(let r of e.properties){if(!k.isObjectProperty(r)||r.computed||!k.isIdentifier(r.key))continue;let o=Fr(t,[{kind:"property",name:r.key.name}],!0),i=k.isAssignmentPattern(r.value)?r.value.left:r.value;Da(i,o,n)}}function ZE(e){if(k.isArrowFunctionExpression(e)&&k.isExpression(e.body))return[e.body];let t=[],n=e.body;if(!k.isBlockStatement(n))return t;let r=o=>{if(k.isFunction(o)&&o!==e)return;if(k.isReturnStatement(o)){o.argument&&k.isExpression(o.argument)&&t.push(o.argument);return}let i=k.VISITOR_KEYS[o.type];for(let s of i??[]){let a=o[s];if(Array.isArray(a))for(let c of a)k.isNode(c)&&r(c);else k.isNode(a)&&r(a)}};return r(n),t}async function Mf(e,t){let n={};for(let r of e.properties){if(!k.isObjectProperty(r))continue;let o=Df(r);if(!o||!k.isExpression(r.value))continue;let i=await we(r.value,t);i&&(n[o]=i)}return n}function Df(e){return k.isIdentifier(e.key)&&!e.computed?e.key.name:k.isStringLiteral(e.key)?e.key.value:null}function qE(e){let t=[],n=e;for(;k.isMemberExpression(n)||k.isOptionalMemberExpression(n);){let r=n.property;n.computed?k.isStringLiteral(r)?t.unshift({kind:"property",name:r.value}):k.isNumericLiteral(r)&&t.unshift({kind:"index",index:r.value}):k.isIdentifier(r)&&t.unshift({kind:"property",name:r.name}),n=n.object}return k.isIdentifier(n),t}function Fr(e,t,n){if(t.length===0)return _e(e);let r=t[0];if(r?.kind==="property"&&e.fieldMap?.[r.name])return Fr(e.fieldMap[r.name],t.slice(1),n);let o=_e(e);if(o.sourceType==="cms-field"){let i=t.filter(s=>s.kind==="property").map(s=>s.name);return i[0]==="data"&&i[1]==="items"?(o.valuePath=Ar(o.valuePath,"data.items[]"),o.cmsFieldRoot=!1,o):i[0]==="fields"?(o.fieldPath=Ar(o.fieldPath,i.slice(1).join(".")),o.cmsFieldRoot=!0,o):o.cmsFieldRoot||n||o.fieldMap?(o.fieldPath=Ar(o.fieldPath,i.join(".")),o):(o.valuePath=Ar(o.valuePath,If(t)),o)}return o.valuePath=Ar(o.valuePath,If(t)),o}function If(e){return e.map(t=>t.kind==="property"?t.name:`[${t.index}]`).join(".").replace(/\.\[/g,"[")}function Ar(e,t){return t?e?t.startsWith("[")?`${e}${t}`:`${e}.${t}`:t:e}function Lf(e){return{sourceKind:e.sourceKind,sourceType:e.sourceType,operation:e.operation,collection:e.collection,endpointPattern:e.endpointPattern,valuePath:e.valuePath,confidence:e.confidence,readonly:!0,evidence:e.evidence}}function hn(e){let t=_e(e);return t.sourceType==="cms-field"&&!t.valuePath&&(t.valuePath="items[]"),t}function QE(e){let t=_e(e);return t.valuePath=void 0,t.sourceType==="cms-field"&&(t.cmsFieldRoot=!1),t}function _r(e){return e?{..._e(e),confidence:e.confidence==="unknown"?"unknown":"safe-derived",evidence:[...e.evidence,{file:e.evidence[0]?.file??"unknown",reason:"safe derived expression"}]}:null}function kf(e,t){return e?t?Ba(e,t):_e(e):t?_e(t):null}function Ba(e,t){if(ni(e)!==ni(t))return null;let n=Vf(e.confidence,t.confidence)<=0?e.confidence:t.confidence;return{...e,confidence:n,evidence:[...e.evidence,...t.evidence]}}function Bf(e){let t=new Map;for(let n of e){let r=ni(n),o=t.get(r);t.set(r,o?Ba(o,n):_e(n))}return[...t.values()]}function ni(e){let t=e.fieldMap?Object.fromEntries(Object.entries(e.fieldMap).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>[n,ni(r)])):void 0;return JSON.stringify({sourceKind:e.sourceKind,sourceType:e.sourceType,endpointPattern:e.endpointPattern,operation:e.operation,collection:e.collection,fieldPath:e.fieldPath,valuePath:e.valuePath,cmsFieldRoot:e.cmsFieldRoot,fieldMap:t})}function ja(e,t){let n=Object.values(e)[0];return{sourceKind:n?.sourceKind??"unknown-api",sourceType:n?.sourceType??"api-field",endpointPattern:n?.endpointPattern,operation:n?.operation,collection:n?.collection,confidence:n?.confidence??"partial",readonly:!0,evidence:n?.evidence??[{file:t,reason:"object return map"}],fieldMap:e}}function ti(e,t){return{sourceKind:"unknown-api",sourceType:"api-field",confidence:"unknown",readonly:!0,evidence:[{file:e,reason:t}]}}function ri(e,t,n){return{sourceKind:e.sourceKind,sourceType:e.sourceType,...e.endpointPattern?{endpointPattern:e.endpointPattern}:{},...e.operation?{operation:e.operation}:{},...e.collection?{collection:e.collection}:{},...e.fieldPath?{fieldPath:e.fieldPath}:{},...e.valuePath?{valuePath:e.valuePath}:{},targetKind:t,targetName:n,confidence:e.confidence,readonly:!0,evidence:e.evidence.map(r=>({...r}))}}function jf(e){let t=[...e].sort($f),n=t[0];return{hasDynamicData:t.length>0,sourceKinds:[...new Set(t.map(r=>r.sourceKind))],...n?.endpointPattern?{primaryEndpoint:n.endpointPattern}:{},...n?.collection?{primaryCollection:n.collection}:{},...n?.fieldPath?{primaryFieldPath:n.fieldPath}:{}}}function ev(e){let t=new Set,n=[];for(let r of e){let o=JSON.stringify({sourceKind:r.sourceKind,endpointPattern:r.endpointPattern,collection:r.collection,fieldPath:r.fieldPath,valuePath:r.valuePath,targetKind:r.targetKind,targetName:r.targetName});t.has(o)||(t.add(o),n.push(r))}return n}function $f(e,t){return Cf(e.targetKind)-Cf(t.targetKind)||Vf(e.confidence,t.confidence)||Rf(e.sourceKind)-Rf(t.sourceKind)||e.targetName.localeCompare(t.targetName)}function Cf(e){return{"repeat-region":0,"conditional-region":1,text:2,richtext:3,attribute:4,"component-prop":5}[e]}function Rf(e){return e.startsWith("vcp-cms-")?0:e==="site-api-route"?1:e==="external-api"?2:3}function Vf(e,t){let n={exact:0,"safe-derived":1,partial:2,unknown:3};return n[e]-n[t]}function $a(e,t,n){let r=n.get(e);if(r?.source===t)return r;let o=AE(t,{sourceType:"module",plugins:["jsx","typescript"]}),i={file:e,source:t,ast:o,variables:new Map,functions:new Map,imports:new Map,stateSetters:new Map,functionVariables:new WeakMap};return La(o,{ImportDeclaration(s){let a=s.node.source.value;for(let c of s.node.specifiers)k.isImportSpecifier(c)&&k.isIdentifier(c.local)?i.imports.set(c.local.name,{source:a,importedName:k.isIdentifier(c.imported)?c.imported.name:c.imported.value,localName:c.local.name,isDefault:!1}):k.isImportDefaultSpecifier(c)&&i.imports.set(c.local.name,{source:a,importedName:"default",localName:c.local.name,isDefault:!0})},FunctionDeclaration(s){s.node.id?.name&&i.functions.set(s.node.id.name,s.node)},VariableDeclarator(s){let a=s.getFunctionParent(),c=a&&(k.isFunctionDeclaration(a.node)||k.isFunctionExpression(a.node)||k.isArrowFunctionExpression(a.node))?a.node:null,l=c?i.functionVariables.get(c)??new Map:i.variables;c&&!i.functionVariables.has(c)&&i.functionVariables.set(c,l);for(let u of Hn(s.node.id))l.set(u,k.isExpression(s.node.init)?s.node.init:null);if(k.isArrayPattern(s.node.id)&&k.isCallExpression(s.node.init)&&St(s.node.init.callee)==="useState"){let[u,d]=s.node.id.elements;k.isIdentifier(u)&&k.isIdentifier(d)&&i.stateSetters.set(u.name,d.name)}k.isIdentifier(s.node.id)&&wf(s.node.init)&&i.functions.set(s.node.id.name,s.node.init)},ExportNamedDeclaration(s){let a=s.node.declaration,c=s.node.source?.value;if(c)for(let l of s.node.specifiers){if(!k.isExportSpecifier(l))continue;let u=k.isIdentifier(l.exported)?l.exported.name:l.exported.value,d=l.local.name;i.imports.set(u,{source:c,importedName:d,localName:u,isDefault:d==="default"})}if(k.isFunctionDeclaration(a)&&a.id?.name&&i.functions.set(a.id.name,a),k.isVariableDeclaration(a))for(let l of a.declarations)k.isIdentifier(l.id)&&wf(l.init)&&i.functions.set(l.id.name,l.init)},ExportDefaultDeclaration(s){let a=s.node.declaration;if((k.isFunctionDeclaration(a)||k.isFunctionExpression(a)||k.isArrowFunctionExpression(a))&&i.functions.set("default",a),k.isIdentifier(a)){let c=i.functions.get(a.name);c&&i.functions.set("default",c)}}}),n.set(e,i),i}function Hn(e){return!e||k.isVoidPattern(e)?[]:k.isIdentifier(e)?[e.name]:k.isObjectPattern(e)?e.properties.flatMap(t=>k.isObjectProperty(t)?Hn(t.value):Hn(t.argument)):k.isArrayPattern(e)?e.elements.flatMap(t=>t?Hn(k.isRestElement(t)?t.argument:t):[]):k.isAssignmentPattern(e)?Hn(e.left):k.isRestElement(e)?Hn(e.argument):[]}function wf(e){return k.isFunctionExpression(e)||k.isArrowFunctionExpression(e)}function Uf(e,t){let n=e.functions.get(t)??e.functions.get("default");return n?e.functionVariables.get(n):void 0}async function Kf(e,t){let n=await Xf(t.file,e.source,t.exists);if(!n)return null;let r=await t.readFile(n);return $a(n,r,t.fileCache)}function Jf(e,t){return e.isDefault?t.functions.get("default")??t.functions.get(e.localName)??null:t.functions.get(e.importedName)??null}async function Xf(e,t,n){return ht(t)?Nn(e,t,n):null}function ii(e,t,n={}){return{file:e.file,analysis:e,readFile:t.readFile,exists:t.exists,fileCache:t.fileCache,options:t.options,variableCache:new Map,functionDepth:n.functionDepth??t.functionDepth,importDepth:n.importDepth??t.importDepth,paramSources:new Map(t.paramSources),resolvingVariables:new Set,resolvingComponentProps:t.resolvingComponentProps,scopeVariables:e===t.analysis?t.scopeVariables:void 0}}function tv(e){return e?_e(e):null}function _e(e){return{...e,evidence:e.evidence.map(t=>({...t})),...e.fieldMap?{fieldMap:Object.fromEntries(Object.entries(e.fieldMap).map(([t,n])=>[t,_e(n)]))}:{}}}var nv=50,rv=8*1024*1024;function Gf(e,t={}){let n=[],r=[],o=t.externalAdapters??[],i=Math.max(0,t.maxUndoEntries??nv),s=Math.max(0,t.maxUndoBytes??rv);return{prepareRewritePlan:a,execute:c,executeFilePlan:l,undo:u,redo:d};async function a(N){let z=[...N.steps].sort((H,q)=>H.order-q.order),M=z.filter(H=>H.type!=="invoke-external-adapter");if(M.length!==z.length)return{ok:!1,errorCode:"unsupported-operation",reason:"External adapter writes require a transactional prepare/commit/rollback contract."};let j=new Set(M.map(H=>H.file)),Y=await w(j),te=new Map(Y.map(H=>[H.file,H.exists===!1?"":H.content])),Se;for(let H of M){let q=Hf(H,te.get(H.file)??"");if(!q.ok)return{ok:!1,errorCode:q.errorCode,reason:q.reason};te.set(H.file,q.source),Se=q.selectionRef??Se}return{ok:!0,filePlan:{operationId:N.operationId,kind:"source-edit",target:N.target,documentVersion:N.documentVersion,conflictPolicy:"compare-and-swap",edits:[...te].map(([H,q])=>({operation:"upsert",file:H,content:q,baseContentHash:Y.find(Ie=>Ie.file===H)?.sha256??null}))},...Se?{selectionRef:Se}:{}}}async function c(N){let z=[...N.steps].sort((Ie,Tt)=>Ie.order-Tt.order),M=z.filter(Ie=>Ie.type!=="invoke-external-adapter"),j=z.filter(Ie=>Ie.type==="invoke-external-adapter"),Y=new Set(M.map(Ie=>Ie.file));if(M.length>0&&j.length>0)return{ok:!1,operationId:N.operationId,errorCode:"unsupported-operation",reason:"Mixed local file rewrites and external adapter writes require an explicit compensation contract.",rolledBack:!1};if(M.length===0)return C(N,j);let te=await w(Y),Se=new Map;for(let Ie of te)Se.set(Ie.file,Ie.exists===!1?"":Ie.content);let H;for(let Ie of M){let Tt=Se.get(Ie.file)??"",_t=Hf(Ie,Tt);if(!_t.ok)return{ok:!1,operationId:N.operationId,errorCode:_t.errorCode,reason:_t.reason,rolledBack:!1};Se.set(Ie.file,_t.source),_t.selectionRef&&(H=_t.selectionRef)}let q=await O([...Se].map(([Ie,Tt])=>({file:Ie,content:Tt,exists:!0,version:0,sha256:pe(Tt)})),te);return q.ok===!1?{ok:!1,operationId:N.operationId,errorCode:q.rolledBack?"writeback-failed":"rollback-failed",reason:q.reason,rolledBack:q.rolledBack}:(n.push({operationId:N.operationId,preSnapshots:te,postSnapshots:q.snapshots,plan:N}),p(),r.length=0,{ok:!0,operationId:N.operationId,kind:N.kind,target:N.target,resultVersion:Math.max(...q.snapshots.map(Ie=>Ie.version)),affectedFiles:[...Y],...H?{selectionRef:H}:{}})}async function l(N){let z=new Set(N.edits.map(q=>q.file)),M=await w(z),j=I(N,M);if(j)return{ok:!1,operationId:N.operationId,errorCode:"stale-version",reason:j.reason,affectedFiles:[j.file],rolledBack:!1};let Y=new Map(M.map(q=>[q.file,q])),te=N.edits.find(q=>q.operation==="create-only"&&Y.get(q.file)?.exists!==!1);if(te)return{ok:!1,operationId:N.operationId,errorCode:"stale-version",reason:`MATERIALIZATION_INSTANCE_CONFLICT: create-only target already exists: ${te.file}`,affectedFiles:[te.file],rolledBack:!1};let Se=N.edits.map(q=>q.operation==="delete"?{file:q.file,content:"",exists:!1,version:0}:{file:q.file,content:q.content,exists:!0,version:0,sha256:pe(q.content)}),H=await O(Se,M,new Set(N.edits.filter(q=>q.operation==="create-only").map(q=>q.file)));return H.ok===!1?{ok:!1,operationId:N.operationId,errorCode:H.rolledBack?"writeback-failed":"rollback-failed",reason:H.reason,rolledBack:H.rolledBack}:(n.push({operationId:N.operationId,preSnapshots:M,postSnapshots:H.snapshots,plan:{operationId:N.operationId,kind:N.kind,target:N.target,documentVersion:N.documentVersion,steps:[],preSnapshots:M}}),p(),r.length=0,{ok:!0,operationId:N.operationId,kind:N.kind,target:N.target,resultVersion:Math.max(...H.snapshots.map(q=>q.version)),affectedFiles:[...z]})}async function u(){let N=n.at(-1);if(!N)return{ok:!1,operationId:"",errorCode:"unknown",reason:"Nothing to undo"};let z=await O(N.preSnapshots,N.postSnapshots);return z.ok===!1?{ok:!1,operationId:N.operationId,errorCode:z.rolledBack?"writeback-failed":"rollback-failed",reason:z.reason,rolledBack:z.rolledBack}:(n.pop(),r.push(N),{ok:!0,operationId:N.operationId,kind:N.plan.kind,target:N.plan.target,resultVersion:Math.max(...z.snapshots.map(M=>M.version)),affectedFiles:N.preSnapshots.map(M=>M.file)})}async function d(){let N=r.at(-1);if(!N)return{ok:!1,operationId:"",errorCode:"unknown",reason:"Nothing to redo"};let z=await O(N.postSnapshots,N.preSnapshots);return z.ok===!1?{ok:!1,operationId:N.operationId,errorCode:z.rolledBack?"writeback-failed":"rollback-failed",reason:z.reason,rolledBack:z.rolledBack}:(r.pop(),n.push(N),p(),{ok:!0,operationId:N.operationId,kind:N.plan.kind,target:N.plan.target,resultVersion:Math.max(...z.snapshots.map(M=>M.version)),affectedFiles:N.postSnapshots.map(M=>M.file)})}function p(){for(;n.length>i;)n.shift();for(;n.length>0&&m()>s;)n.shift()}function m(){return n.reduce((N,z)=>N+g(z),0)}function g(N){return b(N.preSnapshots)+b(N.postSnapshots)}function b(N){return N.reduce((z,M)=>z+M.file.length+M.content.length,0)}async function C(N,z){let M=[];for(let j of z){let Y=j.capability??"write-text",te=o.find(H=>H.sourceType===j.sourceType&&(j.adapterId===void 0||H.adapterId===j.adapterId)&&(H.capabilities===void 0||H.capabilities.includes(Y)));if(!te)return{ok:!1,operationId:N.operationId,errorCode:"unsupported-operation",reason:`No external adapter registered for ${j.sourceType}`,rolledBack:!1};let Se=await te.execute(j);if(!Se.ok)return{ok:!1,operationId:N.operationId,errorCode:"writeback-failed",reason:Se.reason??`External adapter failed for ${j.sourceType}`,rolledBack:!1};M.push(j.file)}return{ok:!0,operationId:N.operationId,kind:N.kind,target:N.target,resultVersion:0,affectedFiles:M}}function I(N,z){if(N.conflictPolicy!=="compare-and-swap")return null;let M=new Map(z.map(j=>[j.file,j]));for(let j of N.edits){if(j.operation==="create-only")continue;if(j.baseContentHash===void 0)return{file:j.file,reason:`Source file ${j.file} is missing baseContentHash. Reopen the file before saving.`};let Y=M.get(j.file),te=j.baseContentHash;if(te===null){if(Y?.exists!==!1)return{file:j.file,reason:`Source file ${j.file} was created or changed before save.`};continue}if(!te)return{file:j.file,reason:`Source file ${j.file} is missing baseContentHash. Reopen the file before saving.`};if(Y?.exists===!1||Y?.sha256!==te)return{file:j.file,reason:`Source file ${j.file} changed before save. Reload or explicitly overwrite the newer version.`}}return null}async function w(N){let z=[];for(let M of N)z.push(await P(M));return z}async function P(N){if(!await e.exists(N))return{file:N,content:"",version:0,exists:!1};let M=Math.max(1,e.getVersion(N)),j=await e.readFile(N);return{file:N,content:j,version:M,exists:!0,sha256:pe(j)}}async function O(N,z,M=new Set){let j=[];try{for(let Y of N){if(M.has(Y.file)){if(!e.createExclusive)throw new Error("Create-only write requires atomic exclusive-create support.");await e.createExclusive(Y.file,Y.content)}else await se(Y);let te=e.bumpVersion(Y.file);j.push(Y.file),Y.version=te}}catch(Y){let te=await re(z.filter(H=>j.includes(H.file)));if(te.ok===!1)return{ok:!1,reason:`Writeback failed, then rollback failed for ${te.failedFiles.join(", ")}: ${Wf(Y)}`,rolledBack:!1,instanceConflict:zf(Y)};let Se=zf(Y);return{ok:!1,reason:`${Se?"MATERIALIZATION_INSTANCE_CONFLICT: ":""}Writeback failed and committed files were restored: ${Wf(Y)}`,rolledBack:!0,instanceConflict:Se}}return{ok:!0,snapshots:N.map(ov)}}async function se(N){if(N.exists===!1){await e.deleteFile(N.file);return}await e.writeFile(N.file,N.content)}async function re(N){let z=[];for(let M of N)try{await se(M),e.bumpVersion(M.file)}catch{z.push(M.file)}return z.length===0?{ok:!0}:{ok:!1,failedFiles:z}}}function zf(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="EEXIST"}function ov(e){let t=e.exists!==!1;return{file:e.file,content:t?e.content:"",version:e.version,exists:t,...t?{sha256:pe(e.content)}:{}}}function Wf(e){return e instanceof Error?e.message:String(e)}function Hf(e,t){switch(e.type){case"invoke-external-adapter":return{ok:!1,reason:"External adapter steps must be executed asynchronously",errorCode:"unsupported-operation"};case"add-import":return Oe(jn({source:t,moduleSpecifier:e.moduleSpecifier,imports:e.imports}));case"remove-import":return Oe($n({source:t,moduleSpecifier:e.moduleSpecifier,imports:e.imports}));case"remove-node":return Oe(Fn({source:t,locator:e.locator,removeWhitespace:e.removeWhitespace}));case"insert-child":return Oe(Mn({source:t,locator:e.parentLocator,node:e.node,placement:e.placement,anchorLocator:e.anchorLocator,selectionContext:e.selectionContext}));case"update-text":return Oe(Co({source:t,locator:e.locator,segmentIndex:e.segmentIndex,newText:e.newText}));case"update-value":return Oe(fr({source:t,locator:e.locator,next:e.value}));case"update-array-item":return Oe(fr({source:t,locator:e.locator,next:e.value}));case"insert-bound-array-item":return Oe(Ao({source:t,locator:e.locator,index:e.index,value:e.value}));case"insert-jsx-expression-child":return Oe(Ro({source:t,locator:e.parentLocator,expression:e.expression,placement:e.placement,anchorLocator:e.anchorLocator,selectionContext:e.selectionContext}));case"remove-bound-array-item":return Oe(To({source:t,locator:e.locator,index:e.index}));case"move-array-item":return Oe(_o({source:t,locator:e.locator,fromIndex:e.fromIndex,toIndex:e.toIndex}));case"move-node":return Oe(Ln({source:t,locator:e.locator,targetParentLocator:e.targetParentLocator,placement:e.placement,anchorLocator:e.anchorLocator,selectionContext:e.selectionContext}));case"move-repeat-template-child":return Oe(wo({source:t,locator:e.locator,targetParentLocator:e.targetParentLocator,placement:e.placement,anchorLocator:e.anchorLocator,repeatExpression:e.repeatExpression,selectionContext:e.selectionContext}));case"set-class-name-source":return iv(e,t);case"set-property-changes":return Oe(No({source:t,locator:e.locator,changes:e.changes}));case"set-property-binding":return Oe(Po({source:t,locator:e.locator,name:e.name,object:e.object,property:e.property}));case"upsert-object-property":return Oe(Oo({source:t,objectLocator:e.locator,name:e.name,value:e.value}));default:return{ok:!1,reason:`Unknown step type: ${e.type}`,errorCode:"unknown"}}}function iv(e,t){let{request:n}=e;if(n.newAttrRaw!==null&&!Vu(n.newAttrRaw))return{ok:!1,reason:"newAttrRaw must be a valid JSX className attribute.",errorCode:"invalid-params"};let r=n.oldAttrRange!==null&&n.oldAttrRaw!==null,o=n.openingElementRange.start,i=n.openingElementRange.end,s=t.slice(o,i);if(!(Number.isInteger(o)&&Number.isInteger(i)&&o>=0&&i>o&&i<=t.length&&s.startsWith("<")&&s.endsWith(">")&&!s.startsWith("</")&&(n.oldAttrRange===null||n.oldAttrRange.start>=o&&n.oldAttrRange.end<=i)))return{ok:!1,reason:"The opening element range changed before className save.",errorCode:"stale-version"};if(!r&&n.expectedVersion.contentHash!==pe(t))return{ok:!1,reason:"The source file changed before className save.",errorCode:"stale-version"};if(n.oldAttrRange){if(t.slice(n.oldAttrRange.start,n.oldAttrRange.end)!==n.oldAttrRaw)return{ok:!1,reason:"The className attribute changed before save.",errorCode:"stale-version"}}else if(n.oldAttrRaw!==null)return{ok:!1,reason:"The className attribute range no longer matches.",errorCode:"stale-version"};return{ok:!0,source:$u({source:t,oldAttrRange:n.oldAttrRange,openingElementRange:n.openingElementRange,newAttrRaw:n.newAttrRaw})}}function Oe(e){if(e.ok)return{ok:!0,source:e.source,...e.selectionRef?{selectionRef:e.selectionRef}:{}};switch(e.diagnostic.code){case"locator-miss":return{ok:!1,reason:e.diagnostic.message,errorCode:"locator-miss"};case"unsupported-syntax":case"binding-not-found":case"export-not-found":case"property-not-found":case"array-index-out-of-range":case"directive-conflict":case"metadata-shape-unsupported":return{ok:!1,reason:e.diagnostic.message,errorCode:"unsupported-operation"};case"invalid-parent-child-relation":case"self-closing-element":return{ok:!1,reason:e.diagnostic.message,errorCode:"invalid-target"};case"parse-failed":case"printer-failed":return{ok:!1,reason:e.diagnostic.message,errorCode:"ast-error"};default:return{ok:!1,reason:e.diagnostic.message,errorCode:"writeback-failed"}}}function Yf(){let e=new Set;return{emit(t){for(let n of Array.from(e))try{n(t)}catch{}},subscribe(t){return e.add(t),()=>{e.delete(t)}}}}import{classifySiteEditPropertyName as sv}from"@vcp-dev/contracts";async function Zf(e){let t=sv(e.propertyName);if(t.owner==="blocked")return qt(t.owner,t.diagnostic);if(t.owner==="class-name-source"||t.owner==="style")return qt(t.owner,{code:"owner-delegated",message:`Property '${e.propertyName}' is owned by ${t.owner}`});let n=e.element.attributes?.filter(l=>l.name===e.propertyName)??[];if(n.length>1)return qt("generic",{code:"duplicate-property-source",message:`Property '${e.propertyName}' has multiple explicit sources`});let r=n[0],o=[];r&&o.push({kind:"attribute",order:r.order??e.element.attributes.indexOf(r),attribute:r});let i=e.element.attributeSpreads??[];for(let l of i)o.push({kind:"spread",order:l.order,spread:l,target:await cv(e,l)});o.sort((l,u)=>l.order-u.order);let s=o.at(-1);if(!s)return{status:"missing",owner:"generic"};if(o.filter(l=>l.kind==="spread"&&l.order>s.order).some(l=>!l.target))return qt("generic",{code:"ambiguous-property-source",message:`A spread may provide or override property '${e.propertyName}'`});if(s.kind==="spread")return s.target?{status:"binding",owner:"generic",target:s.target}:qt("generic",{code:"ambiguous-property-source",message:`The final spread source for '${e.propertyName}' is not provably writable`});let c=o.filter(l=>l.kind==="spread"&&l.order<s.order);return e.operation==="remove"&&c.length>0?qt("generic",{code:"remove-exposes-spread",message:`Removing '${e.propertyName}' would expose an earlier spread source`}):av(e,s.attribute)}async function av(e,t){if(t.resolution&&t.resolution.status!=="resolved"&&!t.source){let r=await Wn({file:e.file,source:e.source,sourceRange:t.sourceRange,expression:t.value,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache});return r&&r.kind!=="external-entry"?{status:"binding",owner:"generic",attribute:t,target:{kind:"value-binding",target:r}}:qt("generic",{code:"unsupported-property-source",message:`Property '${e.propertyName}' has an unresolved value source`})}if(!t.source?.expression)return{status:"direct",owner:"generic",attribute:t,target:{kind:"jsx-attribute",file:e.file,sourceRange:t.sourceRange}};let n=await Wn({file:e.file,source:e.source,sourceRange:t.sourceRange,expression:t.source.expression,sourceInfo:t.source,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache});return!n||n.kind==="external-entry"?qt("generic",{code:"unsupported-property-source",message:`Property '${e.propertyName}' does not have a local writable source`}):{status:"binding",owner:"generic",attribute:t,target:{kind:"value-binding",target:n}}}async function cv(e,t){let n=t.source?.expression;if(!n)return;let r=await Wn({file:e.file,source:e.source,sourceRange:t.sourceRange,expression:n,sourceInfo:t.source,readFile:e.readFile,exists:e.exists,graph:e.graph,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters,functionCallContracts:e.functionCallContracts,fileCache:e.fileCache});if(!(!r||r.kind==="external-entry"))return{kind:"value-binding",target:lv(r,e.propertyName)}}function lv(e,t){let n=[...e.path??[],{kind:"property",name:t}];return{...e,path:n,locator:e.locator?{...e.locator,path:n}:{kind:"value",root:e.root??{kind:"binding",name:t},path:n}}}function qt(e,t){return{status:"blocked",owner:e,...t?{diagnostic:t}:{}}}import*as Ua from"@babel/parser";import Va from"@babel/traverse";import*as U from"@babel/types";import{classifySiteEditPropertyName as uv}from"@vcp-dev/contracts";var Ka=typeof Va=="function"?Va:Va.default;function Ja(e){let t=uv(e.propertyName);if(t.owner!=="generic")return ze("invalid-property",t.diagnostic?.message??`Property '${e.propertyName}' is not a generic property`);let n=e.selectionRef;if(!n)return ze("missing-selection-ref","A repeat property target requires a complete selection reference");if(n.key!==e.element.identity.key)return ze("selection-mismatch","Selection reference does not identify the requested element");if(n.instanceIndex===void 0)return ze("missing-instance-index","A repeat property target requires an instance index");let r;try{r=Ua.parse(e.source,{sourceType:"module",plugins:["typescript","jsx"]})}catch(C){return ze("repeat-not-found",`Unable to parse repeat source: ${C instanceof Error?C.message:String(C)}`)}let o=dv(r,e.element.sourceRange);if(!o)return ze("repeat-not-found","The selected element is not inside a supported map repeat");if(!U.isIdentifier(o.callback.params[0]))return ze("unsupported-callback","Repeat property materialization requires an identifier callback item");let i=fv(r,o.collection,e.file,e.sources);if(!i)return ze("collection-not-found","The repeat collection is not a visible local static array");let{array:s,locator:a,sourceFile:c}=i,l=[],u=[];for(let[C,I]of s.elements.entries()){if(!I||!U.isObjectExpression(I)||!rp(I))return ze("unsafe-collection","Repeat materialization requires an array of local static objects without spreads");let w=[{kind:"index",index:C}];l.push(w),u.push({kind:"value",root:a.root,path:w})}let d=u.length;if(n.instanceCount!==void 0&&n.instanceCount!==d)return ze("count-mismatch",`Selection reports ${n.instanceCount} instances but the source collection has ${d}`);let p=n.instanceIndex;if(p>=d)return ze("index-out-of-range",`Selected repeat instance ${p} is outside the source collection`);let m=s.elements[p];if(!m||!U.isObjectExpression(m))return ze("unsafe-collection","Selected repeat item is not an object");let g=xv(e.element,e.propertyName),b=hv(m,e.propertyName);return b?{ok:!0,sourceFile:c,templateFile:e.file,collectionLocator:a,parentObjectLocators:u,selectedParentObjectLocator:u[p],sourceItemIndex:p,sourceItemPath:l[p],collectionIndexMap:Array.from({length:d},(C,I)=>I),callbackItemName:o.callback.params[0].name,targetElementLocator:{kind:"jsx-node",strategy:"structural-path",file:e.element.identity.file,component:e.element.identity.component,structuralPath:e.element.identity.structuralPath,expectedRange:e.element.sourceRange},propertyName:e.propertyName,propertyState:b,selectedResolution:yv(m,e.propertyName),...g?{property:g}:{},selectionRef:n}:ze("unsafe-property-source",`Property '${e.propertyName}' has a dynamic or unsupported source in the repeat item`)}function dv(e,t){let n=[];return Ka(e,{CallExpression(r){let o=qf(r.node);o&&ep(o.callback,t)&&n.push({...o,span:Qf(r.node)})},OptionalCallExpression(r){let o=qf(r.node);o&&ep(o.callback,t)&&n.push({...o,span:Qf(r.node)})}}),n.sort((r,o)=>r.span-o.span),n[0]??null}function qf(e){let t=e.callee;if(!U.isMemberExpression(t)&&!U.isOptionalMemberExpression(t)||t.computed||!U.isIdentifier(t.property)||t.property.name!=="map"||!U.isExpression(t.object))return null;let n=e.arguments[0];return!n||!U.isExpression(n)||!U.isArrowFunctionExpression(n)&&!U.isFunctionExpression(n)?null:{collection:t.object,callback:n}}function fv(e,t,n,r){let o=Or(t);if(o&&U.isArrayExpression(o))return{array:o,locator:{kind:"value",root:{kind:"expression",sourceRange:ip(o)}},sourceFile:n};if(!U.isIdentifier(t))return null;let i=[];if(Ka(e,{VariableDeclarator(s){U.isIdentifier(s.node.id)&&s.node.id.name===t.name&&s.node.init&&i.push(s.node)}}),i.length===1){let s=Or(i[0].init);return!s||!U.isArrayExpression(s)?null:{array:s,locator:{kind:"value",root:{kind:"binding",name:t.name}},sourceFile:n}}return pv(e,t.name,n,r)}function pv(e,t,n,r){if(!r)return null;for(let o of e.program.body){if(!U.isImportDeclaration(o))continue;let i=o.specifiers.find(p=>p.local.name===t);if(!i||!U.isStringLiteral(o.source)||!U.isImportSpecifier(i))continue;let s=gv(n,o.source.value,r);if(!s)return null;let a=U.isIdentifier(i.imported)?i.imported.name:i.imported.value,c=r.get(s);if(c===void 0)return null;let l;try{l=Ua.parse(c,{sourceType:"module",plugins:["typescript","jsx"]})}catch{return null}let u=mv(l,a),d=u?Or(u):null;return!d||!U.isArrayExpression(d)?null:{array:d,locator:{kind:"value",root:{kind:"binding",name:a}},sourceFile:s}}return null}function mv(e,t){let n=null;return Ka(e,{VariableDeclarator(r){n||!U.isIdentifier(r.node.id)||r.node.id.name!==t||!r.node.init||!U.isExpression(r.node.init)||(n=r.node.init)}}),n}function gv(e,t,n){let r=tr(e,t);return[r,r+".tsx",r+".ts",r+".jsx",r+".js",r+"/index.tsx",r+"/index.ts",r+"/index.jsx",r+"/index.js"].find(i=>n.has(i))??null}function Or(e){return U.isParenthesizedExpression(e)?Or(e.expression):U.isTSAsExpression(e)?np(e.typeAnnotation)?Or(e.expression):null:U.isTSSatisfiesExpression(e)?null:e}function np(e){return U.isTSTypeReference(e)&&U.isIdentifier(e.typeName)&&e.typeName.name==="const"}function rp(e){return e.properties.every(t=>!U.isObjectProperty(t)||t.computed||!U.isExpression(t.value)?!1:si(t.value))}function si(e){if(U.isTSAsExpression(e)&&np(e.typeAnnotation))return si(e.expression);if(U.isTSSatisfiesExpression(e))return!1;if(U.isArrayExpression(e))return e.elements.every(n=>!n||U.isSpreadElement(n)||!U.isExpression(n)?!1:si(n));if(U.isObjectExpression(e))return rp(e);let t=mt(e);return t.status==="resolved"||t.status==="undefined"}function hv(e,t){let n=e.properties.filter(o=>U.isObjectProperty(o)&&op(o.key)===t);if(n.length>1)return null;let r=n[0];return r?U.isExpression(r.value)?si(r.value)?"static":U.isIdentifier(r.value)||U.isMemberExpression(r.value)?"binding":null:null:"missing"}function yv(e,t){let n=e.properties.filter(o=>U.isObjectProperty(o)&&op(o.key)===t);if(n.length>1)return{status:"unresolved"};let r=n[0];return!r||!U.isExpression(r.value)?{status:"undefined"}:mt(r.value)}function xv(e,t){let n=e.attributes?.filter(r=>r.name===t)??[];return n.length===1?n[0]:void 0}function op(e){return U.isIdentifier(e)?e.name:U.isStringLiteral(e)?e.value:U.isNumericLiteral(e)?String(e.value):null}function ip(e){return{startLine:e.loc?.start.line??0,startColumn:e.loc?.start.column??0,endLine:e.loc?.end.line??0,endColumn:e.loc?.end.column??0}}function Qf(e){return e.start==null||e.end==null?Number.MAX_SAFE_INTEGER:e.end-e.start}function ep(e,t){let n=ip(e);return tp(n.startLine,n.startColumn,t.startLine,t.startColumn)<=0&&tp(n.endLine,n.endColumn,t.endLine,t.endColumn)>=0}function tp(e,t,n,r){return e===n?t-r:e-n}function ze(e,t){return{ok:!1,errorCode:e,reason:t}}function cp(e){let t=e.isRepeat??(e.graph?wv(e.element,e.graph):!1),n=e.propertyProvenance??new Map,r=e.repeatTargets??new Map,o=Rv(e.element.attributes??[]),i=[...r.values()].some(u=>u.ok),s=o.map(u=>bv({attribute:u,element:e.element,isRepeat:t,selectionRef:e.selectionRef,provenance:n.get(u.name),repeatTarget:r.get(u.name)})),a=(e.element.attributeSpreads?.length??0)>0,c=(e.element.attributeSpreads??[]).slice().sort((u,d)=>u.order-d.order).map(u=>({raw:u.raw,sourceRange:Pv(u.sourceRange,e.source),order:u.order,diagnostics:u.source?[]:[{code:"unsupported-spread-source",message:"The spread source cannot be resolved safely, so property ownership is conservative."}]})),l=t&&e.selectionRef?.instanceIndex!==void 0&&i;return{documentVersion:e.documentVersion,...e.selectionRef?{selectionRef:e.selectionRef}:{},items:s,spreads:c,creation:t?{selection:l?"materialize":"unsupported",template:"unsupported"}:{selection:a?"unsupported":"direct",template:a?"unsupported":"direct"}}}function bv(e){let{attribute:t,provenance:n,repeatTarget:r}=e,o=e.selectionRef?.instanceIndex!==void 0&&r?.ok===!0?r:null,i=Sv(t,n,e.isRepeat),s=Ev(t,n,o,e.isRepeat),a=Iv(n,o,e.element),c=o?"repeat-item":e.isRepeat?"repeat-template":"node",l=Cv(t,n,r);return{name:t.name,source:i,resolution:s,editMode:a,sourceScope:c,allowedWriteScopes:kv(a,c,n),...ap(n,o,e.element)?{effectiveWriteTarget:ap(n,o,e.element)}:{},diagnostics:l}}function Sv(e,t,n){let r;if(n&&t?.status==="binding"){let o=t.target;r=o?.kind==="value-binding"&&o.target.sourceKind==="repeat-template"?"repeat-template":"binding"}else e.syntaxKind==="boolean-shorthand"?r="boolean-shorthand":e.syntaxKind==="literal"||!e.source?r="literal":r="expression";return{kind:r,...e.raw!==void 0?{raw:e.raw}:{}}}function Ev(e,t,n,r){return n?sp(n.selectedResolution):t?.status==="blocked"?{status:"unresolved"}:r&&t?.status==="binding"?{status:"unresolved"}:sp(vv(e))}function vv(e){return e.resolution?e.resolution:e.syntaxKind==="boolean-shorthand"?{status:"resolved",value:!0}:e.resolvedValue!==void 0?{status:"resolved",value:e.resolvedValue}:e.source?{status:"unresolved"}:{status:"resolved",value:e.value}}function sp(e){return!e||e.status==="unresolved"?{status:"unresolved"}:e.status==="undefined"?{status:"undefined"}:{status:"resolved",value:e.value}}function Iv(e,t,n){if(t)return"direct";if(!e||e.status==="blocked")return"unsupported";if(e.status==="missing"||e.status==="direct")return"direct";let r=e.target;return r?.kind!=="value-binding"?"unsupported":r.target.file===n.sourceFile?"direct":"proxy"}function kv(e,t,n){return e==="readonly"||e==="unsupported"?[]:n?.status==="binding"?t==="repeat-template"?["template"]:["selection"]:t==="repeat-template"?["template"]:["selection","template"]}function ap(e,t,n){if(t)return{kind:"value-path",file:t.sourceFile,isProxy:t.sourceFile!==n.sourceFile,displayPath:`${Nv(t.selectedParentObjectLocator)}.${t.propertyName}`};if(e?.target?.kind==="jsx-attribute")return{kind:"jsx-node",file:e.target.file,isProxy:e.target.file!==n.sourceFile,displayPath:`${n.componentName} > ${e.attribute?.name??"attribute"}`};if(e?.target?.kind==="value-binding")return{kind:"value-path",file:e.target.target.file,isProxy:e.target.target.file!==n.sourceFile,displayPath:e.target.target.displayExpression}}function Cv(e,t,n){let r=[];return t?.diagnostic&&r.push({code:t.diagnostic.code,message:t.diagnostic.message}),n&&!n.ok&&t?.status!=="missing"&&r.push({code:`repeat-${n.errorCode}`,message:n.reason}),e.resolution?.status==="unresolved"&&r.length===0&&r.push({code:"unsupported-property-source",message:`Property '${e.name}' has an unresolved value source`}),r}function Rv(e){let t=new Set;return e.filter(n=>t.has(n.name)?!1:(t.add(n.name),!0))}function wv(e,t){let n=t.regions.filter(r=>r.kind==="repeat-region");for(let r of n){let o=e;for(;o;){if(r.childKeys.includes(o.identity.key))return!0;o=o.parentKey?t.elements.get(o.parentKey):void 0}}return!1}function Nv(e){return`${e.root.kind==="binding"?e.root.name:e.root.kind==="expression"?e.root.sourceRange?"expression":"value":e.root.kind}${(e.path??[]).map(n=>n.kind==="index"?`[${n.index}]`:`.${n.name}`).join("")}`}function Pv(e,t){if(!t)return{start:e.startColumn,end:e.endColumn};let n=t.split(`
5
+ `),r=(o,i)=>n.slice(0,Math.max(0,o-1)).reduce((s,a)=>s+a.length+1,0)+i;return{start:r(e.startLine,e.startColumn),end:r(e.endLine,e.endColumn)}}import{randomUUID as Av}from"node:crypto";import ai from"node:fs/promises";import Xa from"node:path";import{setTimeout as Tv}from"node:timers/promises";var _v={async mkdir(e,t){await ai.mkdir(e,t)},async writeFile(e,t,n){await ai.writeFile(e,t,n)},async rename(e,t){await ai.rename(e,t)},async rm(e,t){await ai.rm(e,t)}},Fv=new Set(["EACCES","EBUSY","EPERM"]),Ov=[10,20,40,80,160];async function Mv(e,t,n){for(let r of Ov)try{await e.rename(t,n);return}catch(o){if(!Dv(o))throw o;await Tv(r)}await e.rename(t,n)}function Dv(e){return e instanceof Error&&"code"in e&&typeof e.code=="string"&&Fv.has(e.code)}async function ci(e,t,n=_v){let r=Xa.dirname(e),o=Xa.basename(e),i=Xa.join(r,`.${o}.${process.pid}.${Av()}.tmp`),s=!1;try{await n.mkdir(r,{recursive:!0}),await n.writeFile(i,t,"utf8"),await Mv(n,i,e),s=!0}finally{if(!s)try{await n.rm(i,{force:!0})}catch{}}}import{randomBytes as Zv}from"node:crypto";import At from"node:path";import{parse as qv}from"@babel/parser";import Qv from"@babel/traverse";import{COMPONENT_I18N_FILE_SUFFIX as ui,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as fp,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as eI,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as tI,SiteEditMaterializationSchema as nI,parseComponentI18nResourcesJson as rI}from"@vcp-dev/contracts";var up=/#[0-9a-fA-F]{3,8}\b|\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\s*\(/i,dp=/\b(?:bg-black|bg-white|text-white|text-black)(?:\b|\/)/g,Lv=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke)-\[#(?:[0-9a-fA-F]{3,8})\](?:\/\d+)?/g,Bv=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*#[0-9a-fA-F]{3,8}[^'"]*['"]/g,jv=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*rgba?\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,$v=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,Vv=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,Uv=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*(?:oklch|lab|lch|hsla?)\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,Kv=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*(?:oklch|lab|lch|hsla?)\([^)]+\)[^'"]*['"]/gi,Jv=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*color-mix\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,Xv=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*color-mix\([^'"]*['"]/gi,zv=/\b(?:bg|text|border|ring|outline|fill|stroke)-(?:black|white|slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)(?:-\d{2,3})?(?:\b|\/)/g,Wv=/var\(\s*--(?:_|private-|vcp-)[^)]+\)/gi,Hv=/#[0-9a-fA-F]{3,8}\b|\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\s*\([^)]*\)/gi;function Mr(e,t){let n=li([...tt(e,Lv),...tt(e,Bv),...tt(e,jv),...tt(e,t.includeRgbBackgroundImage?$v:Vv),...t.includeExtendedColorFunctions?[...tt(e,Uv),...tt(e,Kv)]:[]]),r=li([...tt(e,Jv),...tt(e,Xv)]).filter(o=>t.colorMixPolicy==="always"||up.test(o));return n.push(...r.filter(o=>!n.includes(o))),t.rejectTailwindPalette&&n.push(...tt(e,zv).filter(o=>!n.includes(o))),t.rejectAnyRawColorLiteral&&n.push(...tt(e,Hv).filter(o=>!n.includes(o))),{hardCodedSurfaceHits:li(tt(e,dp)),hardCodedSurfaceOccurrences:Yv(e),rawColorHits:n,privateTokenHits:t.rejectPrivateTokens?li(tt(e,Wv)):[]}}function tt(e,t){return e.match(new RegExp(t.source,t.flags))??[]}var lp=160,Gv=/((?:[a-z][a-z0-9-]*(?:\[[^\]]*\])?:)+)$/;function Yv(e){let t=new RegExp(dp.source,"g"),n=[0];for(let s=0;s<e.length;s+=1)e[s]===`
6
+ `&&n.push(s+1);let r=s=>{let a=0,c=n.length-1;for(;a<c;){let l=Math.ceil((a+c)/2);(n[l]??0)<=s?a=l:c=l-1}return a},o=[],i;for(;(i=t.exec(e))!==null;){let s=i[0],a=s.endsWith("/")?s.slice(0,-1):s,c=/^\/(\d+)/.exec(e.slice(i.index+a.length)),l=e.slice(Math.max(0,i.index-64),i.index),u=Gv.exec(l),d=r(i.index),p=e.indexOf(`
7
+ `,i.index),m=e.slice(n[d]??0,p===-1?void 0:p).trim();o.push({token:a,variant:u?.[1]??"",alpha:c?Number(c[1]):null,line:d+1,snippet:m.length>lp?`${m.slice(0,lp-1)}\u2026`:m})}return o}function li(e){return[...new Set(e)]}var Ha="components/site/generated",pp="{{$INSTANCE}}",di=5,oI=/^[a-z][a-z0-9-]{0,48}$/,iI=/^[a-f0-9]{8}$/,mp=/\.tsx?$/,sI=/\.json$/,aI=/\.(?:tsx?|json)$/,cI=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,lI=["react","react/","next","next/","lucide-react","react-i18next","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],za=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),Wa=Qv,uI=typeof Wa=="function"?Wa:Wa.default;function dI(e){let t=Array.isArray(e.manifest.files)?e.manifest.files:[];if(t.length>fp)return{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab file count exceeds the reusable limit."}};let n=vI(t);if(n)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Static prefab resolves duplicate target path: ${n}`,path:n}};let r=nI.safeParse(e.manifest);if(!r.success)return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab manifest failed schema validation."}};let o=bI(e.generatedRoot);if(!o)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Generated root must be ${Ha}.`,path:e.generatedRoot}};if(!Sp(r.data.instanceBaseName))return{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_INVALID",message:"Static prefab instanceBaseName must contain at least one safe word.",path:r.data.instanceBaseName}};let i=yp(r.data.files),s=yp(e.controlledFiles);if(!II(i,s))return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Controlled file list must exactly match the manifest file templates."}};if(i.size>fp)return{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab file count exceeds the reusable limit."}};let a=0;for(let[c,l]of r.data.files.entries()){let u=Buffer.byteLength(l.content,"utf8");if(u>eI)return{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab file exceeds the per-file content limit.",file:l.pathTemplate,path:`files[${c}]`}};a+=u}return a>tI?{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab exceeds the reusable total content limit."}}:{ok:!0,data:{kind:"static-prefab-materialization",instanceName:"",generatedRoot:o,instanceRoot:"",entry:{path:"",export:r.data.entry.export},files:[]}}}async function fI(e){let t=dI(e);if(!t.ok)return t;let n=t.data.generatedRoot,r=Sp(e.manifest.instanceBaseName),o=Math.max(1,Math.min(di,e.maxAttempts??di));for(let i=0;i<o;i+=1){let s=SI(e.instanceNameGenerator?.()??Zv(4).toString("hex"));if(!s)return{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_INVALID",message:"Static prefab instance suffix must be 8 lowercase hex chars."}};let a=`${r}-${s}`,c=vp(n,a),l=pI({manifest:e.manifest,generatedRoot:n,instanceName:a,instanceRoot:c,allowedExternalImports:e.allowedExternalImports??lI});if(!l.ok)return l;if(!await mI(e.exists,c,l.data.files))return{ok:!0,data:l.data}}return{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_CONFLICT",message:"Unable to allocate a create-only static prefab instance after repeated conflicts."}}}async function bp(e){let t=Math.max(1,Math.min(di,e.maxAttempts??di));for(let n=0;n<t;n+=1){let r=await fI({...e,maxAttempts:1});if(!r.ok){if(r.error.code==="MATERIALIZATION_INSTANCE_CONFLICT")continue;return r}let o=await e.commit(r.data);if(o.ok)return{ok:!0,plan:r.data,data:o.data};if(o.error.code!=="MATERIALIZATION_INSTANCE_CONFLICT")return o}return{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_CONFLICT",message:"Unable to commit a complete static prefab instance after repeated conflicts."}}}function pI(e){let t=[],n=new Set;for(let i of e.manifest.files){let s=gp({pathTemplate:i.pathTemplate,generatedRoot:e.generatedRoot,instanceName:e.instanceName,instanceRoot:e.instanceRoot});if(!s.ok)return s;if(n.has(s.data))return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Static prefab resolves duplicate target path: ${s.data}`,path:s.data}};n.add(s.data),t.push({kind:"create-only",path:s.data,content:i.content,...i.role?{role:i.role}:{},sourcePathTemplate:i.pathTemplate})}t.sort((i,s)=>i.path.localeCompare(s.path));let r=gp({pathTemplate:e.manifest.entry.pathTemplate,generatedRoot:e.generatedRoot,instanceName:e.instanceName,instanceRoot:e.instanceRoot});if(!r.ok)return r;if(!t.some(i=>i.path===r.data))return{ok:!1,error:{code:"MATERIALIZATION_ENTRY_INVALID",message:"Entry path must match one of the static prefab files.",path:r.data}};let o=gI(t,e.instanceRoot,r.data,e.manifest.entry.export,e.allowedExternalImports);return o.ok?{ok:!0,data:{kind:"static-prefab-materialization",instanceName:e.instanceName,generatedRoot:e.generatedRoot,instanceRoot:e.instanceRoot,entry:{path:r.data,export:e.manifest.entry.export},files:t}}:o}async function mI(e,t,n){if(await e(t))return!0;for(let r of n)if(await e(r.path))return!0;return!1}function gp(e){if(e.pathTemplate.split(pp).length!==2)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab path templates must include the instance placeholder exactly once.",path:e.pathTemplate}};let t=e.pathTemplate.replaceAll(pp,e.instanceName),n=EI(t);return n?vp(e.generatedRoot,e.instanceName)!==e.instanceRoot?{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab instance root normalization failed.",path:e.pathTemplate}}:n!==e.instanceRoot&&!n.startsWith(`${e.instanceRoot}/`)?{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab path must stay under components/site/generated/<instance>.",path:n}}:n!==t?{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab path template cannot rely on path normalization semantics.",path:e.pathTemplate}}:n===e.instanceRoot||!aI.test(n)||cI.test(n)?{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab files must be .ts/.tsx/.json files and cannot be config, layout, provider, or global source files.",path:n}}:{ok:!0,data:n}:{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:"Static prefab path template resolves to an unsafe path.",path:e.pathTemplate}}}function gI(e,t,n,r,o){let i=new Set(e.map(d=>d.path)),s=new Map,a=new Map(e.map(d=>[d.path,new Set])),c=new Map;for(let d of e){if(sI.test(d.path)){if(d.path.endsWith(ui)){let g=rI(d.content);if(!g.success)return xn("MATERIALIZATION_DATA_UNSUPPORTED",g.error.message,d.path);c.set(d.path,new Set)}else try{JSON.parse(d.content)}catch{return xn("MATERIALIZATION_DATA_UNSUPPORTED","Static prefab JSON file must contain valid JSON.",d.path)}continue}let p;try{p=qv(d.content,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab files must parse as plain module source.",file:d.path}}}let m=Mr(d.content,{colorMixPolicy:"always",includeExtendedColorFunctions:!0,includeRgbBackgroundImage:!0,rejectAnyRawColorLiteral:!0,rejectPrivateTokens:!0,rejectTailwindPalette:!0});if(m.hardCodedSurfaceHits.length>0||m.rawColorHits.length>0||m.privateTokenHits.length>0)return{ok:!1,error:{code:"MATERIALIZATION_STYLE_FORBIDDEN",message:"Static prefab source must use public semantic design tokens instead of raw colors or private tokens.",file:d.path}};s.set(d.path,p)}for(let d of e){if(!mp.test(d.path))continue;let p=s.get(d.path),m=null;if(uI(p,{ImportDeclaration(g){let b=hp({importer:d.path,source:g.node.source.value,instanceRoot:t,filePaths:i,allowedExternalImports:o});if(!b.allowed)m??={code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Static prefab imports must resolve within the controlled instance or match the starter allowlist.",file:d.path},g.stop();else if(b.internalPath&&(a.get(d.path).add(b.internalPath),b.internalPath.endsWith(ui))){let C=hI({importer:d.path,imported:b.internalPath,source:g.node.source.value,ast:p});C.ok?c.get(b.internalPath).add(d.path):(m??=C.error,g.stop())}},ExportAllDeclaration(g){m??={code:"MATERIALIZATION_ENTRY_INVALID",message:"Static prefab files cannot use export-star declarations.",file:d.path},g.stop()},ExportNamedDeclaration(g){if(g.node.source){let b=hp({importer:d.path,source:g.node.source.value,instanceRoot:t,filePaths:i,allowedExternalImports:o});!b.allowed||!b.internalPath?(m??={code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Static prefab re-exports must resolve within the controlled instance.",file:d.path},g.stop()):a.get(d.path).add(b.internalPath)}},CallExpression(g){if(g.node.callee.type==="Import"){m??={code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Static prefab files cannot use dynamic import().",file:d.path},g.stop();return}g.node.callee.type==="Identifier"&&g.node.callee.name==="require"&&(m??={code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Static prefab files cannot use require().",file:d.path},g.stop())},NewExpression(g){g.node.callee.type==="Identifier"&&g.node.callee.name==="Function"&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab files cannot construct functions dynamically.",file:d.path},g.stop())},MetaProperty(g){g.node.meta.type==="Identifier"&&g.node.meta.name==="import"&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab files cannot use import.meta.",file:d.path},g.stop())},MemberExpression(g){let b=xp(g.node);b&&za.has(b)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${b}.`,file:d.path},g.stop())},OptionalMemberExpression(g){let b=xp(g.node);b&&za.has(b)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${b}.`,file:d.path},g.stop())},Identifier(g){g.isReferencedIdentifier()&&za.has(g.node.name)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${g.node.name}.`,file:d.path},g.stop())},JSXAttribute(g){g.node.name.type==="JSXIdentifier"&&g.node.name.name==="style"&&(m??={code:"MATERIALIZATION_STYLE_FORBIDDEN",message:"Static prefab source cannot use inline style attributes.",file:d.path},g.stop())},JSXOpeningElement(g){g.node.name.type==="JSXIdentifier"&&g.node.name.name.toLowerCase()==="style"&&(m??={code:"MATERIALIZATION_STYLE_FORBIDDEN",message:"Static prefab source cannot declare style elements.",file:d.path},g.stop())}}),m)return{ok:!1,error:m}}if(!mp.test(n))return xn("MATERIALIZATION_ENTRY_INVALID","Static prefab entry must be a .ts/.tsx source module.",n);let l=s.get(n);if(!l)return xn("MATERIALIZATION_ENTRY_INVALID","Static prefab entry must resolve to a controlled source file.",n);if(!yI(l,r))return xn("MATERIALIZATION_EXPORT_MISSING","Static prefab entry does not declare the manifest export.",n);for(let[d,p]of c)if(p.size!==1)return xn("MATERIALIZATION_IMPORT_FORBIDDEN","Each component .i18n.json file must have exactly one same-name Client Component static importer.",d);return xI(n,a).size!==e.length?xn("MATERIALIZATION_ENTRY_INVALID","Every controlled source file must be reachable from the entry module.",n):{ok:!0,data:{kind:"static-prefab-materialization",instanceName:"",generatedRoot:Ha,instanceRoot:"",entry:{path:"",export:{kind:"default"}},files:[]}}}function hp(e){if(!e.source.startsWith("./")&&!e.source.startsWith("../"))return e.source.startsWith("@/components/site/generated/")?{allowed:!1}:{allowed:e.allowedExternalImports.some(o=>o.endsWith("/")?e.source.startsWith(o):e.source===o)};if(e.source.includes("\\")||e.source.includes("\0"))return{allowed:!1};let t=At.posix.normalize(At.posix.join(At.posix.dirname(e.importer),e.source));if(t===e.instanceRoot||!t.startsWith(`${e.instanceRoot}/`))return{allowed:!1};let r=[t,`${t}.ts`,`${t}.tsx`,`${t}.json`,...["ts","tsx","json"].map(o=>`${t}/index.${o}`)].find(o=>e.filePaths.has(o));return r?{allowed:!0,internalPath:r}:{allowed:!1}}function hI(e){let t=At.posix.dirname(e.importer),n=At.posix.dirname(e.imported),r=At.posix.basename(e.importer).replace(/\.tsx?$/,""),o=At.posix.basename(e.imported).slice(0,-ui.length),i=`./${r}${ui}`;return!e.importer.endsWith(".tsx")||t!==n||r!==o||e.source!==i?{ok:!1,error:{code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:"Component i18n resources must use an explicit same-directory, same-name import from a .tsx file.",file:e.importer}}:e.ast.program.directives.some(a=>a.value.value==="use client")?{ok:!0}:{ok:!1,error:{code:"MATERIALIZATION_IMPORT_FORBIDDEN",message:'A component that imports .i18n.json must declare the top-level "use client" directive.',file:e.importer}}}function yI(e,t){for(let n of e.program.body){if(t.kind==="default"&&n.type==="ExportDefaultDeclaration")return!0;if(t.kind!=="named"||n.type!=="ExportNamedDeclaration")continue;if(n.specifiers.some(o=>o.exported.type==="Identifier"&&o.exported.name===t.name))return!0;let r=n.declaration;if((r?.type==="FunctionDeclaration"||r?.type==="ClassDeclaration")&&r.id?.name===t.name||r?.type==="VariableDeclaration"&&r.declarations.some(o=>o.id.type==="Identifier"&&o.id.name===t.name))return!0}return!1}function xI(e,t){let n=new Set,r=[e];for(;r.length>0;){let o=r.pop();n.has(o)||(n.add(o),r.push(...t.get(o)??[]))}return n}function xn(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{file:n}:{}}}}function bI(e){let t=Ep(e);return t===Ha?t:null}function SI(e){let t=e.trim().toLowerCase();return iI.test(t)?t:null}function Sp(e){let t=e.trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,49).replace(/-+$/g,"");return oI.test(t)?t:null}function Ep(e){if(!e||e.startsWith("/")||e.includes("\\"))return null;let t=At.posix.normalize(e);return t==="."||t.startsWith("../")||t.includes("/../")||t.includes("//")?null:t}function EI(e){let t=Ep(e);return!t||t!==e?null:t}function vp(...e){return At.posix.join(...e)}function yp(e){return new Set(e.map(t=>t.pathTemplate))}function vI(e){let t=new Set;for(let n of e){if(t.has(n.pathTemplate))return n.pathTemplate;t.add(n.pathTemplate)}return null}function II(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function xp(e){let t=e;for(;;){if(!t||typeof t!="object"||!("type"in t))return null;if(t.type==="Identifier"&&"name"in t&&typeof t.name=="string")return t.name;if(t.type==="MemberExpression"||t.type==="OptionalMemberExpression"){t=t.object;continue}return null}}import{randomBytes as kI}from"node:crypto";import fi from"node:path";import{parse as Qa}from"@babel/parser";import CI from"@babel/traverse";import*as Np from"@babel/types";import{COMPONENT_I18N_FILE_SUFFIX as Ya,PageResourceArtifactSchema as RI,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as wI,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as NI,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as PI,parseComponentI18nResourcesJson as AI}from"@vcp-dev/contracts";var Za="{{$INSTANCE}}",TI=/\{\{\$PAGE_ROUTE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,_I=/\{\{\$PAGE_TITLE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,qa="components/site/generated",FI=/\.(?:tsx?|json)$/,OI=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,MI=["react","react/","next","next/","lucide-react","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],DI=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),Ga=CI,LI=typeof Ga=="function"?Ga:Ga.default;async function ec(e){let t=RI.safeParse(e.artifact);if(!t.success)return ae("Page resource artifact failed contract validation.");let n=t.data,r=e.randomHex??(()=>kI(4).toString("hex")),o=Math.max(1,Math.min(e.maxAttempts??5,5)),i=HI(r());if(!i)return ae("Random instance suffix must be 8 lowercase hex chars.");let s=`${GI(n.resource_id)}-${i}`,a=new Map,c=new Map,l=[];for(let P of n.pages){let O=P.final_route.slice(1);a.set(P.template_page_id,P.final_route),c.set(P.template_page_id,P.title),l.push({template_page_id:P.template_page_id,title:P.title,final_route:P.final_route,route_file_path:`app/${O}/page.tsx`})}let u=[],d=new Set,p=new Set,m=new Map,g=new Map,b=[],C=new Set(n.pages.flatMap(P=>P.components.map(O=>O.component_id)));for(let P of n.components){if(!C.has(P.component_id))continue;let O=Ip({materialization:P.materialization,packageInstanceId:s,routeByPage:a,titleByPage:c});if(!O.ok)return O;for(let se of O.files){let re=Cp(se,d,u);if(re)return re}p.add(O.entry),g.set(O.entry,O.entryExport),m.set(P.component_id,O.entry)}for(let[P,O]of n.pages.entries()){let se=l[P],re=Ip({materialization:O.materialization,packageInstanceId:s,routeByPage:a,titleByPage:c,pageEntryTarget:se.route_file_path,pageTitle:se.title});if(!re.ok)return re;for(let M of re.files){let j=Cp(M,d,u);if(j)return j}p.add(re.entry),g.set(re.entry,re.entryExport),b.push({entry:re.entry,declaredComponentIds:new Set(O.components.map(M=>M.component_id))});let N=u.find(M=>M.file===se.route_file_path);if(!N)return ae("Page materialization entry did not resolve to its final route file.",se.route_file_path);if(UI(N.content,se.route_file_path)!==se.final_route)return ae(`Page ${O.template_page_id} requires a static PAGE_SEO.path equal to ${se.final_route}.`,se.route_file_path)}let I=jI(u,p,s,m,b,g);if(!I.ok)return I;for(let P of u)if(await e.exists(P.file))return!P.file.startsWith("app/")&&o>1?ec({...e,randomHex:r,maxAttempts:o-1}):{ok:!1,code:"MATERIALIZATION_CONFLICT",message:`Page resource create-only target already exists: ${P.file}`,path:P.file};let w=$I(u);return w||(u.sort((P,O)=>P.file.localeCompare(O.file)),{ok:!0,packageInstanceId:s,pages:l,files:u})}function Ip(e){let t=e.materialization.entry.pathTemplate,n=[];for(let o of e.materialization.files){let i=o.pathTemplate===t,s=i&&e.pageEntryTarget?e.pageEntryTarget:kp(o.pathTemplate,e.packageInstanceId);if(!s)return ae("Materialization path cannot be mapped into the package namespace.",o.pathTemplate);let a=BI(o.content,e.packageInstanceId,e.routeByPage,e.titleByPage);if(!a.ok)return a;let c=i&&e.pageTitle!==void 0?KI(a.data,e.pageTitle,s):a;if(!c.ok)return c;n.push({operation:"create-only",file:s,content:c.data})}let r=e.pageEntryTarget??kp(t,e.packageInstanceId);return!r||!n.some(o=>o.file===r)?ae("Materialization entry must match one controlled source file.",t):{ok:!0,files:n,entry:r,entryExport:e.materialization.entry.export}}function BI(e,t,n,r){let o,i=e.replace(TI,(c,l)=>{let u=n.get(l);return u||(o=l,c)});if(o)return ae(`Page route placeholder references unknown template page: ${o}`);let s=i.replace(_I,(c,l)=>{let u=r.get(l);return u?JSON.stringify(u):(o=l,c)});if(o)return ae(`Page title placeholder references unknown template page: ${o}`);let a=s.replaceAll(Za,t);return a.includes("{{$PAGE_ROUTE:")||a.includes("{{$PAGE_TITLE:")||a.includes("{{$INSTANCE}}")?ae("Materialization contains an unresolved placeholder."):{ok:!0,data:a}}function kp(e,t){let n=`${qa}/${t}`;if(e.split(Za).length>2)return null;let o=e.replace(Za,t),i=`${qa}/${t}/`,s=o.startsWith(i)?o:`${n}/${o}`,a=fi.posix.normalize(s);return a!==s||!a.startsWith(`${n}/`)||!FI.test(a)||OI.test(a)?null:a}function Cp(e,t,n){return t.has(e.file)?ae(`Page resource materializations resolve duplicate target: ${e.file}`,e.file):(t.add(e.file),n.push(e),null)}function jI(e,t,n,r,o,i){let s=new Set(e.map(m=>m.file)),a=`${qa}/${n}`,c=new Map(e.map(m=>[m.file,new Set])),l=new Map;for(let m of e){if(m.file.endsWith(".json")){try{JSON.parse(m.content)}catch{return ae("Materialization JSON file must contain valid JSON.",m.file)}if(m.file.endsWith(Ya)&&!AI(m.content).success)return ae("Materialization component i18n resources are invalid.",m.file);continue}try{let b=Qa(m.content,{sourceType:"module",plugins:["jsx","typescript"]});l.set(m.file,b);for(let I of b.program.body)if((I.type==="ImportDeclaration"||I.type==="ExportAllDeclaration"||I.type==="ExportNamedDeclaration"&&I.source)&&I.source){let w=I.source.value,P=zI(m.file,w,s,a);if(!P.allowed)return ae(`Materialization import is outside the controlled package: ${w}`,m.file);P.internalPath&&c.get(m.file).add(P.internalPath)}let C;if(LI(b,{Identifier(I){I.isReferencedIdentifier()&&DI.has(I.node.name)&&(C??=I.node.name,I.stop())},JSXAttribute(I){I.node.name.type==="JSXIdentifier"&&I.node.name.name==="style"&&(C??="inline style",I.stop())},JSXOpeningElement(I){I.node.name.type==="JSXIdentifier"&&I.node.name.name.toLowerCase()==="style"&&(C??="style element",I.stop())}}),C)return ae(`Materialization source uses forbidden capability: ${C}`,m.file)}catch{return ae("Materialization source must parse as TS/TSX.",m.file)}let g=Mr(m.content,{colorMixPolicy:"always",includeExtendedColorFunctions:!0,includeRgbBackgroundImage:!0,rejectAnyRawColorLiteral:!0,rejectPrivateTokens:!0,rejectTailwindPalette:!0});if(g.hardCodedSurfaceHits.length>0||g.rawColorHits.length>0||g.privateTokenHits.length>0)return ae("Materialization source violates the public theme token policy.",m.file)}if([...t].some(m=>!s.has(m)))return ae("Materialization entry is outside the controlled package.");for(let m of t)if(m.endsWith(".json"))return ae("Materialization JSON files cannot be package entries.");for(let[m,g]of i){let b=l.get(m);if(!b||!VI(b,g))return ae("Materialization entry does not declare its contracted export.",m)}let u=new Map([...r].map(([m,g])=>[g,m]));for(let m of o){let g=wp(m.entry,c);for(let b of m.declaredComponentIds){let C=r.get(b);if(!C||!g.has(C))return ae(`Page entry does not reach declared component: ${b}`,m.entry)}for(let b of g){let C=u.get(b);if(C&&!m.declaredComponentIds.has(C))return ae(`Page entry imports undeclared component: ${C}`,m.entry)}}let d=new Set;for(let m of t)for(let g of wp(m,c))d.add(g);if(d.size!==e.length)return ae("Every materialization file must be reachable from a package entry.");let p=WI(e,l,c);return p||{ok:!0}}function $I(e){if(e.length>wI)return ae("Page resource exceeds the aggregate source file limit.");let t=0;for(let n of e){let r=Buffer.byteLength(n.content,"utf8");if(r>NI)return ae("Page resource file exceeds the content byte limit.",n.file);t+=r}return t>PI?ae("Page resource exceeds the aggregate content byte limit."):null}function VI(e,t){for(let n of e.program.body){if(t.kind==="default"){if(n.type==="ExportDefaultDeclaration")return!0;continue}if(n.type==="ExportNamedDeclaration"&&(n.declaration?.type==="VariableDeclaration"&&n.declaration.declarations.some(r=>r.id.type==="Identifier"&&r.id.name===t.name)||(n.declaration?.type==="FunctionDeclaration"||n.declaration?.type==="ClassDeclaration")&&n.declaration.id?.name===t.name||n.specifiers.some(r=>r.exported.type==="Identifier"&&r.exported.name===t.name)))return!0}return!1}function UI(e,t){let n;try{n=Qa(e,{sourceType:"module",sourceFilename:t,plugins:["jsx","typescript"]})}catch{return null}for(let r of n.program.body){let o=r.type==="VariableDeclaration"?r:r.type==="ExportNamedDeclaration"&&r.declaration?.type==="VariableDeclaration"?r.declaration:null;if(o)for(let i of o.declarations){if(i.id.type!=="Identifier"||i.id.name!=="PAGE_SEO")continue;let s=pi(i.init);if(s?.type!=="ObjectExpression")return null;for(let a of s.properties){if(a.type!=="ObjectProperty"||a.computed||!JI(a.key))continue;let c=pi(a.value);return c?.type==="StringLiteral"?c.value:c?.type==="TemplateLiteral"&&c.expressions.length===0?c.quasis[0]?.value.cooked??null:null}return null}}return null}function KI(e,t,n){let r;try{r=Qa(e,{sourceType:"module",sourceFilename:n,plugins:["jsx","typescript"]})}catch{return ae("Page materialization PAGE_SEO must parse as TS/TSX.",n)}for(let o of r.program.body){let i=o.type==="VariableDeclaration"?o:o.type==="ExportNamedDeclaration"&&o.declaration?.type==="VariableDeclaration"?o.declaration:null;if(i)for(let s of i.declarations){if(s.id.type!=="Identifier"||s.id.name!=="PAGE_SEO")continue;let a=pi(s.init);if(a?.type!=="ObjectExpression")return ae("Page materialization PAGE_SEO must be a static object.",n);let c=a.properties.find(u=>u.type==="ObjectProperty"&&!u.computed&&XI(u.key));if(!c||c.type!=="ObjectProperty")return ae("Page materialization PAGE_SEO must declare a static title.",n);let l=pi(c.value);return!l||l.type!=="StringLiteral"&&l.type!=="TemplateLiteral"||l.type==="TemplateLiteral"&&l.expressions.length>0||typeof l.start!="number"||typeof l.end!="number"?ae("Page materialization PAGE_SEO.title must be a static string.",n):{ok:!0,data:e.slice(0,l.start)+JSON.stringify(t)+e.slice(l.end)}}}return ae("Page materialization must declare a top-level PAGE_SEO object.",n)}function pi(e){let t=e;for(;t?.type==="TSAsExpression"||t?.type==="TSSatisfiesExpression"||t?.type==="TSNonNullExpression";)t=t.expression;return t&&Np.isExpression(t)?t:null}function JI(e){return e.type==="Identifier"&&e.name==="path"||e.type==="StringLiteral"&&e.value==="path"}function XI(e){return e.type==="Identifier"&&e.name==="title"||e.type==="StringLiteral"&&e.value==="title"}function zI(e,t,n,r){if(t.startsWith(`@/${r}/`)){let s=t.slice(2),a=Rp(s,n);return a?{allowed:!0,internalPath:a}:{allowed:!1}}if(!t.startsWith("."))return{allowed:MI.some(s=>s.endsWith("/")?t.startsWith(s):t===s)};if(t.includes("\\")||t.includes("\0"))return{allowed:!1};let o=fi.posix.normalize(fi.posix.join(fi.posix.dirname(e),t)),i=Rp(o,n);return i&&(i.startsWith(`${r}/`)||i.startsWith("app/"))?{allowed:!0,internalPath:i}:{allowed:!1}}function Rp(e,t){return[e,`${e}.ts`,`${e}.tsx`,`${e}.json`,`${e}/index.ts`,`${e}/index.tsx`,`${e}/index.json`].find(n=>t.has(n))}function WI(e,t,n){let r=new Set(e.map(o=>o.file));for(let o of e){if(!o.file.endsWith(Ya))continue;let i=o.file.slice(0,-Ya.length),s=[`${i}.tsx`,`${i}.ts`].find(u=>r.has(u));if(!s)return ae("Component i18n resources require a same-name TS/TSX companion.",o.file);let c=t.get(s)?.program.directives.some(u=>u.value.value==="use client"),l=[...n].filter(([,u])=>u.has(o.file));if(!c||l.length!==1||l[0]?.[0]!==s)return ae("Component i18n resources must have exactly one same-name Client Component static importer.",s)}return null}function wp(e,t){let n=new Set,r=[e];for(;r.length>0;){let o=r.pop();if(!n.has(o)){n.add(o);for(let i of t.get(o)??[])r.push(i)}}return n}function HI(e){return/^[a-f0-9]{8}$/.test(e)?e:null}function GI(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"page-resource"}function ae(e,t){return{ok:!1,code:"MATERIALIZATION_REJECTED",message:e,...t?{path:t}:{}}}import{COMPONENT_I18N_FILE_SUFFIX as YI,parseComponentI18nResourcesJson as ZI,resolveSiteTextDirection as qI,SiteLocaleSchema as QI}from"@vcp-dev/contracts";var ek=["i18next","react-i18next"],tk="components/ui/site-locale-provider.tsx",nk="components/ui/component-i18n-provider.tsx",Pp="app/layout.tsx";async function nc(e){let t=e.files.filter(p=>p.path.endsWith(YI));if(t.length===0)return{ok:!0};for(let p of["package.json",Pp,tk,nk])if(!await e.exists(p))return bn(`Target snapshot is missing required i18n host file: ${p}`);let n;try{n=JSON.parse(await e.readFile("package.json"))}catch{return bn("Target snapshot package.json is invalid.")}let r=Ap(n)&&Ap(n.dependencies)?n.dependencies:{},o=ek.filter(p=>typeof r[p]!="string"||r[p].trim().length===0);if(o.length>0)return bn(`Target snapshot must already declare: ${o.join(", ")}.`);let i=await e.readFile(Pp),s=tc(i,"html","lang"),a=tc(i,"html","dir"),c=tc(i,"SiteLocaleProvider","locale"),l=QI.safeParse(s);if(!l.success||!a||!c||s!==c||a!==qI(l.data))return bn("Target snapshot app/layout.tsx must keep html lang/dir and SiteLocaleProvider locale consistent.");if(!i.includes('from "@/components/ui/site-locale-provider"')||!/<SiteLocaleProvider\b/.test(i)||!/<\/SiteLocaleProvider>/.test(i))return bn("Target snapshot root layout is not wired to SiteLocaleProvider.");let u=l.data,d=u.split("-")[0];for(let p of t){let m=ZI(p.content);if(!m.success)return bn(`Component i18n resource is invalid: ${p.path}.`);if(!Object.hasOwn(m.data,u)&&!Object.hasOwn(m.data,d))return bn(`Component i18n resource ${p.path} has no locale for ${u} or ${d}.`)}return{ok:!0}}function tc(e,t,n){let r=e.match(new RegExp(`<${t}\\b[^>]*>`))?.[0];if(!r)return null;let o=[...r.matchAll(new RegExp(`\\b${n}=(?:"([^"]+)"|\\{"([^"]+)"\\})`,"g"))];return o.length!==1?null:o[0]?.[1]??o[0]?.[2]??null}function Ap(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function bn(e){return{ok:!1,message:e}}import{HOME_PAGE_URL_PATH as Ck}from"@vcp-dev/contracts";import{parse as p_}from"@babel/parser";import{parse as OT}from"@babel/parser";import{FormBlockIdSchema as DT,FormSpecV1Schema as LT}from"@vcp-dev/contracts";var Dr="components/site/generated/forms",BT=`${Dr}/vcp-form-runtime.tsx`,mi="[A-Za-z0-9][A-Za-z0-9_-]{0,127}",jT=new RegExp(`^${Dr}/form-(${mi})\\.spec\\.ts$`),$T=new RegExp(`^${Dr}/form-(${mi})\\.tsx$`),VT=new RegExp(`^@/${Dr}/form-(${mi})$`),UT=new RegExp(`(?:^|/)${Dr}/form-(${mi})(?:\\.tsx?)?$`);var KT=Symbol("invalid-literal");import{createHash as zT}from"node:crypto";import{posix as HT}from"node:path";import{parse as YT}from"@babel/parser";import{FormSpecV1Schema as qT}from"@vcp-dev/contracts";var QT=Symbol("dynamic");import{parse as rk}from"@babel/parser";function gi(e){return Array.isArray(e)?e.filter(t=>!!t&&typeof t=="object"&&typeof t.type=="string"):[]}var ok=/^(?:src\/)?app\/(.*)page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function ik(e){let t=ok.exec(e);if(!t)return null;let r=(t[1]??"").split("/").filter(o=>o.length>0&&!/^\(.+\)$/.test(o));return r.length===0?"/":`/${r.join("/")}`}function sk(e){let t=e;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function Tp(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function ak(e){let t=e;for(;t&&(t.type==="TSAsExpression"||t.type==="TSSatisfiesExpression"||t.type==="ParenthesizedExpression");)t=t.expression??null;return t}function rc(e){let t=e;if(t?.type==="StringLiteral"||t?.type==="NumericLiteral"||t?.type==="BooleanLiteral")return t.value;if(t?.type==="NullLiteral")return null;if(t?.type==="ArrayExpression")return(t.elements??[]).map(rc);if(t?.type==="ObjectExpression"){let n={};for(let r of gi(t.properties)){if(r.type!=="ObjectProperty"||r.computed)throw new Error("dynamic object property");let o=Tp(r.key);if(!o)throw new Error("unsupported object key");n[o]=rc(r.value)}return n}throw new Error(`unsupported static value: ${t?.type??"unknown"}`)}function oc(e,t){let n=[],r=ik(t);if(r===null)return{found:!1,seo:null,diagnostics:n};let o;try{o=rk(e,{sourceType:"module",plugins:["typescript","jsx"]})}catch(l){return n.push({code:"page-seo.parse-failed",message:l instanceof Error?l.message:String(l)}),{found:!1,seo:null,diagnostics:n}}let i;for(let l of gi(o.program.body)){let u=l.type==="ExportNamedDeclaration"?l.declaration:l;if(u?.type==="VariableDeclaration")for(let d of gi(u.declarations)){let p=d.id;p?.type==="Identifier"&&p.name==="PAGE_SEO"&&(i=d.init)}}if(i==null)return{found:!1,seo:null,diagnostics:n};let s=ak(i);if(!s)return{found:!1,seo:null,diagnostics:n};if(s.type!=="ObjectExpression")return n.push({code:"page-seo.dynamic-declaration",message:"PAGE_SEO is not a static object literal"}),{found:!1,seo:null,diagnostics:n};let a={};for(let l of gi(s.properties)){if(l.type!=="ObjectProperty"||l.computed)continue;let u=Tp(l.key);if(!(u!=="path"&&u!=="title"&&u!=="description"&&u!=="keywords"&&u!=="meta_tags_json"&&u!=="schema_json"&&u!=="breadcrumbs_json")){if(u==="path"||u==="title"||u==="description"||u==="keywords"){let d=sk(l.value);if(d===void 0){n.push({code:"page-seo.dynamic-field",message:`PAGE_SEO.${u} is not a static string; skipped`});continue}a[u]=d;continue}try{let d=rc(l.value);u==="meta_tags_json"&&d!==null&&typeof d=="object"&&!Array.isArray(d)?a.meta_tags_json=d:u==="schema_json"&&d!==null&&typeof d=="object"?a.schema_json=d:u==="breadcrumbs_json"&&Array.isArray(d)?a.breadcrumbs_json=d:n.push({code:"page-seo.dynamic-field",message:`PAGE_SEO.${u} has unsupported static shape; skipped`})}catch(d){n.push({code:"page-seo.dynamic-field",message:`PAGE_SEO.${u} is not a static JSON-like value; skipped: ${d instanceof Error?d.message:String(d)}`})}}}let c=r;return a.path!==void 0&&(a.path!==r&&n.push({code:"page-seo.path-mismatch",message:`PAGE_SEO.path "${a.path}" != derived "${r}"; using PAGE_SEO.path`}),c=a.path),{found:!0,seo:{path:c,...a.title!==void 0?{title:a.title}:{},...a.description!==void 0?{description:a.description}:{},...a.keywords!==void 0?{keywords:a.keywords}:{},...a.meta_tags_json!==void 0?{meta_tags_json:a.meta_tags_json}:{},...a.schema_json!==void 0?{schema_json:a.schema_json}:{},...a.breadcrumbs_json!==void 0?{breadcrumbs_json:a.breadcrumbs_json}:{}},diagnostics:n}}import{parse as ck}from"@babel/parser";var _p=["page","anchor","external","email","phone","group","file"],lk=["link","cta"],Op=["description","badge","iconKey"],ic=["label","targetType","href","role","openInNewTab","nofollow","children",...Op],uk=new Set(ic);function Br(e){return Array.isArray(e)?e:[]}function Lr(e){let t=e;return t?.type==="StringLiteral"&&typeof t.value=="string"?t.value:void 0}function dk(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function Fp(e){let t=e;return t?.type==="BooleanLiteral"&&typeof t.value=="boolean"?t.value:void 0}function sc(e){let t=[],n;try{n=ck(e,{sourceType:"module",plugins:["typescript","jsx"]})}catch(i){return{items:[],diagnostics:[{severity:"fatal",path:"NAV_ITEMS",message:`parse failed: ${String(i)}`}]}}let r;for(let i of Br(n.program.body)){let s=i.type==="ExportNamedDeclaration"?i.declaration:i;if(s?.type==="VariableDeclaration")for(let a of Br(s.declarations)){let c=a.id;c?.type==="Identifier"&&c.name==="NAV_ITEMS"&&(r=a.init)}}for(;r&&(r.type==="TSAsExpression"||r.type==="TSSatisfiesExpression"||r.type==="TSInstantiationExpression");)r=r.expression;if(!r||r.type!=="ArrayExpression")return{items:[],diagnostics:[{severity:"fatal",path:"NAV_ITEMS",message:"missing top-level NAV_ITEMS array literal"}]};let o=[];return Br(r.elements).forEach((i,s)=>{let a=Mp(i,`NAV_ITEMS[${s}]`,t);a&&o.push(a)}),{items:o,diagnostics:t}}function Mp(e,t,n){if(e?.type!=="ObjectExpression")return n.push({severity:"fatal",path:t,message:"nav item must be an object literal"}),null;let r={};for(let l of Br(e.properties)){if(l.type!=="ObjectProperty"||l.computed)continue;let u=dk(l.key);u&&(r[u]=l.value)}let o=Lr(r.label),i=Lr(r.targetType);if(!o)return n.push({severity:"fatal",path:`${t}.label`,message:"label must be a static string"}),null;if(!i||!_p.includes(i))return n.push({severity:"fatal",path:`${t}.targetType`,message:`targetType must be one of ${_p.join("/")}`}),null;r.group!==void 0&&n.push({severity:"warning",code:"leaf-group-field",path:`${t}.group`,message:'unsupported leaf group field ignored; use a canonical targetType: "group" node with children'});let s={label:o,targetType:i};for(let l of Op){if(r[l]===void 0)continue;let u=Lr(r[l]);u!==void 0?s[l]=u:n.push({severity:"warning",path:`${t}.${l}`,message:`${l} ignored: not a static string`})}r.icon!==void 0&&n.push({severity:"warning",path:`${t}.icon`,message:"icon component ref ignored; use static iconKey"});for(let l of Object.keys(r))uk.has(l)||l==="group"||l==="icon"||n.push({severity:"warning",code:"unknown-field",path:`${t}.${l}`,message:`unsupported field \`${l}\` ignored; NAV_ITEMS only carries ${ic.join("/")}`});if(r.children!==void 0){if(r.children.type!=="ArrayExpression")return n.push({severity:"fatal",path:`${t}.children`,message:"children must be a static array"}),null;let l=[];Br(r.children.elements).forEach((u,d)=>{let p=Mp(u,`${t}.children[${d}]`,n);p&&l.push(p)}),s.children=l}if(i==="group")return s.children?s:(n.push({severity:"fatal",path:`${t}.children`,message:"group item requires children"}),null);let a=Lr(r.href);if(!a)return n.push({severity:"fatal",path:`${t}.href`,message:"href must be a static string for non-group item"}),null;s.href=a;let c=Lr(r.role);if(c!==void 0&&(lk.includes(c)?s.role=c:n.push({severity:"warning",path:`${t}.role`,message:"role ignored: not link/cta"})),r.openInNewTab!==void 0){let l=Fp(r.openInNewTab);l!==void 0?s.openInNewTab=l:n.push({severity:"warning",path:`${t}.openInNewTab`,message:"openInNewTab ignored: not a static boolean"})}if(r.nofollow!==void 0){let l=Fp(r.nofollow);l!==void 0?s.nofollow=l:n.push({severity:"warning",path:`${t}.nofollow`,message:"nofollow ignored: not a static boolean"})}return s}import{parse as fk}from"@babel/parser";function jr(e){return Array.isArray(e)?e:[]}function Dp(e){let t=e;for(;t?.type==="TSAsExpression"||t?.type==="TSSatisfiesExpression";)t=t.expression;return t?.type==="ArrayExpression"?t:void 0}function ac(e,t){let n=Lp(t);if(!n)return{status:"unsupported",source:e};let r;try{r=fk(e,{sourceType:"module",plugins:["typescript","jsx"],tokens:!0})}catch{return{status:"unsupported",source:e}}let o=[];for(let u of jr(r.program.body)){let d=u.type==="ExportNamedDeclaration"?u.declaration:u;if(d?.type==="VariableDeclaration")for(let p of jr(d.declarations)){let m=p.id;m?.type==="Identifier"&&m.name==="NAV_ITEMS"&&o.push(p)}}if(o.length===0)return{status:"navigation_not_found",source:e};if(o.length!==1)return{status:"unsupported",source:e};let i=Dp(o[0]?.init);if(!i)return{status:"unsupported",source:e};if(sc(e).diagnostics.some(({severity:u})=>u==="fatal"))return{status:"unsupported",source:e};let a=[],c=u=>{let d=jr(u.elements);for(let[p,m]of d.entries()){if(mk(m,n)){let b=d[p+1],C=d[p-1],I=m.start,w=m.end;if(typeof I!="number"||typeof w!="number")continue;b&&typeof b.start=="number"?a.push({start:I,end:b.start}):C&&typeof C.end=="number"?a.push({start:C.end,end:w}):a.push({start:I,end:w});continue}let g=pk(m);g&&c(g)}};if(c(i),a.length===0)return{status:"not_found",source:e};let l=e;for(let u of a.sort((d,p)=>p.start-d.start))l=l.slice(0,u.start)+l.slice(u.end);return{status:"removed",source:l,removedCount:a.length}}function pk(e){if(e.type==="ObjectExpression")for(let t of jr(e.properties)){if(t.type!=="ObjectProperty")continue;let n=t.key;if((n?.name??n?.value)==="children")return Dp(t.value)}}function Lp(e){let t=e.trim();return t.startsWith("/")?t==="/"?t:t.replace(/\/+$/,""):null}function mk(e,t){if(e.type!=="ObjectExpression")return!1;let n,r;for(let o of jr(e.properties)){if(o.type!=="ObjectProperty")continue;let i=o.key,s=o.value,a=i?.name??i?.value;s?.type==="StringLiteral"&&(a==="href"&&(n=String(s.value)),a==="targetType"&&(r=String(s.value)))}return r==="page"&&Lp(n??"")===t}import v_ from"node:fs";import k_ from"node:path";var gk=/^page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function $r(e){let t=e.map(r=>kk(r.path)),n=hk(t);return n?t.filter(r=>xk(n,r)).map(r=>({routeId:bk(n,r),entryFile:r})).sort((r,o)=>r.routeId.localeCompare(o.routeId)):[]}function hi(e,t=""){let r=((e??"/").trim()||"/").split(/[?#]/,1)[0]||"/",o=r.startsWith("/")?r:`/${r}`,i=Ik(t),s=i&&(o===i||o.startsWith(`${i}/`))?o.slice(i.length)||"/":o,a=s.startsWith("/")?s:`/${s}`;return a==="/"?"/":a.replace(/\/+$/,"")}function hk(e){return e.some(r=>r.startsWith("app/")&&!yk(r))?"app":e.some(r=>r.startsWith("src/app/"))?"src/app":null}function yk(e){return e.startsWith("app/_vcp/")||e.startsWith("src/app/_vcp/")}function xk(e,t){if(!t.startsWith(`${e}/`))return!1;let n=t.slice(t.lastIndexOf("/")+1);return gk.test(n)?t.slice(e.length+1,-n.length-1).split("/").filter(Boolean).every(r=>!r.startsWith("_")):!1}function bk(e,t){let n=t.slice(e.length+1).split("/").slice(0,-1).map(Ek).filter(r=>!!r);return n.length===0?"/":`/${n.join("/")}`}function Sk(e){return e.startsWith("(")&&e.endsWith(")")}function Ek(e){return!e||e.startsWith("@")||e.startsWith("_")||Sk(e)?null:vk(e)}function vk(e){return e.replace(/^\((?:\.|\.\.|\.\.\.)\)/,"")}function Ik(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function kk(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}var Rk="components/site/generated/",Vr=[".tsx",".ts",".jsx",".js"];function Bp(e){if(e.expectedUrlPath===Ck)return{ok:!1,code:"HOME_PAGE_LOCKED",message:"The homepage source is protected from deletion."};let t=new Set($r(Object.keys(e.files).map(p=>({path:p}))).map(p=>p.entryFile)),n=Object.entries(e.files).filter(([p,m])=>{let g=p.replace(/\\/g,"/");if(!t.has(g))return!1;let b=oc(m,g);return b.found&&b.seo?.path===e.expectedUrlPath});if(n.length===0)return{ok:!1,code:"ROUTE_NOT_FOUND",message:"No route uniquely matches the requested page identity."};if(n.length>1)return{ok:!1,code:"ROUTE_AMBIGUOUS",message:"Multiple routes match the requested page identity."};let[r]=n[0],o=wk(e.files);if(!o.ok)return o.error;let i=o.graph,s=Tk(r,i),a=_k(r,s,i),c=[...s].filter(p=>!a.has(p)).sort((p,m)=>p.localeCompare(m)),l=[{operation:"delete",file:r},...[...a].sort((p,m)=>p.localeCompare(m)).map(p=>({operation:"delete",file:p}))],u=[],d=[];for(let[p,m]of Object.entries(e.files))if(p!==r){if(m.includes("NAV_ITEMS")){let g=ac(m,e.expectedUrlPath);g.status==="removed"?(l.push({operation:"upsert",file:p,content:g.source}),u.push(p)):g.status==="unsupported"&&d.push(`unsupported_navigation:${p}`)}m.includes(e.expectedUrlPath)&&!m.includes("NAV_ITEMS")&&d.push(`preserved_link:${p}`)}return{ok:!0,edits:l,deletedFiles:[r,...[...a].sort((p,m)=>p.localeCompare(m))],updatedFiles:u,preservedSharedFiles:c,warnings:d}}function wk(e){let t=new Set(Object.keys(e)),n=new Map;for(let[r,o]of Object.entries(e)){let i=r.replace(/\\/g,"/");if(i==="next-env.d.ts"||i.endsWith("/next-env.d.ts")||!Nk(r))continue;let s=nr(r,o);if(!s.ok)return{ok:!1,error:{ok:!1,code:"SOURCE_DEPENDENCY_UNSAFE",message:`Page source dependencies could not be proven safe: ${r} (parse-failed).`}};let a=new Set;for(let{specifier:c}of s.module.imports){if(Pk(c))continue;let l=tr(r,c),u=Ak(l,t);if(!u)return{ok:!1,error:{ok:!1,code:"SOURCE_DEPENDENCY_UNSAFE",message:`Page source dependencies could not be proven safe: ${r} -> ${c} (import-not-found).`}};a.add(u)}n.set(r,a)}return{ok:!0,graph:n}}function Nk(e){let t=e.toLowerCase();return Vr.some(n=>t.endsWith(n))}function Pk(e){return!!(/\.([a-z0-9]+)$/i.exec(e)&&!Vr.some(n=>e.endsWith(n)))}function Ak(e,t){let n=e.replace(/\\/g,"/");return(Vr.some(o=>n.endsWith(o))?[n]:[...Vr.map(o=>`${n}${o}`),...Vr.map(o=>`${n}/index${o}`)]).find(o=>t.has(o))??null}function Tk(e,t){let n=new Set,r=[...t.get(e)??[]];for(;r.length>0;){let o=r.pop();!o.startsWith(Rk)||n.has(o)||(n.add(o),r.push(...t.get(o)??[]))}return n}function _k(e,t,n){let r=new Set(t),o=!0;for(;o;){o=!1;for(let i of[...r])[...n].some(([a,c])=>a!==e&&!r.has(a)&&c.has(i))&&(r.delete(i),o=!0)}return r}import{SiteEditHistoryProvenanceSchema as Fk}from"@vcp-dev/contracts";var Ok={affectedCompositions:[]};function Jp(e){let t=null,n=new WeakMap;async function r(){return t??=Mk(e),t}return{async prepareAppend(o){let i=await e.readIndex(),s=await e.stageAppend(Up(o),{durableManifest:!1}),a;try{a=await e.previewStagedAppend(s.entryId,i.digest)}catch(l){throw await e.discardStage(s.stageId),l}let c={kind:"append",entry:o,historyTransition:a};return n.set(c,{expectedDigest:i.digest,stageId:s.stageId,entryId:s.entryId}),c},async prepareUndo(){let i=(await r()).undo.at(-1);if(!i?.historyId)return null;let s=await e.readIndex(),a=s.entryIds.indexOf(i.historyId);if(a<0)throw new Error("undo entry is missing from index");let c=a-1,l=await e.previewCursor(c,s.digest),u={kind:"undo",entry:i,historyTransition:l};return n.set(u,{expectedDigest:s.digest,cursor:c}),u},async prepareRedo(){let i=(await r()).redo.at(-1);if(!i?.historyId)return null;let s=await e.readIndex(),a=s.entryIds.indexOf(i.historyId);if(a<0)throw new Error("redo entry is missing from index");let c=a,l=await e.previewCursor(c,s.digest),u={kind:"redo",entry:i,historyTransition:l};return n.set(u,{expectedDigest:s.digest,cursor:c}),u},async publishPrepared(o){let i=n.get(o);if(!i)throw new Error("history mutation was not prepared");let s=await r();if(o.kind==="append"){if(!i.entryId)throw new Error("staged entry id is missing");let a=await e.publishStagedAppend(i.entryId,i.expectedDigest,i.stageId);jp(a,o.historyTransition),o.entry.historyId=i.entryId,s.entryIds=[...a.entryIds],s.cursor=a.cursor,s.undo.push(o.entry),s.redo.length=0}else{if(i.cursor===void 0)throw new Error("prepared cursor is missing");let a=await e.setCursor(i.cursor,i.expectedDigest);if(jp(a,o.historyTransition),o.kind==="undo"){if(s.undo.at(-1)!==o.entry)throw new Error("undo state changed before publish");s.undo.pop(),s.redo.push(o.entry)}else{if(s.redo.at(-1)!==o.entry)throw new Error("redo state changed before publish");s.redo.pop(),s.undo.push(o.entry)}s.cursor=i.cursor}n.delete(o)},async discardPrepared(o){let i=n.get(o);if(!i)return;let s=o.historyTransition;if(s){let a=await e.readIndex();if(a.digest===s.publishedIndexDigest&&a.cursor===s.publishedCursor&&a.currentId===s.publishedCurrentId)throw new Error("cannot discard a history mutation whose index was published")}i.stageId&&await e.discardStage(i.stageId),n.delete(o)},async peekUndo(){return(await r()).undo.at(-1)??null},async pushUndo(o){let i=await r(),s=o;if(s.historyId){let l=i.entryIds.indexOf(s.historyId);if(l>=0)try{await e.setCursor(l),i.undo.push(o),i.cursor=l;return}catch(u){throw i.redo.push(o),u}}let a=await e.append(Up(o)),c=a.currentId;if(!c)throw new Error("history store did not publish an entry");o.historyId=c,i.entryIds=[...a.entryIds],i.cursor=a.cursor,i.undo.push(o),i.redo.length=0},async popUndo(){return(await r()).undo.pop()??null},async peekRedo(){return(await r()).redo.at(-1)??null},async pushRedo(o){let i=await r(),s=o;if(!s.historyId)throw i.undo.push(o),new Error("cannot move an unpersisted history entry to redo");let a=i.entryIds.indexOf(s.historyId);if(a<0)throw i.undo.push(o),new Error("history entry is missing from the durable index");try{await e.setCursor(a-1),i.cursor=a-1,i.redo.push(o)}catch(c){throw i.undo.push(o),c}},async popRedo(){return(await r()).redo.pop()??null},async clearRedo(){(await r()).redo.length=0},async getStatus(){let o=await e.readStatus();return{canUndo:o.canUndo,canRedo:o.canRedo,undoDepth:o.undoDepth,redoDepth:o.redoDepth,recoveryRequired:o.recoveryRequired}},async markRecoveryRequired(o){await e.markRecoveryRequired(o)}}}function jp(e,t){if(!t)throw new Error("durable history transition is missing");if(e.digest!==t.publishedIndexDigest||e.cursor!==t.publishedCursor||e.currentId!==t.publishedCurrentId)throw new Error("durable history published an unexpected index state")}async function Mk(e){let t=await e.readIndex(),n=await Promise.all(t.undoIds.map(async o=>$p(e,o))),r=await Promise.all(t.redoIds.map(async o=>$p(e,o)));return{undo:n.reverse(),redo:r.reverse(),entryIds:[...t.entryIds],cursor:t.cursor}}async function $p(e,t){let n=await e.readEntry(t),r=Dk(n),o=r.provenance??Ok;return{historyId:t,...o.initiatingComposition?{composition:o.initiatingComposition}:{},operationId:r.operationId,kind:r.kind,target:r.target,provenance:o,...r.selectionRef?{selectionRef:r.selectionRef}:{},...r.output?{output:r.output}:{},preSnapshots:await Vp(e,n,r.preSnapshots),postSnapshots:await Vp(e,n,r.postSnapshots)}}async function Vp(e,t,n){let r=new Map(t.blobs.map(o=>[o.name,o.digest]));return Promise.all(n.map(async o=>{let i=o.exists&&o.blobName?Buffer.from(await e.readBlob(jk(r,o.blobName))).toString("utf8"):"";return{file:o.file,content:i,version:o.version,exists:o.exists,...o.sha256?{sha256:o.sha256}:{}}}))}function Up(e){let t=[],n=(i,s)=>i.map((a,c)=>{let l={file:a.file,exists:a.exists!==!1,version:a.version,...a.sha256?{sha256:a.sha256}:{}};if(l.exists){let u=`${s}-${c}`;l.blobName=u,t.push({name:u,data:a.content})}return l}),r=Lk(e),o={operationId:e.operationId,kind:e.kind,target:e.target,...r?{provenance:r}:{},...e.selectionRef?{selectionRef:e.selectionRef}:{},...e.output?{output:e.output}:{},preSnapshots:n(e.preSnapshots,"pre"),postSnapshots:n(e.postSnapshots,"post")};return{kind:"site-edit-operation",manifest:JSON.parse(JSON.stringify(o)),blobs:t}}function Dk(e){if(!zp(e.manifest))throw new Error("durable history manifest is not an object");let t=e.manifest,n=new Set(["operationId","kind","target","selectionRef","output","provenance","preSnapshots","postSnapshots"]);if(Object.keys(t).some(r=>!n.has(r)))throw new Error("durable history manifest contains unknown fields");if(typeof t.operationId!="string"||t.operationId.length===0||typeof t.kind!="string"||t.kind.length===0||!Array.isArray(t.preSnapshots)||!Array.isArray(t.postSnapshots))throw new Error("durable history manifest has an invalid shape");return{operationId:t.operationId,kind:t.kind,target:t.target,...t.selectionRef!==void 0?{selectionRef:t.selectionRef}:{},...t.output!==void 0?{output:t.output}:{},...t.provenance!==void 0?{provenance:Xp(t.provenance)}:{},preSnapshots:Kp(t.preSnapshots,"preSnapshots"),postSnapshots:Kp(t.postSnapshots,"postSnapshots")}}function Lk(e){if(e.provenance!==void 0)return Xp(e.provenance);if(e.composition)return{initiatingComposition:e.composition,affectedCompositions:[]}}function Xp(e){let t=Fk.safeParse(e);if(!t.success)throw new Error("durable history provenance is invalid");return{...t.data.initiatingComposition?{initiatingComposition:t.data.initiatingComposition}:{},affectedCompositions:t.data.affectedCompositions.map(n=>({routeId:n.routeId,...n.effectiveTemplateId?{effectiveTemplateId:n.effectiveTemplateId}:{}}))}}function Kp(e,t){return e.map((n,r)=>{if(!zp(n))throw new Error(`durable history ${t}[${r}] is invalid`);if(typeof n.file!="string"||n.file.length===0||!Number.isInteger(n.version)||n.exists!==void 0&&typeof n.exists!="boolean"||n.sha256!==void 0&&!Bk(n.sha256)||n.blobName!==void 0&&typeof n.blobName!="string")throw new Error(`durable history ${t}[${r}] is invalid`);return{file:n.file,exists:n.exists!==!1,version:n.version,...n.sha256?{sha256:n.sha256}:{},...n.blobName?{blobName:n.blobName}:{}}})}function Bk(e){return/^sha256:[0-9a-f]{64}$/.test(e)}function jk(e,t){let n=e.get(t);if(!n)throw new Error(`durable history blob is missing: ${t}`);return n}function zp(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import Wp from"node:path";function lc(){let e=Promise.resolve();return{async runExclusive(t){let n,r=new Promise(i=>{n=i}),o=e;e=o.then(()=>r,()=>r),await o;try{return await t()}finally{n()}}}}async function Gp(e,t,n){let r=[],o=new Set;for(let i of e.intents){let s=Kk(i.path);if(!s.ok)return s;let a=s.path;if(o.has(a))return{ok:!1,code:"duplicate-target",path:a,reason:`Duplicate file target: ${a}`};if(o.add(a),i.kind==="create-only"){let c=t.has(a),l=n?await n(a):!1;if(c||l)return{ok:!1,code:"create-only-exists",path:a,reason:`Create-only file already exists: ${a}`}}r.push({...i,path:a})}return{ok:!0,plan:{operationId:e.operationId,intents:r}}}async function yi(e){let t=()=>$k(e);return e.mutex?e.mutex.runExclusive(t):t()}async function $k(e){let t=await Gp(e.plan,e.overlay,e.exists);if(!t.ok)return{ok:!1,stage:"precheck",reason:t.reason,error:t,recoveryRequired:!1};let n=Vk(e.overlay,t.plan),r;try{r=await e.buildCandidate({overlay:n,plan:t.plan})}catch(l){return{ok:!1,stage:"build",reason:"Candidate build failed.",error:l,recoveryRequired:!1}}let o,i;try{o=await e.prepareHistory?.({candidate:r,plan:t.plan}),await e.reverify?.({candidate:r,plan:t.plan,history:o}),i=await e.writeCandidate({candidate:r,plan:t.plan}),await e.markCandidateWritten?.({candidate:r,plan:t.plan,history:o,receipt:i})}catch(l){return cc({candidate:r,plan:t.plan,failedStage:"commit",error:l,history:o,receipt:i,rollbackCandidate:e.rollbackCandidate})}let s=r;try{let l=await e.validateCandidate({candidate:r,plan:t.plan,receipt:i});l!==void 0&&(s=l)}catch(l){return cc({candidate:r,plan:t.plan,failedStage:"validate",error:l,history:o,receipt:i,rollbackCandidate:e.rollbackCandidate})}let a;try{a=await e.publishCandidate({candidate:s,plan:t.plan,history:o,receipt:i})}catch(l){return cc({candidate:s,plan:t.plan,failedStage:"publish",error:l,history:o,receipt:i,rollbackCandidate:e.rollbackCandidate})}let c={candidate:s,plan:t.plan,history:o,receipt:i,published:a};try{await e.swapCandidate?.(c)}catch(l){return Hp("swap",l,"Live state swap failed after durable publish.")}try{await e.finalizeCandidate?.(c)}catch(l){return Hp("finalize",l,"Transaction finalization failed after live state swap.")}try{e.emitCommitted?.({candidate:s,plan:t.plan,published:a})}catch{}return{ok:!0,stage:"publish",published:a,plan:t.plan}}function Vk(e,t){let n=new Map(e);for(let r of t.intents)r.kind==="delete"?n.delete(r.path):n.set(r.path,r.content);return n}function cc(e){return e.rollbackCandidate({candidate:e.candidate,plan:e.plan,failedStage:e.failedStage,error:e.error,...e.history===void 0?{}:{history:e.history},...e.receipt===void 0?{}:{receipt:e.receipt}}).then(()=>({ok:!1,stage:e.failedStage,reason:Uk(e.failedStage),error:e.error,recoveryRequired:!1})).catch(t=>({ok:!1,stage:"rollback",reason:"Rollback failed after candidate commit/validation/publish failure.",error:t,recoveryRequired:!0,cause:e.error}))}function Hp(e,t,n){return{ok:!1,stage:e,reason:n,error:t,recoveryRequired:!0}}function Uk(e){switch(e){case"commit":return"Candidate write or commit verification failed.";case"validate":return"Candidate validation failed.";case"publish":return"Candidate publish failed."}}function Kk(e){if(e.length===0)return{ok:!1,code:"unsafe-path",path:e,reason:"File path must not be empty."};if(e.includes("\0")||e.includes("\\"))return{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`};if(/^[a-zA-Z]:/.test(e)||Wp.isAbsolute(e))return{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`};let t=Wp.posix.normalize(e);return t==="."||t===".."||t.startsWith("../")||t.includes("/../")?{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`}:t.startsWith("./")||t.includes("/./")?{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`}:{ok:!0,path:t}}function uc(e,t){let n=new Map(e);for(let r of t)n.delete(r);return n}function Gn(e,t){e.clear();for(let[n,r]of t)e.set(n,r)}function Yp(e,t){for(let n of t){if(n.exists===!1){e.delete(n.file);continue}e.set(n.file,n.content)}}function dc(e,t,n,r){if(!e.has(t)&&e.size>=r){let o=e.keys().next().value;o&&e.delete(o)}e.set(t,n)}function Zp(e){return{path:e.path,code:e.code,message:e.message,...e.details?{details:JSON.parse(JSON.stringify(e.details))}:{}}}function Jk(e){return e.map(t=>`${t.code} (${t.path}): ${t.message}`).join("; ")}var Ur=class extends Error{constructor(t){let n=t.map(Zp);super(Jk(n)),this.name="RouteBuildDiagnosticsError",this.diagnostics=n}};function qp(e,t){let n=t instanceof Error&&t.message?t.message:String(t);return t instanceof Ur?{routeId:e,message:n,diagnostics:t.diagnostics.map(Zp)}:{routeId:e,message:n}}function fc(e){return e.map(({routeId:t,message:n})=>`${t}: ${n}`).join("; ")}function Qp(e){let{journal:t,index:n,observedFileDigests:r}=e;if(r.length!==t.files.length)return"ambiguous";let o=t.files.every((l,u)=>l.preDigest===r[u]),i=t.files.every((l,u)=>l.postDigest===r[u]),s=t.historyTransition,a=n.digest===s.expectedIndexDigest,c=n.digest===s.publishedIndexDigest&&n.cursor===s.publishedCursor&&n.currentId===s.publishedCurrentId;return o&&a?"safely-uncommitted":i&&c?"durably-committed":"ambiguous"}import{computeSiteEditCompositionKey as xi,SiteEditCompositionContextSchema as Xk,SiteEditCompositionSelectorSchema as zk}from"@vcp-dev/contracts";var Me=class extends Error{constructor(t,n,r){super(n),this.code=t,this.details=r,this.name="SiteEditCompositionError"}};function em(e,t){throw new Me("INVALID_COMPOSITION",e,{value:t})}function bi(e){let t=Xk.safeParse(e);return t.success?t.data:em("Invalid SiteEditCompositionContext.",e)}function tm(e){let t=[],n=new Map,r=new Map;for(let l of e.compositions){let u=bi(l?.context);if(typeof l.entryFile!="string"||!l.entryFile)throw new Me("INVALID_COMPOSITION","A registered composition must have a non-empty entryFile.");let d=xi(u);if(n.has(d))throw new Me("DUPLICATE_COMPOSITION",`Composition key ${d} is registered more than once.`,{key:d,context:u});let p=r.get(l.entryFile);if(p)throw new Me("DUPLICATE_COMPOSITION",`Entry file ${l.entryFile} is registered more than once.`,{entryFile:l.entryFile,context:p});let m={context:u,entryFile:l.entryFile,key:d};t.push(m),n.set(d,m),r.set(l.entryFile,d)}if(t.length===0)throw new Me("INVALID_COMPOSITION","At least one composition must be registered.");let o=new Map;for(let l of e.initialDocumentVersions??[]){let u=bi(l?.composition);if(!Number.isInteger(l?.version)||(l?.version??-1)<0)throw new Me("INVALID_INITIAL_DOCUMENT_VERSION","Initial document version must be a non-negative integer.",{context:u,version:l?.version});let d=xi(u);if(!n.has(d))throw new Me("UNKNOWN_COMPOSITION","Initial document version references an unregistered composition.",{context:u,key:d});if(o.has(d))throw new Me("DUPLICATE_COMPOSITION","Initial document versions must contain each composition at most once.",{context:u,key:d});o.set(d,l.version)}function i(l){let u=zk.safeParse(l);if(!u.success)return em("Invalid SiteEditCompositionSelector.",l);let d=t.filter(({context:p})=>p.routeId===u.data.routeId&&(u.data.templateId===void 0?p.effectiveTemplateId===void 0:p.effectiveTemplateId===u.data.templateId));if(d.length===1)return d[0];throw d.length>1?new Me("AMBIGUOUS_COMPOSITION","The composition selector matches multiple registered contexts.",{selector:u.data}):new Me("UNKNOWN_COMPOSITION","The composition selector is not registered.",{selector:u.data})}function s(l){let u=bi(l),d=xi(u),p=n.get(d);if(!p)throw new Me("UNKNOWN_COMPOSITION","The composition context is not registered.",{context:u,key:d});return p}function a(l){let u=bi(l?.context);if(typeof l.entryFile!="string"||!l.entryFile)throw new Me("INVALID_COMPOSITION","A registered composition must have a non-empty entryFile.");let d=xi(u),p=n.get(d);if(p){if(p.entryFile===l.entryFile)return p;throw new Me("DUPLICATE_COMPOSITION",`Composition key ${d} is registered more than once.`,{key:d,context:u})}let m=[...n.values()].find(b=>b.entryFile===l.entryFile);if(m)throw new Me("DUPLICATE_COMPOSITION",`Entry file ${l.entryFile} is registered more than once.`,{entryFile:l.entryFile,context:m.context});let g={context:u,entryFile:l.entryFile,key:d};return t.push(g),n.set(d,g),g}function c(l){let u=n.get(l);if(!u)return;n.delete(l);let d=t.findIndex(p=>p.key===l);return d>=0&&t.splice(d,1),o.delete(l),u}return{entries:t,byKey:n,initialVersions:o,register:a,unregister:c,resolveSelector:i,resolveContext:s,getByKey:l=>n.get(l),routeIds:()=>[...new Set(t.map(({context:l})=>l.routeId))]}}var eC=/^(?:src\/)?app\/.*\/?page\.[cm]?[jt]sx?$/,tC=["layout.tsx","layout.ts","layout.jsx","layout.js","layout.mjs","layout.cjs"],nm=32,rm=256;function nC(e){return{expectedIndexDigest:e.digest,publishedIndexDigest:e.digest,publishedCursor:e.cursor,publishedCurrentId:e.currentId}}var om={maxEntries:50,maxBytes:8*1024*1024};function rC(){let e=new Map;return{async readFile(t){return(await import("node:fs/promises")).readFile(t,"utf-8")},async readFileBytes(t){return(await import("node:fs/promises")).readFile(t)},async getFileInfo(t){let n=await import("node:fs/promises");try{let r=await n.lstat(t);return!r.isFile()||r.isSymbolicLink()?null:{path:t,sizeBytes:r.size}}catch{return null}},async writeFile(t,n){await ci(t,n)},async deleteFile(t){await(await import("node:fs/promises")).rm(t,{force:!0})},async exists(t){let n=await import("node:fs/promises");try{return await n.access(t),!0}catch{return!1}},getVersion(t){return e.get(t)??1},bumpVersion(t){let n=(e.get(t)??1)+1;return e.set(t,n),n}}}function oC(){let e=[],t=[];return{prepareAppend(r){return{kind:"append",entry:r}},prepareUndo(){let r=e.at(-1);return r?{kind:"undo",entry:r}:null},prepareRedo(){let r=t.at(-1);return r?{kind:"redo",entry:r}:null},publishPrepared(r){if(r.kind==="append"){e.push(r.entry),n(),t.length=0;return}if(r.kind==="undo"){if(e.at(-1)!==r.entry)throw new Error("undo history changed before publish");e.pop(),t.push(r.entry);return}if(t.at(-1)!==r.entry)throw new Error("redo history changed before publish");t.pop(),e.push(r.entry),n()},peekUndo(){return e.at(-1)??null},pushUndo(r){e.push(r),n(),t.length=0},popUndo(){return e.pop()??null},peekRedo(){return t.at(-1)??null},pushRedo(r){t.push(r)},popRedo(){return t.pop()??null},clearRedo(){t.length=0},getStatus(){return{canUndo:e.length>0,canRedo:t.length>0,undoDepth:e.length,redoDepth:t.length,recoveryRequired:!1}}};function n(){for(;e.length>om.maxEntries||iC(e)>om.maxBytes;)e.shift()}}function iC(e){return e.reduce((t,n)=>t+sC(n),0)}function sC(e){return im(e.preSnapshots)+im(e.postSnapshots)+aC(e.provenance)}function aC(e){return e?new TextEncoder().encode(JSON.stringify(e)).byteLength:0}function im(e){return e.reduce((t,n)=>t+n.file.length+n.content.length,0)}function sm(e,t){return{key:Wk(e),composition:e,routeId:e.routeId,entryFile:t,graph:null,topology:null,capabilities:null,document:null,pageComposition:null,pageCompositionProjection:null,documentIndex:null,pagePlacementByKey:null,pagePlacementUnitByKey:null,pageUnitByKey:null,pagePlacementsByUnitKey:null,dependencyFiles:new Set([t]),detailProjections:null,fileVersions:new Map,styleContext:null}}function cC(e){let t=new Map,n=new Map,r=new Map;for(let o of e.entries){t.set(o.key,o);let i=Ve(o.key)??o.key;if(i===o.key)continue;let s=n.get(i)??0;r.set(o.key,s),n.set(i,s+1)}return{entriesByKey:t,repeatOccurrenceIndexByKey:r}}var vi=class extends Error{constructor(t){super(t.reason),this.result=t}},Sn=class extends Error{constructor(t){super(fc(t)),this.failedRoutes=t}};function am(e,t){if(!e)return;let n=[...t];if(n.some(o=>o?.entries.some(i=>i.key===e.key)))return e;let r=Ve(e.key)??e.key;for(let o of n){let i=o?.entries.find(s=>(Ve(s.key)??s.key)===r);if(i)return{...e,key:i.key}}return e}function lC(e,t,n){if(!n)return;let r=Ve(n.key)??n.key;if(n.key!==e&&n.key!==t&&r!==t)throw new Error(`Selection reference '${n.key}' does not match selected key '${e}'`);if(n.instanceIndex!==void 0&&(!Number.isInteger(n.instanceIndex)||n.instanceIndex<0))throw new Error("Selection reference instanceIndex must be non-negative");if(n.instanceCount!==void 0&&(!Number.isInteger(n.instanceCount)||n.instanceCount<=0))throw new Error("Selection reference instanceCount must be positive");if(n.instanceIndex!==void 0&&n.instanceCount!==void 0&&n.instanceIndex>=n.instanceCount)throw new Error("Selection reference instanceIndex must be smaller than instanceCount");return{...n,key:t}}var uC=/\.(?:[cm]?[jt]sx?)$/i,dC=/\.json$/i,fC=/\.(?:css|scss|sass)$/i,pC=/\.mdx$/i,mC=/\.ya?ml$/i;function gC(e){if(!e||e.kind!=="value-binding")return null;let t="path"in e?e.path:void 0,n=e.root,r=n&&(n.kind==="binding"||n.kind==="named-export")?n.name:void 0;return{kind:e.sourceKind,file:e.file,expression:e.displayExpression,bindingName:r,path:t?.map(o=>o.kind==="property"?o.name:o.index)}}function hC(e){return{kind:e.isProxy?"component-proxy":"jsx-node",file:e.file,componentName:e.componentName,isProxy:e.isProxy}}function yC(e,t){let n=new Map;for(let r of t)n.set(r.path,r.operation==="delete"?{exists:!1}:{exists:!0,content:r.content});return{async readFile(r){let o=n.get(r);if(o){if(!o.exists)throw new Error(`Source file not found: ${r}`);return o.content}return e.readFile(r)},async writeFile(){throw new Error("Source edit preflight overlay is read-only.")},async deleteFile(){throw new Error("Source edit preflight overlay is read-only.")},async exists(r){let o=n.get(r);return o?o.exists:e.exists(r)},async getFileInfo(r){let o=n.get(r);return o?o.exists?{path:r,sizeBytes:Buffer.byteLength(o.content,"utf8")}:null:e.getFileInfo?.(r)??null},async listFiles(r={}){if(!e.listFiles)throw new Error("Source file listing is unavailable.");let o=pm(await e.listFiles(r)),i=new Map(o.files.map(a=>[a.path,a]));for(let[a,c]of n)if(xC(a,r.roots??[])){if(!c.exists){i.delete(a);continue}i.set(a,{path:a,sizeBytes:Buffer.byteLength(c.content,"utf8")})}let s=[...i.values()].sort((a,c)=>a.path.localeCompare(c.path));return o.truncated?{files:s,truncated:o.truncated}:s},getVersion(r){return e.getVersion(r)},bumpVersion(r){return e.getVersion(r)}}}function xC(e,t){return t.length===0?!0:t.some(n=>e===n||e.startsWith(`${n}/`))}function pm(e){return Array.isArray(e)?{files:e}:e}function bC(e){if(!Yk(e.path))return{ok:!1,errorCode:"invalid-params",message:`Source file is read-only: ${e.path}`,details:{path:e.path}};if(e.operation==="upsert"&&e.content.includes("\0"))return{ok:!1,errorCode:"invalid-params",message:`Source file content must be valid text: ${e.path}`,details:{path:e.path}};if(e.operation==="delete"){if(e.capability!==qk||e.confirmDelete!==!0||e.confirmPath!==e.path)return{ok:!1,errorCode:"capability-denied",message:`Source file delete requires explicit confirmation: ${e.path}`,details:{path:e.path}};let t=Gk(e.path);return t?{ok:!1,errorCode:"capability-denied",message:`Protected source file cannot be deleted: ${e.path}`,details:{path:e.path,protectionReason:t}}:{ok:!0}}if(uC.test(e.path)){let t=gt({source:e.content,profile:on({filePath:e.path,source:e.content})});if(!t.ok)return{ok:!1,errorCode:"ast-error",message:t.diagnostic.message,details:{path:e.path}}}if(dC.test(e.path))try{JSON.parse(e.content)}catch(t){return{ok:!1,errorCode:"ast-error",message:`JSON parse failed: ${Be(t)}`,details:{path:e.path}}}if(fC.test(e.path)){let t=cm({content:e.content,path:e.path,profile:"css"});if(!t.ok)return t}if(pC.test(e.path)){let t=cm({content:e.content,path:e.path,profile:"mdx"});if(!t.ok)return t}if(mC.test(e.path))try{Qk(e.content)}catch(t){return{ok:!1,errorCode:"ast-error",message:`YAML parse failed: ${Be(t)}`,details:{path:e.path}}}return{ok:!0}}function cm({content:e,path:t,profile:n}){let r=[],o=null,i=!1,s=!1,a=!1,c=!1,l=!0;for(let d=0;d<e.length;d+=1){let p=e[d]??"",m=e[d+1]??"";if(n==="mdx"&&l&&e.startsWith("```",d)){c=!c;let g=e.indexOf(`
7
8
  `,d);if(g===-1){l=!0;break}d=g,l=!0;continue}if(c){l=p===`
8
9
  `||p==="\r";continue}if(s){p==="*"&&m==="/"&&(s=!1,d+=1),l=p===`
9
10
  `||p==="\r";continue}if(a){p===`
10
11
  `||p==="\r"?(a=!1,l=!0):l=!1;continue}if(o){if(i)i=!1;else if(p==="\\")i=!0;else if(p===o)o=null;else if(n==="css"&&(p===`
11
- `||p==="\r"))return jn(t,`Unterminated string literal in ${t}.`);l=p===`
12
- `||p==="\r";continue}if(p==="/"&&m==="*"){s=!0,d+=1,l=!1;continue}if(n==="mdx"&&p==="/"&&m==="/"){a=!0,d+=1,l=!1;continue}if(p==="'"||p==='"'||n==="mdx"&&p==="`"){o=p,l=!1;continue}if(p==="{"||p==="("||p==="["){r.push({char:p,offset:d}),l=!1;continue}if(p==="}"||p===")"||p==="]"){let g=p==="}"?"{":p===")"?"(":"[",S=r.pop();if(!S||S.char!==g)return jn(t,`Unexpected closing token "${p}" in ${t}.`);l=!1;continue}l=p===`
13
- `||p==="\r"}if(s)return jn(t,`Unterminated block comment in ${t}.`);if(o)return jn(t,`Unterminated string literal in ${t}.`);if(c)return jn(t,`Unterminated MDX code fence in ${t}.`);let u=r.at(-1);return u?jn(t,`Unclosed token "${u.char}" in ${t}.`):{ok:!0}}function jn(e,t){return{ok:!1,errorCode:"ast-error",message:t,details:{path:e}}}function Nr(e){let t="idle",n=e.fileSystem??Iv(),r=Ef(),o=mp({compositions:e.compositions,initialDocumentVersions:e.initialDocumentVersions}),i=new Map,s=new Map,a=new Set,c=null,l=e.history??(e.historyStore?rp(e.historyStore):vv()),u=bf(n,{externalAdapters:e.externalAdapters}),d=new Map,p=new Set,m=0,g=e.historyStore?.recoveryRequired??!1,S=Oa(),C=B();function v(f){return(ei.isAbsolute(f)?ei.relative(e.projectRoot,f):f).replace(/\\/g,"/").replace(/^\.\//,"")}function P(f,y){let h=ei.posix.dirname(f),I=y.replace(/\.(?:tsx?|jsx?)$/i,""),R=ei.posix.relative(h,I);return R.startsWith(".")?R:`./${R}`}function w(f,y){return f.startLine===y.startLine&&f.startColumn===y.startColumn&&f.endLine===y.endLine&&f.endColumn===y.endColumn}async function B(){let f=e.historyStore;if(f)try{let y=await f.readTransactionJournal();if(!y)return;let h=await f.readIndex(),I=await Promise.all(y.files.map(async T=>await n.exists(T.path)?le(await n.readFile(T.path)):null));if(fp({journal:y,index:h,observedFileDigests:I})!=="ambiguous"){await f.clearTransactionJournal(y.transactionId);let T=await f.readStatus();T.recoveryRequired||(await f.cleanupTmp(),T=await f.readStatus()),g=T.recoveryRequired;return}await f.markRecoveryRequired(`Ambiguous transaction journal ${y.transactionId} at phase ${y.phase}`),g=!0}catch(y){g=!0,await f.markRecoveryRequired(`Transaction journal recovery failed: ${Fe(y)}`).catch(()=>{})}}function re(){return t==="disposed"}e.onEvent&&r.subscribe(e.onEvent);for(let f of o.entries){let y=Sp(f.context,f.entryFile);i.set(f.key,y),ee(y,y.dependencyFiles)}function ee(f,y){let h=new Set(y);N(f),f.dependencyFiles=h;for(let I of f.dependencyFiles){let R=s.get(I);R||(R=new Set,s.set(I,R)),R.add(f.key)}}function N(f){for(let y of f.dependencyFiles){let h=s.get(y);h&&(h.delete(f.key),h.size===0&&s.delete(y))}f.dependencyFiles.clear()}function J(f){let y=new Set;for(let h of f)for(let I of s.get(h)??[])y.add(I);return y}function F(f){for(let y of f)if(!s.has(y))return!1;return!0}async function L(f,y,h,I,R){let T=new Map,M=vd(R.values()),O=new Map,_=typeof n.exists=="function"?$=>n.exists($):async()=>!1;for(let[$,X]of f.elements){let pe=y.nodes.get($);if(!pe)continue;let te=h.get(X.sourceFile)??I.get(X.sourceFile),Se=new Map,ne=new Map,he=new Map,me=[];for(let ge of X.textSegments){if(!te){Se.set(ge.index,null);continue}let Kn=await kd({file:X.sourceFile,source:te,segment:ge,readFile:Ye=>n.readFile(Ye),exists:_,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Ye,adapterId:Ci,capabilities:Ri})=>({sourceType:Ye,adapterId:Ci,capabilities:Ri})),functionCallContracts:e.functionCallContracts,fileCache:M}),we=await Ys({file:X.sourceFile,source:te,target:{kind:"text-segment",segment:ge},readFile:Ye=>n.readFile(Ye),exists:_,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Ye,adapterId:Ci,capabilities:Ri})=>({sourceType:Ye,adapterId:Ci,capabilities:Ri})),functionCallContracts:e.functionCallContracts,fileCache:M}),gn=Fv(Kn);Se.set(ge.index,gn),ne.set(ge.index,Kn),he.set(ge.index,we),me.push({editable:ge.editable,source:gn})}let A=new Map;if(te)for(let ge of X.attributes??[]){let Kn=await Cd({file:X.sourceFile,source:te,sourceRange:ge.sourceRange,expression:ge.source?.expression??ge.value,sourceInfo:ge.source,readFile:we=>n.readFile(we),exists:_,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:we,adapterId:gn,capabilities:Ye})=>({sourceType:we,adapterId:gn,capabilities:Ye})),functionCallContracts:e.functionCallContracts,fileCache:M});A.set(ge.name,Kn)}let j=eu(Mv(pe.writeTarget),me),Q=iu({key:$,element:X,graph:f,provenances:he}),ue=lu(X),vt=uu(X),kt=du(X),mn=te?await Qd({element:X,graph:f,file:X.sourceFile,source:te,readFile:ge=>n.readFile(ge),exists:_,fileCache:O}):void 0,Ut=f.regions.find(ge=>ge.kind==="conditional-region"&&ge.childKeys.includes($)),Te,Un=Ut?.sourceCandidates?.[0];if(te&&Ut&&Un?.kind==="conditional-branch"){let ge=await Ys({file:X.sourceFile,source:te,target:{kind:"conditional-branch",candidate:Un},readFile:we=>n.readFile(we),exists:_,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:we,adapterId:gn,capabilities:Ye})=>({sourceType:we,adapterId:gn,capabilities:Ye})),functionCallContracts:e.functionCallContracts,fileCache:M});Te={currentBranch:Ut.childKeys.indexOf($)<=0?"then":"else",availableBranches:Ut.childKeys.length>1?["then","else"]:["then"],conditionExpression:Un.conditionExpression,provenance:{finalSource:ge.finalSource?{kind:ge.finalSource.kind,file:ge.finalSource.file,displayPath:ge.finalSource.displayPath}:null,chain:ge.chain.map(we=>({kind:we.kind,file:we.file,displayName:we.displayName,canEditHere:we.canEditHere})),confidence:ge.confidence,editMode:ge.editMode,diagnostics:ge.diagnostics.map(we=>({code:we.code,message:we.message}))}}}T.set($,{textSources:Se,textTargets:ne,elementPropertyTargets:A,provenances:he,writeTarget:j,componentSemantic:Q,contentModel:ue,mediaModel:vt,styleSource:kt,conditional:Te,dynamicData:mn})}return T}function G(f){return typeof n.getVersion=="function"?n.getVersion(f):0}function q(f,y){let h=o.initialVersions.get(f.key)??0;for(let I of y.values())h=Math.max(h,I);return Math.max(h,f.graph?.version??0)}function ye(f){return i.get(f)?.graph?.version??o.initialVersions.get(f)??0}function W(f){try{return ye(o.resolveSelector(f.composition).key)}catch{return 0}}async function Y(f,y,h={}){let I=i.get(f);if(!I)return null;let R=h.sourceCache??Da(d,[]),T=await be(I.entryFile),{graph:M,allSources:O,diagnostics:_,parsedModules:$,entryModule:X}=await Yc(I.entryFile,y,Te=>n.readFile(Te),typeof n.exists=="function"?Te=>n.exists(Te):async()=>!1,{additionalEntries:T,version:I.graph?.version??1});if(_.length>0)throw new Rr(_);let pe=new Map;for(let Te of O.keys())pe.set(Te,G(Te));let te=Math.max(q(I,pe),h.minimumVersion??0);h.changed&&te<=(I.graph?.version??0)&&(te=(I.graph?.version??0)+1),M.version=te;for(let[Te,Un]of O)La(R,Te,Un,hp);let Se=await Et(I.composition,I.entryFile,O,R);M.routeId=I.routeId,M.composition=I.composition;let ne=Zc(M),he=qc(ne,M),me=await L(M,ne,O,R,$),A=fm(M,he,me),j=dm(me),Q=Gv(Gl(M,ne,he,{canUpdateTextByKey:A,dynamicDataSummaryByKey:j}),M,me),ue=Vl({route:I.routeId,composition:I.composition,entryFile:I.entryFile,version:te,source:y,ast:X?.ast}),vt=Ul(ue);ue.ok&&jv(Q,M,ue.projection);let kt={...Q,composition:I.composition,...Se?{styleContext:Se}:{},pageComposition:vt},mn=new Set([I.entryFile,...O.keys()]);if(Se){mn.add(Se.entryCss.path);for(let Te of Se.stylesheets)mn.add(Te.path)}let Ut={...I,dependencyFiles:mn,graph:M,topology:ne,capabilities:he,document:kt,pageComposition:vt,pageCompositionProjection:ue.projection,pagePlacementByKey:ue.ok?ue.projection.placementByKey:null,pagePlacementUnitByKey:ue.ok?ue.projection.placementUnitByKey:null,pageUnitByKey:ue.ok?ue.projection.unitByKey:null,pagePlacementsByUnitKey:ue.ok?ue.projection.placementsByUnitKey:null,documentIndex:wv(kt),detailProjections:me,fileVersions:pe,styleContext:Se};if(h.publish===!1)return Ut;Bn(d,R);for(let Te of R.keys())p.delete(Te);return ee(I,mn),Object.assign(I,Ut),I}async function be(f){let y=[];for(let h of Kv(f))typeof n.exists=="function"&&await n.exists(h)&&y.push({file:h,source:await n.readFile(h)});return y}async function Et(f,y,h,I){let R=[];for(let[$,X]of h){if($a($)){R.push($);continue}for(let pe of Xv(X)){let te=kp($,pe);te&&R.push(te)}}if(!R.length){for(let $ of Jv(y))if(await xc($)){R.push($);break}}let T=new Map,M=Pp(R).slice(0,gp);for(;M.length>0&&T.size<gp;){let $=M.shift();if(T.has($)||!$a($))continue;let X=await It($,I);if(X!==null){T.set($,{path:$,content:X});for(let pe of zv(X)){let te=kp($,pe);te&&!T.has(te)&&!M.includes(te)&&M.push(te)}}}let O=[...T.values()].map($=>({...$,hash:le($.content)})),_=O[0];return _?{composition:f,revision:le(JSON.stringify(O.map(({path:$,hash:X})=>({path:$,hash:X})))),entryCss:_,stylesheets:O.slice(1)}:null}async function It(f,y){let h=y.get(f);if(h!==void 0)return h;if(!await xc(f))return null;let I=await n.readFile(f);return La(y,f,I,hp),I}async function xc(f){return typeof n.exists=="function"?n.exists(f):!1}function dm(f){let y=new Map;for(let[h,I]of f)I.dynamicData?.bindings.length&&y.set(h,uf(I.dynamicData.bindings));return y}function fm(f,y,h){let I=new Map;for(let[R,T]of f.elements){if(!y.get(R)?.canUpdateText){I.set(R,!1);continue}let O=h.get(R),_=T.textSegments.some($=>{if(!$.editable)return!1;let X=O?.provenances.get($.index)??null;return!X||pm(X)});I.set(R,_)}return I}function pm(f){return f.editMode==="direct"||f.editMode==="proxy"||f.editMode==="upstream"}async function Br(f,y={}){let h=[...new Set(f)],I=y.affectedCompositionKeys!==void 0,R=I?new Set(y.affectedCompositionKeys):J(h);if(!I&&(R.size===0||!F(h)))for(let _ of i.values())Sc(_,h)&&R.add(_.key);let T=!I&&R.size===0&&h.some(vp),M=y.publish===!1?Da(d,h):void 0,O={rebuiltRoutes:[],failedRoutes:[],...y.publish===!1?{candidateRouteStates:[],candidateSourceCache:M}:{}};for(let _ of i.values())if(!(y.excludedCompositionKeys?.has(_.key)||!(R.has(_.key)||T)))try{let X=!!_.graph,pe=await n.readFile(_.entryFile),te=await Y(_.key,pe,{...y,...M?{sourceCache:M}:{}});te?.graph&&(O.rebuiltRoutes.push({documentChanged:X,composition:_.composition,routeId:_.routeId,version:te.graph.version}),O.candidateRouteStates?.push({composition:_.composition,key:_.key,routeId:_.routeId,state:te}))}catch(X){O.failedRoutes.push({...dp(_.routeId,X),composition:_.composition})}return O}function dn(f){let y=[...new Set(f)],h=J(y);if(h.size>0&&F(y))return[...h];for(let I of i.values())Sc(I,y)&&h.add(I.key);return[...h]}function mm(f){let y=new Set(dn(f));return o.entries.filter(h=>y.has(h.key)).map(h=>h.context)}function gm(f){return[...new Set(dn(f))].sort((h,I)=>h<I?-1:h>I?1:0).map(h=>o.getByKey(h)?.context).filter(h=>h!==void 0)}function hm(f,y){let h=new Set(dn(y)),I=f.provenance?.affectedCompositions??[];if(I.length===0)return h;if([...new Set(I.map(T=>o.resolveContext(T).key))].some(T=>!h.has(T)))throw new Error("History provenance does not match the affected composition index.");return h}function ym(f,y){let h=f.composition??f.provenance?.initiatingComposition;if(h){let T=o.resolveContext(h);return{context:T.context,key:T.key}}let I=[...new Set(dn(y))];if(I.length!==1)throw new Error(`Legacy history entry cannot be attributed to a unique composition (affected composition count: ${I.length}).`);let R=o.getByKey(I[0]);if(!R)throw new Error("Legacy history entry references an unknown affected composition.");return{context:R.context,key:R.key}}function bi(f,y){r.emit({type:"operation-completed",composition:f.composition,result:f});for(let{composition:h,version:I}of y.rebuiltRoutes)r.emit({type:"document-changed",composition:h,version:I});for(let{composition:h,message:I}of y.failedRoutes)r.emit({type:"graph-error",composition:h,message:I})}function Sc(f,y){return y.some(h=>f.dependencyFiles.has(h)||f.entryFile===h||f.graph?.fileIndex.has(h))}function bc(f){for(let y of f)a.add(y);c||re()||(c=(async()=>{t="building";let y=!1;try{for(;a.size>0;){if(re())return;await xm();let h=[...a];a.clear();let I=await Ec(h);if(I.length===0)continue;let R=dn(I);for(let O of R){let _=i.get(O)?.composition;_&&r.emit({type:"graph-invalidated",composition:_})}let{rebuiltRoutes:T,failedRoutes:M}=await Br(I,{changed:!0});for(let{documentChanged:O,composition:_,version:$}of T)r.emit({type:"graph-ready",composition:_,version:$}),O&&r.emit({type:"document-changed",composition:_,version:$});for(let{composition:O,message:_}of M)y=!0,r.emit({type:"graph-error",composition:O,message:_})}}finally{c=null,t!=="disposed"&&(t=!y&&[...i.values()].some(h=>h.graph)?"ready":"idle"),a.size>0&&bc([])}})())}async function xm(){for(;m>0;)await new Promise(f=>setTimeout(f,0))}async function Ec(f){let y=[];for(let h of new Set(f)){let I=d.get(h);if(I===void 0){if(p.has(h)&&!await n.exists(h))continue;p.delete(h),y.push(h);continue}try{await n.readFile(h)!==I&&(p.delete(h),y.push(h))}catch(R){if(!Bv(R))try{if(await n.exists(h))continue}catch{continue}p.add(h),y.push(h)}}return y}function Ic(f){lp(d,f);for(let y of f)y.exists===!1?p.add(y.file):p.delete(y.file)}function vc(f){p.clear();for(let y of f)p.add(y)}async function kc(f){let y=await Ec(f);if(y.length===0)return;let h=dn(y);for(let T of h){let M=i.get(T)?.composition;M&&r.emit({type:"graph-invalidated",composition:M})}let{rebuiltRoutes:I,failedRoutes:R}=await Br(y,{changed:!0});for(let{documentChanged:T,composition:M,version:O}of I)r.emit({type:"graph-ready",composition:M,version:O}),T&&r.emit({type:"document-changed",composition:M,version:O});for(let{composition:T,message:M}of R)r.emit({type:"graph-error",composition:T,message:M})}async function Sm(f,y){let h=Vn(f,y);if(!h?.graph)return;let I=$e(f)??f,R=h.graph.elements.get(I);R&&await kc([R.sourceFile])}async function Cc(f){let y=new Set;if(f.target.kind==="node"){let h=Vn(f.target.key,f.composition),I=$e(f.target.key)??f.target.key,R=h?.graph?.elements.get(I);R&&y.add(R.sourceFile)}else if(f.target.kind==="route"){let h=i.get(o.resolveSelector(f.target.composition).key);h&&y.add(h.entryFile)}else if(f.target.kind==="page-unit"){let h=i.get(o.resolveSelector(f.target.composition).key);h&&y.add(h.entryFile)}else if(f.target.kind==="source-file")y.add(f.target.path);else if(f.target.kind==="source-batch")for(let h of f.target.paths)y.add(h);await kc(y)}async function bm(f){if(f.params.kind!=="source-edit")return Ei(f,"invalid-params","source-edit requires source-edit params");for(let y of f.params.edits){let h=Lv(y);if(!h.ok)return Ei(f,h.errorCode,h.message,h.details)}m+=1;try{let y=await Rm(f.params.edits);if(!y.ok)return Ei(f,y.errorCode,y.message,y.details);await Cc(f);let h={operationId:f.id,kind:"source-edit",target:f.target,documentVersion:f.documentVersion,conflictPolicy:f.params.conflictPolicy,edits:f.params.edits.map(I=>I.operation==="delete"?{operation:"delete",file:I.path,baseContentHash:I.baseContentHash??null}:{operation:"upsert",file:I.path,baseContentHash:I.baseContentHash??null,content:I.content})};return await pn({request:f,filePlan:h})}catch(y){return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:W(f),error:{code:D.INTERNAL_ERROR,message:Fe(y)}}}finally{m-=1}}async function Em(f){if(f.target.kind!=="project"||f.params.kind!=="insert-page-resource")return Z(f,D.INVALID_PARAMS,"insert-page-resource requires project target and matching params.");m+=1;try{let y=await Na({files:[...f.params.artifact.components.flatMap(I=>I.materialization.files.map(R=>({path:R.pathTemplate,content:R.content}))),...f.params.artifact.pages.flatMap(I=>I.materialization.files.map(R=>({path:R.pathTemplate,content:R.content})))],exists:I=>n.exists(I),readFile:I=>n.readFile(I)});if(!y.ok)return Z(f,D.MATERIALIZATION_REJECTED,y.message);let h=await Ra({artifact:f.params.artifact,exists:I=>n.exists(I)});return h.ok?await pn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:f.target,documentVersion:f.documentVersion,conflictPolicy:"overwrite",edits:h.files},output:{kind:"insert-page-resource",package_instance_id:h.packageInstanceId,pages:h.pages},historyPolicy:"none"}):Z(f,h.code==="MATERIALIZATION_CONFLICT"?D.MATERIALIZATION_CONFLICT:D.MATERIALIZATION_REJECTED,h.message,h.path?{path:h.path}:void 0)}catch(y){return Z(f,D.INTERNAL_ERROR,Fe(y))}finally{m-=1}}async function Im(f){if(f.target.kind!=="project"||f.params.kind!=="delete-page-source")return Z(f,D.INVALID_PARAMS,"delete-page-source requires project target and matching params.");if(!n.listFiles)return Z(f,D.PLAN_FAILED,"Complete project file listing is required for page deletion.");m+=1;try{let y=Rp(await n.listFiles({maxFiles:5e4,maxDepth:64}));if(y.truncated)return Z(f,D.PLAN_FAILED,"Project file listing is incomplete; page deletion was refused.",{truncationReasons:y.truncated.reasons});let h=y.files.filter(({path:M})=>/\.(?:tsx?|jsx?)$/.test(M)),I=Object.fromEntries(await Promise.all(h.map(async({path:M})=>[M,await n.readFile(M)]))),R=Zf({expectedUrlPath:f.params.expectedUrlPath,files:I});if(!R.ok)return Z(f,R.code==="HOME_PAGE_LOCKED"?D.HOME_PAGE_LOCKED:R.code==="ROUTE_NOT_FOUND"?D.ROUTE_NOT_FOUND:D.PLAN_FAILED,R.message);let T=await Promise.all(R.edits.map(async M=>({...M,baseContentHash:le(await n.readFile(M.file))})));return pn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:f.target,documentVersion:f.documentVersion,conflictPolicy:"compare-and-swap",edits:T},output:{kind:"delete-page-source",deleted_files:R.deletedFiles,updated_files:R.updatedFiles,preserved_shared_files:R.preservedSharedFiles,warnings:R.warnings},historyPolicy:"none"})}catch(y){return Z(f,D.INTERNAL_ERROR,Fe(y))}finally{m-=1}}async function vm(f,y){if(f.kind!=="insert-child"||f.params.kind!=="insert-child")return Z(f,D.UNSUPPORTED_OPERATION,"Only page-unit insert-child is currently supported by the page composition transaction.");if(!("kind"in f.params.position)||f.params.position.kind!=="page-composition")return Z(f,D.INVALID_PARAMS,"Page-unit insert-child requires a page-composition placement.");if(f.params.position.documentVersion!==f.documentVersion)return Z(f,D.VERSION_STALE,"Page-unit insert-child placement belongs to a different document version.");let h=y.document,I=y.pageCompositionProjection;if(!h||h.pageComposition?.status!=="supported"||!I||I.status!=="supported")return Z(f,D.UNSUPPORTED_OPERATION,"The current route has no supported page composition.");if(f.documentVersion!==h.version||I.documentVersion!==h.version)return Z(f,D.VERSION_STALE,`Document version ${f.documentVersion} is stale (current: ${h.version}).`);let R=f.params.node.kind==="component-call"?f.params.node.materialization:void 0;if(!R)return Z(f,D.UNSUPPORTED_OPERATION,"Page-unit insertion currently requires a static materialization manifest.");let T=f.params.position,M=await Na({files:R.files.map(_=>({path:_.pathTemplate,content:_.content})),exists:_=>n.exists(_),readFile:_=>n.readFile(_)});if(!M.ok)return Z(f,D.MATERIALIZATION_REJECTED,M.message);let O=await _f({manifest:R,generatedRoot:"components/site/generated",controlledFiles:R.files.map(_=>({pathTemplate:_.pathTemplate})),exists:_=>n.exists(_),commit:async _=>{let $=await n.readFile(y.entryFile),X=y.document,pe=y.pageCompositionProjection;if(!X||X.pageComposition?.status!=="supported"||X.version!==f.documentVersion||!pe||pe.status!=="supported"||pe.documentVersion!==X.version)return{ok:!0,data:Z(f,D.VERSION_STALE,"The route changed before the page-unit insertion could commit.")};let te=_.entry.path,Se=Fm(_.instanceName),ne=is({routeId:y.routeId,entryFile:y.entryFile,currentDocumentVersion:X.version,expectedDocumentVersion:f.documentVersion,source:$,projection:pe,placementKey:T.placementKey,component:{source:te,exportName:_.entry.export.kind==="default"?"default":_.entry.export.name,localName:Se}});if(!ne.ok)return{ok:!0,data:Z(f,Oc(ne.error.code),ne.error.message,{diagnostics:ne.error.diagnostics})};let he=ne.plan.returnStep?Dl({source:$,jsx:ne.plan.returnStep.node.jsx,placement:ne.plan.returnStep.placement,...ne.plan.returnStep.replaceOriginal?{replaceOriginal:!0}:{}}):ne.plan.insertStep?.parentLocator?Rn({source:$,locator:ne.plan.insertStep.parentLocator,node:ne.plan.insertStep.node,placement:ne.plan.insertStep.placement,...ne.plan.insertStep.anchorLocator?{anchorLocator:ne.plan.insertStep.anchorLocator}:{}}):{ok:!1,source:$,diagnostic:{code:"unsupported-syntax",message:"Route composition rewrite has no insertion step."}};if(!he.ok)return{ok:!0,data:Z(f,D.AST_PARSE_ERROR,he.diagnostic.message)};let me=Pn({source:he.source,moduleSpecifier:ne.plan.importStep.moduleSpecifier,imports:ne.plan.importStep.imports});if(!me.ok)return{ok:!0,data:Z(f,D.AST_PARSE_ERROR,me.diagnostic.message)};let A=_.files.map(Q=>({operation:"create-only",file:Q.path,content:Q.content})),j=[{operation:"upsert",file:y.entryFile,content:me.source,baseContentHash:le($)},...A];m+=1;try{let Q=await pn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:{kind:"source-file",path:y.entryFile},documentVersion:f.documentVersion,conflictPolicy:"compare-and-swap",edits:j}});return!Q.ok&&Q.error?.message.includes("MATERIALIZATION_INSTANCE_CONFLICT")?{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_CONFLICT",message:Q.error?.message??"Static prefab instance conflicted during commit."}}:{ok:!0,data:Q}}finally{m-=1}}});return O.ok?O.data:Z(f,D.VERSION_STALE,O.error.message,{materializationCode:O.error.code})}async function km(f,y){if(f.kind!=="move-node"&&f.kind!=="remove-node")return Z(f,D.UNSUPPORTED_OPERATION,"Only page-unit move-node and remove-node are currently supported by the page composition transaction.");let h=y.document,I=y.pageCompositionProjection;if(!h||h.pageComposition?.status!=="supported"||!I||I.status!=="supported")return Z(f,D.UNSUPPORTED_OPERATION,"The current route has no supported page composition.");if(f.documentVersion!==h.version||I.documentVersion!==h.version)return Z(f,D.VERSION_STALE,`Document version ${f.documentVersion} is stale (current: ${h.version}).`);let R=await n.readFile(y.entryFile),T=Ll({routeId:y.routeId,composition:y.composition,entryFile:y.entryFile,currentDocumentVersion:h.version,expectedDocumentVersion:f.documentVersion,source:R,projection:I,placementUnitKey:f.target.placementUnitKey,operation:f.kind,targetPlacement:f.kind==="move-node"&&f.params.kind==="move-node"&&"kind"in f.params.target&&f.params.target.kind==="page-composition"?f.params.target:void 0});if(!T.ok)return Z(f,Oc(T.error.code),T.error.message,{diagnostics:T.error.diagnostics});let M=T.plan.rewriteStep.kind==="move-node"?Nn({source:R,locator:T.plan.rewriteStep.locator,targetParentLocator:T.plan.rewriteStep.targetParentLocator,placement:T.plan.rewriteStep.placement,...T.plan.rewriteStep.anchorLocator?{anchorLocator:T.plan.rewriteStep.anchorLocator}:{}}):kn({source:R,locator:T.plan.rewriteStep.locator});if(!M.ok)return Z(f,D.AST_PARSE_ERROR,M.diagnostic.message);let O=M.source,_=[];if(f.kind==="remove-node"){let X=await Cm({routeState:y,placementUnitKey:f.target.placementUnitKey,source:R,mutatedSource:O});O=X.source,_=await Promise.all(X.files.map(async pe=>({operation:"delete",file:pe,baseContentHash:le(await n.readFile(pe))})))}let $=[{operation:"upsert",file:y.entryFile,content:O,baseContentHash:le(R)},..._];m+=1;try{return await pn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:{kind:"source-file",path:y.entryFile},documentVersion:f.documentVersion,conflictPolicy:"compare-and-swap",edits:$}})}finally{m-=1}}async function Cm(f){let y={source:f.mutatedSource,files:[]},h=f.routeState.graph,I=f.routeState.pageCompositionProjection;if(!h||!I||I.status!=="supported"||!n.listFiles)return y;let T=I.placementUnitByKey.get(f.placementUnitKey)?.sourceRange;if(!T)return y;let M=[...h.elements.values()].find(A=>A.sourceFile===f.routeState.entryFile&&A.importedFrom&&w(A.sourceRange,T));if(!M?.importedFrom||!M.exportName)return y;let O=v(M.importedFrom),_="components/site/generated/";if(!O.startsWith(_))return y;let $=O.slice(_.length).split("/")[0];if(!$||!/-[0-9a-f]{8}$/i.test($))return y;let X=`${_}${$}`;if([...h.elements.values()].filter(A=>A.sourceFile===f.routeState.entryFile&&v(A.importedFrom??"")===O).length!==1)return y;let te=await n.listFiles({maxFiles:5e3,maxDepth:32}),Se=Array.isArray(te)?te:te.files;if(!Array.isArray(te)&&te.truncated)return y;let ne=Se.map(({path:A})=>A).filter(A=>A===X||A.startsWith(`${X}/`));if(ne.length===0||!ne.includes(O))return y;for(let{path:A}of Se)if(!(A===f.routeState.entryFile||A===X||A.startsWith(`${X}/`)))try{if((await n.readFile(A)).includes($))return y}catch{return y}let he=P(f.routeState.entryFile,O),me=An({source:f.mutatedSource,moduleSpecifier:he,imports:M.exportName==="default"?[{kind:"default"}]:[{kind:"named",imported:M.exportName}]});return me.ok?{source:me.source,files:ne.sort((A,j)=>A.localeCompare(j))}:y}async function Rm(f){if(n.getFileInfo){for(let R of f)if(await n.exists(R.path)&&await n.getFileInfo(R.path)===null)return{ok:!1,errorCode:"invalid-params",message:`Source edit path must resolve to a regular non-symbolic-link file: ${R.path}`,details:{path:R.path}}}let y=wm(f);if(y.length===0)return{ok:!0};let h=Ov(n,f),I=Nr({projectRoot:e.projectRoot,fileSystem:h,compositions:[...i.values()].map(R=>({context:R.composition,entryFile:R.entryFile})),externalAdapters:e.externalAdapters,externalSourceResolvers:e.externalSourceResolvers,functionCallContracts:e.functionCallContracts,dev:e.dev});try{for(let R of y){let T=i.get(R)?.composition;if(!T)continue;let M={routeId:T.routeId,...T.effectiveTemplateId!==void 0?{templateId:T.effectiveTemplateId}:{}};await I.initializeComposition(M),I.getDocument(M)}}catch(R){return{ok:!1,errorCode:"ast-error",message:`Source edit preflight failed: ${Fe(R)}`,details:{compositionKeys:y}}}finally{I.dispose()}return{ok:!0}}function wm(f){return f.map(h=>h.path).some(vp)?[...i.keys()]:[]}function Ei(f,y,h,I){let R=wr(y);return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:W(f),error:{code:R,message:h,...I?{details:I}:{}}}}async function Ii(f){let y=[];for(let h of new Set(f))y.push(await Nm(h));return y}async function Nm(f){if(!(typeof n.exists=="function"?await n.exists(f):!0))return{file:f,content:"",version:Math.max(0,G(f)),exists:!1};let h=await n.readFile(f);return{file:f,content:h,version:Math.max(1,G(f)),exists:!0,sha256:le(h)}}async function Rc(f,y,h,I){if(!e.historyStore)return null;let R=new Map(y.map(O=>[O.file,O])),T=new Map(h.map(O=>[O.file,O])),M=[...new Set([...R.keys(),...T.keys()])].sort().map(O=>{let _=R.get(O),$=T.get(O);return{path:O,preDigest:_?.exists===!1||!_?null:le(_.content),postDigest:$?.exists===!1||!$?null:le($.content)}});return{schemaVersion:2,transactionId:`${f}:${I.expectedIndexDigest}`,operationId:f,phase:"prepared",historyTransition:I,files:M}}async function wc(f){return!f||!e.historyStore||await e.historyStore.writeTransactionJournal(f),f}async function fn(f){f&&e.historyStore&&await e.historyStore.clearTransactionJournal(f.transactionId)}async function vi(f,y){let h=[];try{for(let I of f)await Nc(I),typeof n.bumpVersion=="function"&&n.bumpVersion(I.file),h.push(I.file)}catch(I){let R=await Pm(y.filter(T=>h.includes(T.file)));return R.ok?{ok:!1,reason:`Writeback failed and committed files were restored: ${Fe(I)}`,rolledBack:!0}:{ok:!1,reason:`Writeback failed, then rollback failed for ${R.failedFiles.join(", ")}: ${Fe(I)}`,rolledBack:!1}}return{ok:!0,snapshots:f.map(Am)}}async function Nc(f){if(f.exists===!1){await n.deleteFile(f.file);return}await n.writeFile(f.file,f.content)}async function Pm(f){let y=[];for(let h of f)try{await Nc(h),typeof n.bumpVersion=="function"&&n.bumpVersion(h.file)}catch{y.push(h.file)}return y.length===0?{ok:!0}:{ok:!1,failedFiles:y}}function Am(f){let y=f.exists!==!1;return{file:f.file,content:y?f.content:"",version:f.version,exists:y,...y?{sha256:le(f.content)}:{}}}async function pn(f){return S.runExclusive(()=>Tm(f))}async function Tm(f){let y=f.filePlan.edits.map(A=>A.file),h=o.resolveSelector(f.request.composition),I=h.context,R=f.historyPolicy==="none"?void 0:{initiatingComposition:I,affectedCompositions:gm(y)},T=await Ii(y),M=new Map(T.filter(A=>A.exists!==!1).map(A=>[A.file,A.content])),O=Ac(),_=new Map(d),$=new Set(p),X=new Set([...i.values()].filter(A=>f.filePlan.edits.some(j=>j.operation==="delete"&&j.file===A.entryFile)).map(A=>A.key)),pe=f.filePlan.edits.map(A=>A.operation==="delete"?{file:A.file,content:"",version:0,exists:!1}:{file:A.file,content:A.content,version:0,exists:!0,sha256:le(A.content)}),te={operationId:f.filePlan.operationId,intents:f.filePlan.edits.map(A=>A.operation==="delete"?{kind:"delete",path:A.file}:{kind:A.operation==="create-only"?"create-only":"upsert",path:A.file,content:A.content})},Se=null,ne=!1,he=await Zo({overlay:M,exists:A=>n.exists(A),plan:te,buildCandidate:async({plan:A})=>({plan:A}),prepareHistory:async()=>{let A=f.historyPolicy==="none"?null:await l.prepareAppend({composition:o.resolveSelector(f.request.composition).context,operationId:f.request.id,kind:f.request.kind,target:f.request.target,preSnapshots:T,postSnapshots:pe,...f.selectionRef?{selectionRef:f.selectionRef}:{},...f.output?{output:f.output}:{},...R?{provenance:R}:{}}),j=A?.historyTransition?A.historyTransition:e.historyStore?Ev(await e.historyStore.readIndex()):null;if(e.historyStore&&!j)throw new Error("Durable history did not provide an exact index transition.");return Se=await Rc(f.request.id,T,pe,j),Se=await wc(Se),{history:A,historyTransition:j}},reverify:async()=>{},writeCandidate:async()=>{let A=await u.executeFilePlan(f.filePlan);if(!A.ok)throw new ni(A);return{postSnapshots:await Ii(A.affectedFiles),affectedFiles:A.affectedFiles,internalResultVersion:A.resultVersion}},validateCandidate:async({candidate:A,receipt:j})=>{let Q=await Br(j.affectedFiles,{changed:!0,minimumVersion:j.internalResultVersion,publish:!1,excludedCompositionKeys:X});if(Q.failedRoutes.length>0)throw new cn(Q.failedRoutes);let ue=_c(O,Q.candidateRouteStates??[]),vt=Tc(ue,h.key);return{...A,rebuild:Q,routeSnapshots:ue,resultVersion:vt,...bp(f.selectionRef,ue.map(kt=>kt.state.document))?{selectionRef:bp(f.selectionRef,ue.map(kt=>kt.state.document))}:{}}},publishCandidate:async({candidate:A,history:j,receipt:Q})=>{j?.history&&(await l.publishPrepared(j.history),ne=!0);let ue=A.resultVersion??Q.internalResultVersion;return{composition:I,requestId:f.request.id,kind:f.request.kind,target:f.request.target,ok:!0,resultVersion:ue,affectedFiles:Q.affectedFiles,...f.output?{output:f.output}:{},...A.selectionRef?{selectionRef:A.selectionRef}:{}}},swapCandidate:({candidate:A,receipt:j})=>{A.routeSnapshots&&jr(A.routeSnapshots),A.rebuild?.candidateSourceCache&&Bn(d,A.rebuild.candidateSourceCache),Ic(j.postSnapshots)},finalizeCandidate:async()=>{await fn(Se);for(let A of X)i.delete(A)},emitCommitted:({candidate:A,published:j})=>{bi(j,A.rebuild??{rebuiltRoutes:[],failedRoutes:[]})},rollbackCandidate:async({history:A,receipt:j})=>{if(ne)throw new Error("history was published before transaction finalization failed");if(j){let Q=await vi(T,j.postSnapshots);if(!Q.ok)throw new Error(Q.reason)}jr(O),Bn(d,_),vc($),A?.history&&await l.discardPrepared?.(A.history),await fn(Se)}});if(he.ok)return he.published;if(he.stage==="precheck"||he.stage==="build")try{await fn(Se)}catch(A){let j=await $r(Fe(A));return Z(f.request,j,"Unable to clear an uncommitted transaction journal.")}if(he.recoveryRequired){let A=await $r(he.reason);return Z(f.request,A===D.RECOVERY_PERSIST_FAILED?A:D.ROLLBACK_FAILED,he.reason)}let me=he.error;return me instanceof ni?{...Z(f.request,wr(me.result.errorCode),me.result.reason),...me.result.affectedFiles?{affectedFiles:me.result.affectedFiles}:{}}:me instanceof cn?Z(f.request,D.ROUTE_REBUILD_FAILED,`Route rebuild failed and source was rolled back: ${Ba(me.failedRoutes)}`,{failedRoutes:me.failedRoutes}):Z(f.request,Mc(he.stage),Fe(me))}async function Pc(f){return S.runExclusive(async()=>{let y=f==="undo"?await l.prepareUndo():await l.prepareRedo();return y?_m(f,y):{composition:o.entries[0].context,requestId:f,kind:"update-text",target:{kind:"node",key:""},ok:!1,resultVersion:o.initialVersions.get(o.entries[0].key)??0,error:{code:D.INTERNAL_ERROR,message:f==="undo"?"Nothing to undo":"Nothing to redo"}}})}async function _m(f,y){let h=y.entry,I=f==="undo"?h.preSnapshots:h.postSnapshots,R=f==="undo"?h.postSnapshots:h.preSnapshots,T=I.map(j=>j.file),{context:M,key:O}=ym(h,T),_=await Ii(T),$=new Map(_.filter(j=>j.exists!==!1).map(j=>[j.file,j.content])),X=ye(O),pe=Ac(),te=new Map(d),Se=new Set(p),ne=null,he=!1,me,A=await Zo({overlay:$,plan:{operationId:`${f}:${h.operationId}`,intents:I.map(j=>j.exists===!1?{kind:"delete",path:j.file}:{kind:"upsert",path:j.file,content:j.content})},buildCandidate:async()=>({}),prepareHistory:async()=>(ne=await Rc(`${f}:${h.operationId}`,_,I,y.historyTransition),ne=await wc(ne),y),reverify:async()=>{},writeCandidate:async()=>{let j=await vi(I,R);if(!j.ok)throw new Error(j.reason);return{snapshots:j.snapshots}},validateCandidate:async({candidate:j})=>{me=hm(h,T);let Q=await Br(T,{changed:!0,minimumVersion:X+1,publish:!1,affectedCompositionKeys:me});if(Q.failedRoutes.length>0)throw new cn(Q.failedRoutes);let ue=_c(pe,Q.candidateRouteStates??[]),vt=Tc(ue,O);return{...j,rebuild:Q,routeSnapshots:ue,resultVersion:vt}},publishCandidate:async({candidate:j,history:Q})=>{if(!Q)throw new Error("history cursor intent is missing");await l.publishPrepared(Q),he=!0;let ue=j.resultVersion??X+1;return{composition:M,requestId:f,kind:h.kind,target:h.target,ok:!0,resultVersion:ue,affectedFiles:T,...h.output?{output:h.output}:{}}},swapCandidate:({candidate:j,receipt:Q})=>{j.routeSnapshots&&jr(j.routeSnapshots),j.rebuild?.candidateSourceCache&&Bn(d,j.rebuild.candidateSourceCache),Ic(Q.snapshots)},finalizeCandidate:async()=>{await fn(ne)},emitCommitted:({candidate:j,published:Q})=>bi(Q,j.rebuild??{rebuiltRoutes:[],failedRoutes:[]}),rollbackCandidate:async({history:j,receipt:Q})=>{if(he)throw new Error("history cursor was published before transaction finalization failed");if(Q){let ue=await vi(R,Q.snapshots);if(!ue.ok)throw new Error(ue.reason)}jr(pe),Bn(d,te),vc(Se),j&&await l.discardPrepared?.(j),await fn(ne)}});if(A.ok)return A.published;if(A.stage==="precheck"||A.stage==="build")try{await fn(ne)}catch(j){let Q=await $r(Fe(j));return{composition:M,requestId:f,kind:h.kind,target:h.target,ok:!1,resultVersion:X,error:{code:Q,message:"Unable to clear an uncommitted transaction journal."}}}if(A.recoveryRequired){let j=await $r(A.reason);return{composition:M,requestId:f,kind:h.kind,target:h.target,ok:!1,resultVersion:X,affectedFiles:T,error:{code:j===D.RECOVERY_PERSIST_FAILED?j:D.ROLLBACK_FAILED,message:A.reason}}}return{composition:M,requestId:f,kind:h.kind,target:h.target,ok:!1,resultVersion:X,affectedFiles:T,error:{code:A.error instanceof cn?D.ROUTE_REBUILD_FAILED:Mc(A.stage),message:Fe(A.error),...A.error instanceof cn?{details:{failedRoutes:A.error.failedRoutes}}:{}}}}function Ac(){return[...i.values()].map(f=>({composition:f.composition,key:f.key,routeId:f.routeId,state:{...f,dependencyFiles:new Set(f.dependencyFiles),fileVersions:new Map(f.fileVersions)}}))}function Tc(f,y){return f.find(I=>I.key===y)?.state.graph?.version??o.initialVersions.get(y)??0}function _c(f,y){let h=new Map(f.map(I=>[I.key,I]));for(let I of y)h.set(I.key,I);return[...h.values()]}function jr(f){for(let y of i.values())N(y);for(let y of f){let h={...y.state,dependencyFiles:new Set(y.state.dependencyFiles),fileVersions:new Map(y.state.fileVersions)};i.set(y.key,h),ee(h,h.dependencyFiles)}}async function ki(f){let y=i.get(f);if(!y)throw new Error(`Composition not found: ${f}`);if(y.graph)return;let h=await n.readFile(y.entryFile);await Y(f,h)}function Vn(f,y){let h=i.get(o.resolveSelector(y).key)??null;return!h||!Fc(h,f)?null:h}function Fc(f,y){if(f.documentIndex?.entriesByKey.has(y)||f.graph?.elements.has(y))return!0;let h=$e(y);return h&&h!==y?f.graph?.elements.has(h)===!0:!1}function Z(f,y,h,I){return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:W(f),error:{code:y,message:h,...I?{details:I}:{}}}}function Mc(f){return f==="validate"?D.ROUTE_REBUILD_FAILED:f==="publish"?D.HISTORY_COMMIT_FAILED:D.WRITE_IO_ERROR}async function $r(f){if(g=!0,!l.markRecoveryRequired)return D.RECOVERY_REQUIRED;try{return await l.markRecoveryRequired(f),D.RECOVERY_REQUIRED}catch{return D.RECOVERY_PERSIST_FAILED}}function Fm(f){let h=f.split(/[^a-zA-Z0-9]+/).filter(Boolean).map(I=>I.charAt(0).toUpperCase()+I.slice(1)).join("").replace(/^[^a-zA-Z_$]+/,"");return h?`Prefab${h}`:"GeneratedPrefab"}function Oc(f){return f==="VERSION_STALE"?D.VERSION_STALE:f==="CROSS_PAGE_MOVE_UNSUPPORTED"?D.CROSS_PAGE_MOVE_UNSUPPORTED:D.UNSUPPORTED_OPERATION}async function Dc(f){if(f.target.kind==="route"){let h=i.get(o.resolveSelector(f.target.composition).key)??null;return h?(h.graph||await ki(h.key),h):Z(f,D.ROUTE_NOT_FOUND,"Composition not found for route target.")}if(f.target.kind==="page-unit"){let h=i.get(o.resolveSelector(f.target.composition).key)??null;return h?(h.graph||await ki(h.key),h):Z(f,D.ROUTE_NOT_FOUND,"Composition not found for page-unit target.")}if(f.target.kind!=="node")return Z(f,D.UNSUPPORTED_OPERATION,`${f.kind} source target execution is not implemented yet.`);let y=i.get(o.resolveSelector(f.composition).key)??null;return y?(y.graph||await ki(y.key),Fc(y,f.target.key)?y:Z(f,D.NODE_NOT_FOUND,`Target key not found: ${f.target.key}`)):Z(f,D.ROUTE_NOT_FOUND,"Composition not found for node target.")}return{get status(){return t},dispose(){t="disposed",a.clear(),i.clear(),s.clear(),d.clear(),p.clear()},registerComposition(f,y){let h=o.register({context:f,entryFile:y}),I=i.get(h.key);if(I?.entryFile===y)return;I&&N(I);let R=Sp(h.context,y);i.set(h.key,R),ee(R,R.dependencyFiles),r.emit({type:"graph-invalidated",composition:h.context})},unregisterComposition(f){let y=o.resolveSelector(f),h=i.get(y.key);h&&(N(h),i.delete(y.key),o.unregister(y.key),i.size===0&&(t="idle"),r.emit({type:"graph-invalidated",composition:y.context}))},getCompositionEntryFiles(){return[...i.values()].map(f=>f.entryFile)},getCompositionContext(f){return o.resolveSelector(f).context},async initializeComposition(f){let y=o.resolveSelector(f),h=i.get(y.key);if(!h)throw new Error(`Composition not registered: ${y.key}`);if(h.graph)t="ready";else{t="building";try{let I=await n.readFile(h.entryFile);await Y(y.key,I),t="ready",r.emit({type:"graph-ready",composition:y.context,version:i.get(y.key)?.graph?.version??0})}catch(I){throw t="idle",r.emit({type:"graph-error",composition:y.context,message:Fe(I)}),I}}},getDocument(f){let y=o.resolveSelector(f),h=i.get(y.key);if(!h)throw new Error(`Composition not registered: ${y.key}`);if(!h.document)throw new Error(`Composition not built: ${y.key}`);return h.document},async getHistoryStatus(){await C;let f=await l.getStatus?.();return f?{...f,recoveryRequired:g}:{canUndo:!1,canRedo:!1,undoDepth:0,redoDepth:0,recoveryRequired:g}},getObjectEditContext(f,y){let h=Vn(f,y),I=$e(f)??f;if(h?.graph&&h.topology&&h.capabilities&&h.detailProjections){let R=h.detailProjections.get(I);if(R){let T=Zl(I,h.graph,h.topology,h.capabilities,R.textSources,R.provenances,R.dynamicData);return f===I?T:tk(T,f,h.document??null,h.documentIndex?.entriesByKey)}}throw new Error(`Key not found: ${f}`)},getRenderDetail(f,y){let h=Vn(f,y),I=$e(f)??f;if(h?.graph&&h.topology&&h.capabilities&&h.detailProjections){let R=h.detailProjections.get(I);if(R){let T=Yl(I,h.graph,h.topology,h.capabilities,R.textSources,R.writeTarget,R.provenances,R.conditional,R.componentSemantic,R.contentModel,R.mediaModel,R.styleSource,R.dynamicData);return f===I?T:ek(T,f,h.document??null,h.documentIndex?.entriesByKey)}}throw new Error(`Key not found: ${f}`)},getClassNameSource(f,y){let h=Vn(f,y),I=$e(f)??f;if(!h?.graph)throw new Error(`Key not found: ${f}`);let R=h.graph.elements.get(I);if(!R)throw new Error(`Key not found: ${f}`);let T=d.get(R.sourceFile);if(T===void 0)throw new Error(`Source not loaded: ${R.sourceFile}`);return mu({key:I,route:{composition:h.composition,routeId:h.routeId,graph:h.graph,source:T}})},refreshSourceForKey:Sm,async execute(f){if(await C,g)return Z(f,D.RECOVERY_REQUIRED,"The edit engine requires explicit recovery before accepting mutations.");if(f.kind==="source-edit")return bm(f);if(f.kind==="insert-page-resource")return Em(f);if(f.kind==="delete-page-source")return Im(f);let y=await Dc(f);if("ok"in y)return y;await Cc(f);let h=await Dc(f);if("ok"in h)return h;let I=h;if(f.target.kind==="page-unit"){let O=f;return f.kind==="insert-child"?vm(O,I):f.kind==="move-node"||f.kind==="remove-node"?km(O,I):Z(f,D.UNSUPPORTED_OPERATION,"Only page-unit insert-child, move-node, and remove-node are currently supported by the page composition transaction.")}if(!I.graph||!I.topology||!I.capabilities)return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:W(f),error:{code:f.target.kind==="route"?D.ROUTE_NOT_FOUND:D.NODE_NOT_FOUND,message:f.target.kind==="route"?"Composition not ready for route target.":f.target.kind==="node"?`Target key not found: ${f.target.key}`:`${f.kind} source target execution is not implemented yet.`}};let R=Vv(I,I.graph,I.capabilities,d,i),T=await new _o(R).plan(f);if(!T.ok)return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:W(f),error:{code:wr(T.errorCode),message:T.reason}};let M=T.plan;if(M.steps.length===0)return f.kind==="set-props"?{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!0,resultVersion:W(f),affectedFiles:[]}:{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:W(f),error:{code:D.PLAN_FAILED,message:"Planner could not generate a valid execution plan"}};m+=1;try{if(M.steps.some(_=>_.type==="invoke-external-adapter")){let _=await u.execute(M);if(!_.ok)return Z(f,wr(_.errorCode),_.reason);let $={composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!0,resultVersion:Math.max(W(f),_.resultVersion),affectedFiles:_.affectedFiles,..._.selectionRef?{selectionRef:_.selectionRef}:{}};return bi($,{rebuiltRoutes:[],failedRoutes:[]}),$}let O=await u.prepareRewritePlan(M);return O.ok?await pn({request:f,filePlan:O.filePlan,...O.selectionRef?{selectionRef:O.selectionRef}:{}}):Z(f,wr(O.errorCode),O.reason)}catch(O){return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:W(f),error:{code:D.INTERNAL_ERROR,message:Fe(O)}}}finally{m-=1}},async undo(f){if(await C,g)return{composition:o.entries[0].context,requestId:"undo",kind:"update-text",target:{kind:"node",key:""},ok:!1,resultVersion:ye(o.entries[0].key),error:{code:D.RECOVERY_REQUIRED,message:"The edit engine requires explicit recovery before accepting undo."}};m+=1;try{return await Pc("undo")}finally{m-=1}},async redo(f){if(await C,g)return{composition:o.entries[0].context,requestId:"redo",kind:"update-text",target:{kind:"node",key:""},ok:!1,resultVersion:ye(o.entries[0].key),error:{code:D.RECOVERY_REQUIRED,message:"The edit engine requires explicit recovery before accepting redo."}};m+=1;try{return await Pc("redo")}finally{m-=1}},notifyFileChanged(f){bc([f])},getAffectedCompositions(f){return mm(f)},subscribe(f){return r.subscribe(f)}}}function Bv(e){return e instanceof Error&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR")}function jv(e,t,n){let r=new Map,o=new Map,i=(u,d,p)=>{let m=u.get(d)??new Set,g=m.size;return m.add(p),u.set(d,m),m.size!==g},s=(u,d)=>{if(!u.importedFrom)return!1;if(u.exportName==="default")return i(o,u.importedFrom,d);let p=i(r,`${u.importedFrom}#${u.tag}`,d);return u.exportName&&u.exportName!==u.tag&&(p=i(r,`${u.importedFrom}#${u.exportName}`,d)||p),p},a=u=>r.get(`${u.sourceFile}#${u.componentName}`)??o.get(u.sourceFile);for(let u of t.elements.values()){if(u.sourceFile!==n.entryFile||!u.importedFrom||!/^[A-Z]/.test(u.tag))continue;let d=n.placements.find(m=>m.members.some(g=>g.sourceRange!==null&&ja(u.sourceRange,g.sourceRange)));if(!d)continue;let p=d.placementUnitKey;s(u,p)}let c=!0;for(;c;){c=!1;for(let u of t.elements.values()){if(u.sourceFile===n.entryFile||!u.importedFrom||!/^[A-Z]/.test(u.tag))continue;let d=a(u);if(d)for(let p of d)c=s(u,p)||c}}let l=n.placements.find(u=>u.placementKey===n.container.placementKey&&u.relation==="append");for(let u of e.entries){let d=$e(u.key)??u.key,p=t.elements.get(u.key)??t.elements.get(d);if(!p)continue;if(p.sourceFile===n.entryFile){if(n.container.sourceRange&&ja(p.sourceRange,n.container.sourceRange)&&l){u.pageCompositionUnitKey=l.placementUnitKey;continue}let S=n.placements.find(C=>C.members.some(v=>v.sourceRange!==null&&(ja(p.sourceRange,v.sourceRange)||$v(v.sourceRange,p.sourceRange))));if(S){u.pageCompositionUnitKey=S.placementUnitKey;continue}}let m=r.get(`${p.sourceFile}#${p.componentName}`);if(m){m.size===1&&(u.pageCompositionUnitKey=m.values().next().value);continue}let g=o.get(p.sourceFile);g?.size===1&&(u.pageCompositionUnitKey=g.values().next().value)}}function ja(e,t){return e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}function $v(e,t){return Ip(e.startLine,e.startColumn,t.startLine,t.startColumn)<=0&&Ip(e.endLine,e.endColumn,t.endLine,t.endColumn)>=0}function Ip(e,t,n,r){return e!==n?e-n:t-r}function Vv(e,t,n,r,o){let i=new Map,s=new Map,a=(u,d)=>{if(s.has(u))return;s.set(u,d);let p=t.elements.get(u);for(let m of p?.childKeys??[])a(m,d)};for(let u of t.regions)if(u.kind==="repeat-region")for(let d of u.childKeys)i.set(d,u.ownerKey),a(d,u.ownerKey);return{getNode(u){let d=c(u),p=t.elements.get(d.baseKey);return p?l(u,p):null},getChildNodes(u){let d=c(u),m=e.documentIndex?.entriesByKey.get(u)?.childKeys;if(m)return m.map(S=>{let C=$e(S)??S,v=t.elements.get(C);return v?l(S,v):null}).filter(S=>S!==null);let g=t.elements.get(d.baseKey);return g?g.childKeys.map(S=>{let C=t.elements.get(S);return C?l(S,C):null}).filter(S=>S!==null):[]},getKnownSourceFiles(){return[...r.entries()].map(([u,d])=>({file:u,content:d}))},getRouteEntryFiles(){return[...o.values()].map(u=>u.entryFile)},getCapability(u){let d=c(u),p=n.get(d.baseKey);return p?{...p,key:u,constraints:p.constraints.map(m=>({...m})),...p.editModes?{editModes:{...p.editModes}}:{}}:{composition:e.composition,key:u,canUpdateText:!1,canRemove:!1,canInsertChild:!1,canMove:!1,constraints:[]}},getFileContent(u){return r.get(u)??""},getFileVersion(u){return Math.max(e.fileVersions.get(u)??0,t.version)},getRouteEntryFile(u){return e.routeId===u?e.entryFile:null},getComponentSemantic(u){let d=c(u);return e.detailProjections?.get(d.baseKey)?.componentSemantic??null},getEditableTextSegmentIndex(u){let d=c(u),m=e.detailProjections?.get(d.baseKey)?.textTargets.keys()?.next();return m&&!m.done?m.value:null},async getTextWriteTarget(u,d){let p=c(u);return Cp(e.detailProjections?.get(p.baseKey)?.textTargets.get(d)??null,p.repeatIndex)},async getElementPropertyWriteTarget(u,d){let p=c(u);return Cp(e.detailProjections?.get(p.baseKey)?.elementPropertyTargets.get(d)??null,p.repeatIndex)},getTextProvenance(u,d){let p=c(u);return e.detailProjections?.get(p.baseKey)?.provenances.get(d)??null}};function c(u){let d=hv(u);return d?{baseKey:d.baseKey,repeatIndex:Zv(e.document??null,u,d.baseKey,e.documentIndex)??Yv(d)}:{baseKey:u,repeatIndex:null}}function l(u,d){let p=$e(u)??u,m=e.documentIndex?.entriesByKey.get(u),g=e.detailProjections?.get(p);return{key:u,file:d.sourceFile,component:d.componentName,tag:d.tag,structuralPath:d.identity.structuralPath,sourceRange:d.sourceRange,parentKey:m?.parentKey??d.parentKey??void 0,isRepeatRegion:d.boundaryKind==="repeat-region"||s.has(p),isBoundary:!1,importedFrom:d.importedFrom,exportName:d.exportName,isRepeatItemRoot:i.has(p),repeatOwnerKey:i.get(p)??s.get(p),contentModel:g?.contentModel,attributes:d.attributes?.map(S=>({name:S.name,value:S.value,source:S.source?{expression:S.source.expression,base:S.source.base,path:S.source.path.map(C=>({...C}))}:null,resolvedValue:S.resolvedValue}))}}}var Uv={"stale-version":D.VERSION_STALE,"capability-denied":D.CAPABILITY_REJECTED,"invalid-params":D.INVALID_PARAMS,"locator-miss":D.LOCATOR_FAILED,"route-not-found":D.ROUTE_NOT_FOUND,"unsupported-operation":D.UNSUPPORTED_OPERATION,"invalid-target":D.INVALID_TARGET,"ast-error":D.AST_PARSE_ERROR,"writeback-failed":D.WRITE_IO_ERROR,"rollback-failed":D.RECOVERY_REQUIRED,unknown:D.INTERNAL_ERROR};function wr(e){return Uv[e]}function Fe(e){return e instanceof Error&&e.message?e.message:String(e)}function vp(e){return/\.(?:[cm]?[jt]sx?|css|scss|sass|mdx|json)$/i.test(e)}function Kv(e){let t=ln(e);if(!Sv.test(t))return[];let n=t.startsWith("src/app/")?"src/app":"app",r=t.slice(0,t.lastIndexOf("/")),o=[],i=r;for(;(i===n||i.startsWith(`${n}/`))&&(o.unshift(i),i!==n);)i=i.slice(0,i.lastIndexOf("/"));return o.flatMap(s=>bv.map(a=>`${s}/${a}`))}function Jv(e){let n=ln(e).startsWith("src/app/")?"src/app":"app";return[`${n}/globals.css`,`${n}/global.css`]}function Xv(e){return wp(e,/\bimport\s+(?:[^'";]+?\s+from\s+)?["']([^"']+\.css(?:\?[^"']*)?)["']/g)}function zv(e){return wp(e,/@import\s+(?:url\(\s*)?["']([^"']+)["']/g)}function wp(e,t){let n=[];for(let r of e.matchAll(t)){let o=Np(r[1]??"");o&&n.push(o)}return n}function kp(e,t){let n=Np(t);return!n||n.startsWith("tailwindcss")||n.startsWith("http:")||n.startsWith("https:")?null:n.startsWith("@/")?ln(`src/${n.slice(2)}`):n.startsWith("./")||n.startsWith("../")?ln(`${Wv(e)}/${n}`):n.startsWith("/")?ln(n.slice(1)):$a(n)?ln(n):null}function Np(e){return e.split(/[?#]/,1)[0]?.trim()??""}function $a(e){return/\.css$/i.test(e)}function Wv(e){let t=ln(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}function Pp(e){return Array.from(new Set(e))}function ln(e){let t=e.replace(/\\/g,"/").replace(/^\.\//,""),n=[];for(let r of t.split("/"))if(!(!r||r===".")){if(r===".."){n.pop();continue}n.push(r)}return n.join("/")}function Hv(e){let t=1;for(let n of e?.textTargets.values()??[])n?.kind==="value-binding"&&n.sourceKind==="repeat-template"&&(t=Math.max(t,n.collectionIndexMap?.length??0,n.collectionPathMap?.length??0));return t}function ti(e){return e?.map(t=>({...t}))}function Cp(e,t){if(t===null||e?.kind!=="value-binding"||e.sourceKind!=="repeat-template")return e;let n=e.collectionIndexMap?.[t]??t,r=ti(e.collectionPathMap?.[t])??ti(e.locator?.path);if(r)for(let o=r.length-1;o>=0;o-=1){let i=r[o];if(i.kind==="index"){i.index=n;break}}return{...e,path:ti(e.path),locator:e.locator?{...e.locator,path:r}:e.locator,collectionIndexMap:e.collectionIndexMap?[...e.collectionIndexMap]:void 0,collectionPathMap:e.collectionPathMap?.map(o=>ti(o)??[])}}function Gv(e,t,n){let r=new Set;for(let m of t.regions)if(m.kind==="repeat-region")for(let g of m.childKeys)r.add(g);if(r.size===0)return e;let o=new Map(e.entries.map(m=>[m.key,m])),i=[],s=new Map,a=(m,g)=>pv(m,g),c=(m,g,S)=>{let C=o.get(m);if(!C)return a(m,S);let v=a(m,S),P={...C,key:v,parentKey:g,childKeys:[]};return i.push(P),P.childKeys=C.childKeys.flatMap(w=>l(w,S,v)),v},l=(m,g,S)=>{if(!r.has(m))return[c(m,S,g)];let C=d(m,g),v=[];for(let P=0;P<C;P+=1)v.push(c(m,S,[...g,P]));return v},u=Pp([...e.rootKeys,...e.entries.filter(m=>m.parentKey===null).map(m=>m.key)]);for(let m of u){if(!r.has(m)){c(m,null,[]);continue}let g=d(m,[]);for(let S=0;S<g;S+=1)c(m,null,[S])}return{...e,rootKeys:[...e.rootKeys],entries:i};function d(m,g){let S=new Set;for(let C of p(m)){let v=n.get(C);if(v){for(let P of[...v.textTargets.values(),...v.elementPropertyTargets.values()])if(!(P?.kind!=="value-binding"||P.sourceKind!=="repeat-template"))for(let w of Qv(P))w.length<=g.length||qv(w,g)&&S.add(w[g.length])}}return S.size>0?S.size:Hv(n.get(m))}function p(m){let g=s.get(m);if(g)return g;let S=[m],C=o.get(m);for(let v of C?.childKeys??[])S.push(...p(v));return s.set(m,S),S}}function Yv(e){let t=e.parts.at(-1);return typeof t?.repeatIndex=="number"?t.repeatIndex:null}function Zv(e,t,n,r){let o=r?.repeatOccurrenceIndexByKey.get(t);if(o!==void 0)return o;if(!e)return null;let i=0;for(let s of e.entries)if(($e(s.key)??s.key)===n){if(s.key===t)return i;i+=1}return null}function Qv(e){return e.collectionPathMap?.length?e.collectionPathMap.map(t=>t.filter(n=>n.kind==="index").map(n=>n.index)):e.collectionIndexMap?.length?e.collectionIndexMap.map(t=>[t]):[]}function qv(e,t){if(t.length>e.length)return!1;for(let n=0;n<t.length;n+=1)if(e[n]!==t[n])return!1;return!0}function ek(e,t,n,r){if(!n)return{...e,key:t};let o=r??new Map(n.entries.map(u=>[u.key,u])),i=o.get(t);if(!i)return{...e,key:t};let s=[],a=i.parentKey;for(;a;){let u=o.get(a);if(!u)break;s.push({key:u.key,tag:u.tag,label:u.label}),a=u.parentKey}s.reverse();let c=i.childKeys.map(u=>o.get(u)).filter(u=>u!==void 0).map(u=>({key:u.key,tag:u.tag,label:u.label})),l=i.parentKey===null?[]:(o.get(i.parentKey)?.childKeys??[]).filter(u=>u!==i.key).map(u=>o.get(u)).filter(u=>u!==void 0).map(u=>({key:u.key,tag:u.tag,label:u.label}));return{...e,key:i.key,ancestors:s,children:c,siblings:l}}function tk(e,t,n,r){if(!n)return{...e,key:t};let o=r??new Map(n.entries.map(c=>[c.key,c])),i=o.get(t);if(!i)return{...e,key:t};let s=[],a=i.parentKey;for(;a;){let c=o.get(a);if(!c)break;s.push({key:c.key,tag:c.tag,label:c.label}),a=c.parentKey}return s.reverse(),{...e,key:i.key,ancestors:s}}import Xa from"node:path";import{TextDecoder as nk}from"node:util";import{SITE_EDIT_SOURCE_ALLOWED_APP_FILES as Tp,SITE_EDIT_SOURCE_ALLOWED_DIRS as _p,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as Fp,SiteEditCompositionContextSchema as rk,SiteEditSourceFileResponseSchema as Va,SiteEditSourceLocationSchema as ok,SiteEditSourcePathSchema as ri,SiteEditSourceTreeResponseSchema as ik,isSiteEditTextSourcePath as sk}from"@vcp-dev/contracts";var ak=[...Fp,...Tp,..._p];function za(e){if(!e.composition)throw new Error("Composition unavailable for source access policy.");return rk.parse(e.composition)}var Ua=2e3,Ka=12,Ja=24*1024*1024,Ap=512*1024,ck=new Set(["image/avif","image/gif","image/jpeg","image/png","image/webp","image/x-icon"]),lk={".avif":"image/avif",".bin":"application/octet-stream",".eot":"application/vnd.ms-fontobject",".gif":"image/gif",".glb":"model/gltf-binary",".ico":"image/x-icon",".jpeg":"image/jpeg",".jpg":"image/jpeg",".mp3":"audio/mpeg",".mp4":"video/mp4",".pdf":"application/pdf",".png":"image/png",".svg":"image/svg+xml",".ttf":"font/ttf",".wasm":"application/wasm",".webm":"video/webm",".webp":"image/webp",".woff":"font/woff",".woff2":"font/woff2",".zip":"application/zip"},uk={".cjs":"javascript",".css":"css",".cts":"typescript",".html":"html",".js":"javascript",".jsx":"javascript",".json":"json",".md":"markdown",".mdx":"markdown",".mjs":"javascript",".mts":"typescript",".ts":"typescript",".tsx":"typescript",".txt":"plaintext",".yaml":"yaml",".yml":"yaml"},dk=new nk("utf-8",{fatal:!0});async function oi(e,t={}){let n=za(t),{files:r,truncated:o}=await Sk(e,t),i=Ik(r.map(s=>s.metadata));return ik.parse({composition:n,nodes:i,defaultPath:vk(r.map(s=>s.metadata)),totalFiles:r.length,...o?{truncated:o}:{}})}async function ii(e,t,n={}){let r=za(n),o=ri.parse(t.path),i=await mk(e,o,n);if(!i)throw new Error(`Source file not found: ${o}`);if(Wa(o)){let a=Dp(o),c=await hk(e,{path:o,sizeBytes:i.sizeBytes,mimeType:a});return Va.parse({composition:r,path:o,kind:"binary",language:null,sizeBytes:i.sizeBytes,mimeType:a,readonly:!0,...c})}let s=await fk(e,o);return s.ok?Va.parse({composition:r,path:o,kind:"text",language:Lp(o),sizeBytes:s.sizeBytes,contentHash:le(s.content),readonly:!1,content:s.content}):Va.parse({composition:r,path:o,kind:"binary",language:null,sizeBytes:s.sizeBytes,mimeType:"application/octet-stream",readonly:!0,previewUnavailableReason:"unsupported-mime"})}async function fk(e,t){if(e.readFileBytes){let o=await e.readFileBytes(t),i=pk(o);return i===null?{ok:!1,sizeBytes:o.byteLength}:{ok:!0,content:i,sizeBytes:o.byteLength}}let n=await e.readFile(t),r=Buffer.byteLength(n,"utf8");return n.includes("\0")?{ok:!1,sizeBytes:r}:{ok:!0,content:n,sizeBytes:r}}function pk(e){if(e.includes(0))return null;try{return dk.decode(e)}catch{return null}}async function mk(e,t,n){if(!yk(t,n))return null;let r=await gk(e,t);return r?{path:t,sizeBytes:r.sizeBytes}:null}async function gk(e,t){if(e.getFileInfo)return e.getFileInfo(t);if(e.listFiles){let o=Mp(await e.listFiles({roots:[t],maxFiles:1,maxDepth:t.split("/").length})).files.find(i=>i.path===t);if(o)return o}if(!await e.exists(t))return null;if(e.readFileBytes){let r=await e.readFileBytes(t);return{path:t,sizeBytes:r.byteLength}}if(Wa(t))return{path:t,sizeBytes:0};let n=await e.readFile(t);return{path:t,sizeBytes:Buffer.byteLength(n,"utf8")}}async function hk(e,t){if(!ck.has(t.mimeType))return{previewUnavailableReason:"unsupported-mime"};if(t.sizeBytes>Ap)return{previewUnavailableReason:"too-large"};if(!e.readFileBytes)return{previewUnavailableReason:"bytes-unavailable"};let n=await e.readFileBytes(t.path);return n.byteLength>Ap?{previewUnavailableReason:"too-large"}:{contentBase64:Buffer.from(n).toString("base64")}}function yk(e,t){return Fp.some(n=>n===e)||Tp.some(n=>n===e)||_p.some(n=>e===n||e.startsWith(`${n}/`))?!0:!e.startsWith("app/")&&!e.startsWith("src/app/")?!1:(t.routeEntryFiles??[]).some(n=>{let r=ri.safeParse(n);return r.success&&r.data===e})}function si(e,t){if(!t.sourceLocator)throw new Error(`Source location not available for key: ${e.key}`);return ok.parse({key:e.key,composition:t.composition,sourceFile:t.sourceLocator.sourceFile,componentName:t.sourceLocator.componentName,openingElementRange:{startLine:t.sourceLocator.openingElementRange.startLine,startColumn:t.sourceLocator.openingElementRange.startColumn,endLine:t.sourceLocator.openingElementRange.endLine,endColumn:t.sourceLocator.openingElementRange.endColumn},structuralPath:t.sourceLocator.structuralPath,textPreview:t.sourceLocator.textPreview})}function Mp(e){return Array.isArray(e)?{files:e}:e}function xk(e){return["max-files","max-depth","max-total-bytes"].filter(n=>e.includes(n))}async function Sk(e,t){if(!e.listFiles)throw new Error("Source file listing is unavailable.");let n=Mp(await e.listFiles({roots:bk(t),maxFiles:Ua+1,maxDepth:Ka,maxTotalBytes:Ja+1})),r=new Map,o=new Set(n.truncated?.reasons),i=0;for(let a of[...n.files].sort((c,l)=>c.path.localeCompare(l.path))){let c=ri.safeParse(a.path);if(!c.success)continue;let l=c.data;if(l.split("/").length>Ka){o.add("max-depth");continue}if(r.size>=Ua){o.add("max-files");break}if(i+a.sizeBytes>Ja){o.add("max-total-bytes");break}r.set(l,{path:l,sizeBytes:a.sizeBytes,metadata:Ek(l,a.sizeBytes,za(t))}),i+=a.sizeBytes}return{files:[...r.values()].sort((a,c)=>a.path.localeCompare(c.path)),...o.size>0?{truncated:{reasons:xk([...o]),maxFiles:Ua,maxDepth:Ka,maxTotalBytes:Ja}}:{}}}function bk(e){let t=new Set(ak);for(let n of e.routeEntryFiles??[]){let r=ri.safeParse(n);r.success&&(r.data.startsWith("app/")||r.data.startsWith("src/app/"))&&t.add(r.data)}return[...t]}function Ek(e,t,n){return Wa(e)?{composition:n,path:e,kind:"binary",language:null,sizeBytes:t,mimeType:Dp(e),readonly:!0}:{composition:n,path:e,kind:"text",language:Lp(e),sizeBytes:t,readonly:!1}}function Ik(e){let t=[];for(let n of e){let r=n.path.split("/"),o=t,i="";for(let[s,a]of r.entries()){i=i?`${i}/${a}`:a;let c=s===r.length-1,l=o.find(u=>u.name===a);if(l||(l=c?{kind:"file",name:a,path:i,file:n}:{kind:"directory",name:a,path:i,children:[]},o.push(l)),c){if(l.kind!=="file")throw new Error(`Source tree path collision: ${n.path}`);l.file=n}else{if(l.kind!=="directory")throw new Error(`Source tree path collision: ${n.path}`);o=l.children}}}return Op(t)}function Op(e){return e.map(t=>t.kind==="directory"?{...t,children:Op(t.children)}:t).sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}function vk(e){let t=e.find(r=>r.path.toLowerCase()==="design.md");if(t)return t.path;let n=e.find(r=>r.path==="app/page.tsx");return n?n.path:e.find(r=>r.kind==="text")?.path??e.at(0)?.path}function Wa(e){return!sk(e)}function Dp(e){let t=Xa.posix.extname(e).toLowerCase();return!t&&Xa.posix.basename(e).toLowerCase()==="favicon"?"image/x-icon":lk[t]??"application/octet-stream"}function Lp(e){let t=Xa.posix.extname(e).toLowerCase();return uk[t]??"plaintext"}var ai=class{constructor(t){this.options=t,this.fileSystem=new er(t.files),this.engine=this.createEngine(this.fileSystem)}get status(){return this.engine.status}initializeComposition(t){return this.engine.initializeComposition(t)}getDocument(t){return Ur(this.engine.getDocument(t),{siteId:this.options.siteId,snapshotId:this.options.snapshotId})}getInternalDocument(t){return this.engine.getDocument(t)}getStyleContext(t){return this.engine.getDocument(t).styleContext??null}getObjectEditContext(t,n){return Kr(this.engine.getObjectEditContext(t,n))}getClassNameSource(t,n){return this.engine.getClassNameSource(t,n)}getSourceTree(t){return oi(this.fileSystem,{composition:this.engine.getCompositionContext(t),routeEntryFiles:this.options.compositions.map(n=>n.entryFile)})}getSourceFile(t){return ii(this.fileSystem,t,{composition:this.engine.getCompositionContext(t.composition),routeEntryFiles:this.options.compositions.map(n=>n.entryFile)})}resolveSourceLocation(t){return si(t,this.engine.getRenderDetail(t.key,t.composition))}async planOperation(t){let n=Ck.safeParse(t);if(!n.success)return{result:Vr(t,n.error.issues.map(i=>i.message))};let r=new er(this.options.files),o=this.createEngine(r,{emitEvents:!1});try{let i=await o.execute(n.data);if(!i.ok)return{result:{ok:!1,composition:i.composition,error:{code:i.error?.code??"INTERNAL_ERROR",message:i.error?.message??"Operation failed"},data:{requestId:i.requestId,kind:i.kind,target:i.target,resultVersion:i.resultVersion}}};let s={ok:!0,composition:i.composition,data:Kt(i)},a=r.getChangedFiles();if(a.length===0)return{result:s};let c=Rk.parse({siteId:t.siteId,baseSnapshotId:t.baseSnapshotId,operationId:t.id,reason:`site-edit:${t.kind}`,patches:a.map(l=>wk(l,t.kind==="source-edit")),changedCompositions:o.getAffectedCompositions(a.map(l=>l.path)),diagnostics:[]});return this.options.onEvent?.({type:"site-edit.operation.planned",siteId:t.siteId,operationId:t.id,baseSnapshotId:t.baseSnapshotId,changedFiles:c.patches.map(l=>l.path),composition:i.composition,at:new Date().toISOString()}),{result:s,patchPlan:c}}finally{o.dispose()}}dispose(){this.engine.dispose()}createEngine(t,n={}){let r=n.emitEvents??!0;return Nr({projectRoot:"/snapshot",fileSystem:t,compositions:this.options.compositions,onEvent:r&&this.options.onEvent?o=>{let i=Jr(o,{siteId:this.options.siteId,snapshotId:this.options.snapshotId});i&&this.options.onEvent?.(i)}:void 0,dev:this.options.dev,...this.options.historyStore?{historyStore:this.options.historyStore}:{},...this.options.tenantId?{tenantId:this.options.tenantId}:{},siteId:this.options.siteId,snapshotId:this.options.snapshotId,...this.options.initialDocumentVersions?{initialDocumentVersions:this.options.initialDocumentVersions}:{}})}};function wk(e,t){return e.after===void 0?{path:e.path,operation:"delete",...t||e.before===void 0?{}:{expectedHash:le(e.before)}}:{path:e.path,operation:e.before===void 0?"create":"update",...t||e.before===void 0?{}:{expectedHash:le(e.before)},fullContent:e.after}}function Nk(e){return new ai(e)}import{SiteEditOperationRequestSchema as Tk}from"@vcp-dev/contracts";import it from"node:fs/promises";import Me from"node:path";import{SITE_EDIT_SOURCE_ALLOWED_DIRS as Pk,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as Ak}from"@vcp-dev/contracts";var ci=class{constructor(t){this.options=t,this.fileSystem=this.createFileSystem(),this.engine=Nr({...t,fileSystem:this.fileSystem})}get status(){return this.engine.status}registerComposition(t,n){this.engine.registerComposition(t,n)}unregisterComposition(t){this.engine.unregisterComposition(t)}getDocument(t){return this.engine.getDocument(t)}getAffectedCompositions(t){return this.engine.getAffectedCompositions(t)}getCompositionContext(t){return this.engine.getCompositionContext(t)}initializeComposition(t){return this.engine.initializeComposition(t)}getHistoryStatus(){return this.engine.getHistoryStatus()}getObjectEditContext(t,n){return this.engine.getObjectEditContext(t,n)}getRenderDetail(t,n){return this.engine.getRenderDetail(t,n)}getClassNameSource(t,n){return this.engine.getClassNameSource(t,n)}getSourceTree(t){return oi(this.fileSystem,{composition:this.engine.getCompositionContext(t),routeEntryFiles:this.engine.getCompositionEntryFiles()})}getSourceFile(t){return ii(this.fileSystem,t,{composition:this.engine.getCompositionContext(t.composition),routeEntryFiles:this.engine.getCompositionEntryFiles()})}resolveSourceLocation(t){return si(t,this.engine.getRenderDetail(t.key,t.composition))}refreshSourceForKey(t,n){return this.engine.refreshSourceForKey(t,n)}execute(t){return this.engine.execute(t)}undo(t){return this.engine.undo(t)}redo(t){return this.engine.redo(t)}notifyFileChanged(t){this.engine.notifyFileChanged(t)}subscribe(t){return this.engine.subscribe(t)}dispose(){this.engine.dispose()}createFileSystem(){if(this.options.fileSystem)return this.options.fileSystem;let t=new Map,{projectRoot:n}=this.options;return{async readFile(r){return it.readFile(Me.join(n,r),"utf8")},async readFileBytes(r){return it.readFile(Me.join(n,r))},async getFileInfo(r){let o=Me.join(n,...r.split("/"));try{let i=await it.lstat(o);return!i.isFile()||i.isSymbolicLink()?null:{path:r,sizeBytes:i.size}}catch{return null}},async writeFile(r,o){await Uo(Me.join(n,r),o)},async createExclusive(r,o){let i=Me.join(n,r);await it.mkdir(Me.dirname(i),{recursive:!0});let s=await it.open(i,"wx");try{await s.writeFile(o,"utf8")}catch(a){throw await s.close(),await it.rm(i,{force:!0}),a}await s.close()},async deleteFile(r){await it.rm(Me.join(n,r),{force:!0});let o=r.replace(/\\/g,"/"),i=["components/site/generated","src/components/site/generated"].find(c=>o.startsWith(`${c}/`));if(!i)return;let s=Me.join(n,i),a=Me.dirname(Me.join(n,o));for(;a!==s&&a.startsWith(`${s}${Me.sep}`);){try{await it.rmdir(a)}catch(c){if(c instanceof Error&&"code"in c&&c.code==="ENOENT"){a=Me.dirname(a);continue}break}a=Me.dirname(a)}},async exists(r){try{return await it.access(Me.join(n,r)),!0}catch{return!1}},async listFiles(r={}){let o=r.roots??[...Ak,...Pk],i=[],s=new Set,a=new Set,c=0;for(let d of o)await u(d,i,1);let l=i.sort((d,p)=>d.path.localeCompare(p.path));return a.size>0?{files:l,truncated:{reasons:[...a]}}:{files:l};async function u(d,p,m){if(r.maxDepth!==void 0&&m>r.maxDepth){a.add("max-depth");return}let g=Me.join(n,...d.split("/")),S;try{S=await it.lstat(g)}catch{return}if(S.isSymbolicLink())return;if(S.isFile()){let v=S.ino>0?`${String(S.dev)}:${String(S.ino)}`:null;if(v&&s.has(v))return;if(r.maxFiles!==void 0&&p.length>=r.maxFiles){a.add("max-files");return}if(r.maxTotalBytes!==void 0&&c+S.size>r.maxTotalBytes){a.add("max-total-bytes");return}v&&s.add(v),p.push({path:d,sizeBytes:S.size}),c+=S.size;return}if(!S.isDirectory())return;if(r.maxFiles!==void 0&&p.length>=r.maxFiles){a.add("max-files");return}let C=await it.readdir(g,{withFileTypes:!0});for(let v of C)v.isSymbolicLink()||await u(`${d}/${v.name}`,p,m+1)}},getVersion(r){return t.get(r)??1},bumpVersion(r){let o=(t.get(r)??1)+1;return t.set(r,o),o}}}};function Ha(e){return new ci(e)}var li=class{constructor(t){this.options=t,this.listeners=new Set,this.engine=Ha({projectRoot:t.projectRoot,fileSystem:t.fileSystem,compositions:t.compositions,onEvent:n=>{let r=Jr(n,{siteId:t.siteId,snapshotId:t.snapshotId});if(r){t.onEvent?.(r);for(let o of this.listeners)o(r)}},dev:t.dev,...t.historyStore?{historyStore:t.historyStore}:{},...t.tenantId?{tenantId:t.tenantId}:{},...t.initialDocumentVersions!==void 0?{initialDocumentVersions:t.initialDocumentVersions}:{},siteId:t.siteId,snapshotId:t.snapshotId})}get status(){return this.engine.status}initializeComposition(t){return this.engine.initializeComposition(t)}registerComposition(t,n){this.engine.registerComposition(t,n)}unregisterComposition(t){this.engine.unregisterComposition(t)}getDocument(t){return{ok:!0,composition:this.engine.getCompositionContext(t),data:Ur(this.engine.getDocument(t),{siteId:this.options.siteId,snapshotId:this.options.snapshotId})}}getInternalDocument(t){return this.engine.getDocument(t)}getStyleContext(t){return{ok:!0,composition:this.engine.getCompositionContext(t),data:this.engine.getDocument(t).styleContext??null}}async getHistoryStatus(){return{ok:!0,composition:this.options.compositions[0].context,data:await this.engine.getHistoryStatus()}}getObjectEditContext(t,n){return{ok:!0,composition:this.engine.getCompositionContext(n),data:Kr(this.engine.getObjectEditContext(t,n))}}getClassNameSource(t,n){return{ok:!0,composition:this.engine.getCompositionContext(n),data:this.engine.getClassNameSource(t,n)}}async getSourceTree(t){return{ok:!0,composition:this.engine.getCompositionContext(t),data:await this.engine.getSourceTree(t)}}async getSourceFile(t){return{ok:!0,composition:this.engine.getCompositionContext(t.composition),data:await this.engine.getSourceFile(t)}}resolveSourceLocation(t){return{ok:!0,composition:this.engine.getCompositionContext(t.composition),data:this.engine.resolveSourceLocation(t)}}refreshSourceForKey(t,n){return this.engine.refreshSourceForKey(t,n)}async executeOperation(t,n){let r=n===void 0||t.mutationContext!==void 0?t:{...t,mutationContext:n},o=Tk.safeParse(r);if(!o.success)return Vr(t,o.error.issues.map(s=>s.message));let i=await this.engine.execute(o.data);if(!i.ok){let s=i.error;if(!s)throw new Error("executeOperation failed without an error payload");return{ok:!1,composition:i.composition,error:{code:s.code,message:s.message},data:{requestId:i.requestId,kind:i.kind,composition:i.composition,target:i.target,resultVersion:i.resultVersion,...i.affectedFiles?.length?{affectedFiles:i.affectedFiles}:{}}}}return{ok:!0,composition:i.composition,data:Kt(i)}}async undo(t){let n=await this.engine.undo();if(!n.ok){let r=n.error;if(!r)throw new Error("undo failed without an error payload");return{ok:!1,composition:n.composition,error:{code:r.code,message:r.message},data:{requestId:n.requestId,kind:n.kind,composition:n.composition,target:n.target,resultVersion:n.resultVersion}}}return{ok:!0,composition:n.composition,data:Kt(n)}}async redo(t){let n=await this.engine.redo();if(!n.ok){let r=n.error;if(!r)throw new Error("redo failed without an error payload");return{ok:!1,composition:n.composition,error:{code:r.code,message:r.message},data:{requestId:n.requestId,kind:n.kind,composition:n.composition,target:n.target,resultVersion:n.resultVersion}}}return{ok:!0,composition:n.composition,data:Kt(n)}}notifyFileChanged(t){this.engine.notifyFileChanged(t)}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}dispose(){this.listeners.clear(),this.engine.dispose()}};function _k(e){return new li(e)}import{createHash as Fk,randomUUID as sc}from"node:crypto";import xe from"node:fs/promises";import Ee from"node:path";var Ge=1,Ya=1,Mk=2,Ok="index.json",Dk="recovery.json",Lk="transaction-journal.json",Bk="document-version.json",di={maxEntries:100,maxSessionBytes:512*1024*1024,maxEntryBytes:128*1024*1024},K={INVALID_ROOT:"INVALID_ROOT",INVALID_PATH:"INVALID_PATH",INVALID_SCHEMA:"INVALID_SCHEMA",INVALID_JSON:"INVALID_JSON",INDEX_CORRUPT:"INDEX_CORRUPT",ENTRY_CORRUPT:"ENTRY_CORRUPT",BLOB_CORRUPT:"BLOB_CORRUPT",RECOVERY_PENDING:"RECOVERY_PENDING",CAPACITY_EXCEEDED:"CAPACITY_EXCEEDED",NOT_FOUND:"NOT_FOUND"},z=class extends Error{constructor(t,n,r){super(n),this.name="FileHistoryStoreError",this.code=t,r?.cause!==void 0&&(this.cause=r.cause)}};async function Wp(e,t={}){let n=Qk(e),r=tC(t.limits),o=Ga(n),i=qk(n),s=await Le(i),a=await Le(o)||s;a||(await Jk(n),await Xk(n)),a||await nC(n);let c=await Ve(n),l=new Set(a?(await hi(n)).map(d=>d.stageId):[]);a||await Pr(n,c.entryIds);let u=async()=>{if(await Le(o)||s)throw new z(K.RECOVERY_PENDING,"history store requires explicit recovery before accepting writes")};return{rootDir:n,recoveryRequired:a,async readDocumentVersion(){return Xp(n)},async writeDocumentVersion(d){if(await u(),!Number.isInteger(d)||d<0)throw new z(K.INVALID_SCHEMA,"document version must be a non-negative integer");let p=await Xp(n);await Ar(em(n),{schemaVersion:1,version:Math.max(p,d)})},async stageAppend(d,p={}){await u();let m=await jp(d,r),g={schemaVersion:Ya,stageId:sc(),entryId:m.entryId,blobIds:m.blobs.map(S=>S.digest)};try{await $p(n,m),await Vk(n,g,p.durableManifest!==!1)}catch(S){try{await Up(n,g)}catch(C){throw new z(K.INDEX_CORRUPT,"staged history cleanup failed after preparation error",{cause:C})}throw S}return{stageId:g.stageId,entryId:g.entryId,blobIds:g.blobIds}},async discardStage(d){await u(),ec(d);let p=await Qa(n,d);p&&await Up(n,p)},async previewStagedAppend(d,p){return await u(),(await Bp(n,r,d,p)).transition},async previewCursor(d,p){await u();let m=await Ve(n);return tc(m,p),Za(d,m.entryIds.length),Hp(m,m.entryIds,d)},async publishStagedAppend(d,p,m){if(await u(),fi(d,"entryId"),m){ec(m);let S=await Qa(n,m);if(!S||S.entryId!==d)throw new z(K.INVALID_SCHEMA,"history stage does not match the published entry")}let g=await Bp(n,r,d,p);return Jp({rootDir:n,previousDigest:g.current.digest,entryIds:g.entryIds,cursor:g.cursor,afterWrite:async()=>{m?await pi(n,m):await Kk(n,d),await Pr(n,g.entryIds)}})},async append(d){await u();let p=await Ve(n),m=await jp(d,r),g=[...p.entryIds];p.cursor<g.length-1&&g.splice(p.cursor+1),g.push(m.entryId);try{await $p(n,m);let S=await Gp(n,g,r);return await cc(n,S.entryIds,S.cursor),await Pr(n,S.entryIds),Ve(n)}catch(S){throw await Pr(n,p.entryIds),S}},async readEntry(d){return fi(d,"entryId"),_r(n,d)},async readBlob(d){fi(d,"blobId");let p=await hc(n,d),m=await $t(p,K.NOT_FOUND,"blob");return lc(m,d,p),m},async readIndex(){return Ve(n)},async readStatus(){let d=await Ve(n);return{canUndo:d.undoIds.length>0,canRedo:d.redoIds.length>0,undoDepth:d.undoIds.length,redoDepth:d.redoIds.length,cursor:d.cursor,recoveryRequired:await Le(o)||await Le(i)}},async readUndoRedoIds(){let d=await Ve(n);return{undoIds:d.undoIds,redoIds:d.redoIds,currentId:d.currentId}},async setCursor(d,p){await u();let m=await Ve(n);return tc(m,p),Za(d,m.entryIds.length),Jp({rootDir:n,previousDigest:m.digest,entryIds:m.entryIds,cursor:d})},async markRecoveryRequired(d){await Le(o)||await Ar(Ga(n),{schemaVersion:Ge,reason:eC(d),createdAt:new Date().toISOString()})},async clearRecoveryRequired(){await xe.rm(Ga(n),{force:!0})},async readTransactionJournal(){return await Le(i)?ui(i):null},async writeTransactionJournal(d){await u(),tm(d);try{await Ar(i,d)}catch(m){let g=await ui(i).catch(()=>null);if(g&&Buffer.from(Ue(g)).equals(Buffer.from(Ue(d))))return;throw g?new z(K.INDEX_CORRUPT,"transaction journal publish outcome is ambiguous",{cause:m}):m}let p=await ui(i);if(!Buffer.from(Ue(p)).equals(Buffer.from(Ue(d))))throw new z(K.INDEX_CORRUPT,"transaction journal publish outcome is ambiguous")},async clearTransactionJournal(d){let p=await Le(i)?await ui(i):null;if(p&&p.transactionId!==d)throw new z(K.INVALID_SCHEMA,"transaction journal changed concurrently");try{await xe.rm(i,{force:!0})}catch(m){if(!await Le(i))return;throw m}if(await Le(i))throw new z(K.INDEX_CORRUPT,"transaction journal clear outcome is ambiguous");s=!1},async cleanupTmp(){await u();for(let p of l)await pi(n,p),l.delete(p);await zk(n);let d=await Ve(n);await Pr(n,d.entryIds)}}}async function Bp(e,t,n,r){fi(n,"entryId");let o=await Ve(e);tc(o,r);let i=await _r(e,n),s=[...o.entryIds];o.cursor<s.length-1&&s.splice(o.cursor+1),s.push(i.id);let a=await Gp(e,s,t);return{current:o,entryIds:a.entryIds,cursor:a.cursor,transition:Hp(o,a.entryIds,a.cursor)}}function Hp(e,t,n){return Za(n,t.length),{expectedIndexDigest:e.digest,publishedIndexDigest:jk(t,n),publishedCursor:n,publishedCurrentId:t[n]??null}}function jk(e,t){return Vt(Ue({schemaVersion:Ge,entryIds:e,cursor:t}))}function Za(e,t){if(!Number.isInteger(e)||e<-1||e>=t)throw new z(K.INVALID_SCHEMA,`history cursor is out of bounds: ${e}`)}function $k(e){if(!st(e))return!1;let t=e.publishedCursor,n=e.publishedCurrentId;return!Ke(e.expectedIndexDigest)||!Ke(e.publishedIndexDigest)||!Number.isInteger(t)||t<-1||n!==null&&!Ke(n)?!1:t===-1?n===null:Ke(n)}async function jp(e,t){if(!e.kind.trim())throw new z(K.INVALID_JSON,"history entry kind must not be empty");let n=[],r=[];for(let c of e.blobs??[]){if(!c.name.trim())throw new z(K.INVALID_JSON,"history blob name must not be empty");let l=Zk(c.data),u=Vt(l);n.push({name:c.name,bytes:l,digest:u,sizeBytes:l.byteLength}),r.push({name:c.name,digest:u,sizeBytes:l.byteLength})}let o={schemaVersion:Ge,kind:e.kind,manifest:e.manifest,blobs:r},i=Ue({...o}),s=Vt(i),a=i.byteLength+n.reduce((c,l)=>c+l.sizeBytes,0);if(a>t.maxEntryBytes)throw new z(K.CAPACITY_EXCEEDED,`history entry exceeds maxEntryBytes (${a} > ${t.maxEntryBytes})`);return{entryBody:o,entryId:s,blobs:n}}async function $p(e,t){let n=fc(e,t.entryId),r={id:t.entryId,...t.entryBody},o=[...t.blobs.map(a=>Vp(pc(e,a.digest),a.bytes,{kind:"blob",digest:a.digest},gc(e,a.digest))),Vp(n,Ue(r),{kind:"entry",digest:t.entryId},mc(e,t.entryId))],s=(await Promise.allSettled(o)).find(a=>a.status==="rejected");if(s)throw s.reason}async function Vp(e,t,n,r){let o=await oc(e)??(r?await oc(r):null);if(o!==null){if(Buffer.compare(o,t)!==0)throw new z(n.kind==="blob"?K.BLOB_CORRUPT:K.ENTRY_CORRUPT,`${n.kind} content mismatch for ${n.digest}`);return}await Qp(e,t)}async function Gp(e,t,n){let r=[...t],o=r.length-1;for(;;){if((await Zp(e,r)).totalBytes<=n.maxSessionBytes&&r.length<=n.maxEntries)return{entryIds:r,cursor:o};if(o<=0||r.length===0)throw new z(K.CAPACITY_EXCEEDED,"history store exceeds capacity limits and the current entry cannot be trimmed");r.shift(),o-=1}}async function Vk(e,t,n){ac(t);let r=dc(e,t.stageId);if(n){await Ar(r,t);return}await Yk(r,t)}async function Qa(e,t){let n=await oc(dc(e,t));if(n===null)return null;let r=Fr(Buffer.from(n).toString("utf8"),`history stage ${t}`),o=ac(r);if(o.stageId!==t)throw new z(K.INVALID_SCHEMA,`history stage id mismatch: ${t}`);return o}async function hi(e){let t=[];for(let n of await gi(uc(e))){if(!n.endsWith(".json"))continue;let r=n.slice(0,-5);ec(r);let o=await Qa(e,r);o&&t.push(o)}return t}async function Up(e,t){ac(t);let n=await Ve(e),r=(await hi(e)).filter(s=>s.stageId!==t.stageId),o=new Set(n.entryIds),i=new Set;for(let s of n.entryIds){let a=await _r(e,s);for(let c of a.blobs)i.add(c.digest)}for(let s of r){o.add(s.entryId);for(let a of s.blobIds)i.add(a)}o.has(t.entryId)||await Kp(fc(e,t.entryId),mc(e,t.entryId));for(let s of t.blobIds)i.has(s)||await Kp(pc(e,s),gc(e,s));await pi(e,t.stageId),await ic(Mr(e)),await ic(Or(e))}async function pi(e,t){await qa(dc(e,t)),await Uk(e)}async function Uk(e){try{await xe.rmdir(uc(e))}catch(t){if(Dr(t)||st(t)&&t.code==="ENOTEMPTY")return;throw t}}async function Kk(e,t){for(let n of await hi(e))n.entryId===t&&await pi(e,n.stageId)}async function qa(e){if(await xe.rm(e,{force:!0}),await Le(e))throw new z(K.INDEX_CORRUPT,`unable to remove staged history object: ${e}`)}async function Kp(e,t){await qa(e),await qa(t)}function ac(e){if(!st(e)||e.schemaVersion!==Ya||typeof e.stageId!="string"||!Yp(e.stageId)||!Ke(e.entryId))throw new z(K.INVALID_SCHEMA,"history stage schema is invalid");let t=qp(e.blobIds,"history stage blobIds");return{schemaVersion:Ya,stageId:e.stageId,entryId:e.entryId,blobIds:t}}function ec(e){if(!Yp(e))throw new z(K.INVALID_PATH,"history stageId must be a UUID")}function Yp(e){return typeof e=="string"&&/^[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/iu.test(e)}async function Pr(e,t){let n=new Set(t),r=new Set;for(let c of t){let l=await _r(e,c);for(let u of l.blobs)r.add(u.digest)}for(let c of await hi(e)){n.add(c.entryId);for(let l of c.blobIds)r.add(l)}let o=Mr(e),i=await gi(o);for(let c of i){if(!c.endsWith(".json"))continue;let l=zp(c.slice(0,-5));l&&!n.has(l)&&await mi(Ee.join(o,c))}let s=Or(e),a=await gi(s);for(let c of a){let l=zp(c);l&&!r.has(l)&&await mi(Ee.join(s,c))}}async function Ve(e){let t=yi(e),n=await $t(t,K.NOT_FOUND,"index"),r=Fr(Buffer.from(n).toString("utf8"),"index"),o=Wk(r),i=[...o.entryIds],{totalBytes:s}=await Zp(e,i),a=i.slice(0,o.cursor+1).reverse(),c=i.slice(o.cursor+1);return{schemaVersion:Ge,digest:o.digest,entryIds:i,cursor:o.cursor,currentId:i[o.cursor]??null,undoIds:a,redoIds:c,totalBytes:s}}async function Zp(e,t){let n=0,r=new Set,o=yi(e),i=await $t(o,K.NOT_FOUND,"index");n+=i.byteLength;for(let s of t){let a=await _r(e,s),c=await nm(e,s),l=await $t(c,K.NOT_FOUND,"entry");n+=l.byteLength;for(let u of a.blobs){if(r.has(u.digest))continue;r.add(u.digest);let d=await hc(e,u.digest),p=await $t(d,K.NOT_FOUND,"blob");lc(p,u.digest,d),n+=p.byteLength}}return{totalBytes:n}}async function _r(e,t){let n=await nm(e,t),r=await $t(n,K.NOT_FOUND,"entry"),o=Fr(Buffer.from(r).toString("utf8"),`entry ${t}`),i=Hk(o);if(i.id!==t)throw new z(K.ENTRY_CORRUPT,`entry id mismatch for ${t}`);if(Vt(Ue({schemaVersion:i.schemaVersion,kind:i.kind,manifest:i.manifest,blobs:i.blobs}))!==t)throw new z(K.ENTRY_CORRUPT,`entry hash mismatch for ${t}`);for(let a of i.blobs){let c=await hc(e,a.digest),l=await $t(c,K.NOT_FOUND,"blob");lc(l,a.digest,c)}return i}async function cc(e,t,n){let r={schemaVersion:Ge,digest:Vt(Ue({schemaVersion:Ge,entryIds:t,cursor:n})),entryIds:t,cursor:n};await Ar(yi(e),r)}function tc(e,t){if(t!==void 0&&e.digest!==t)throw new z(K.INVALID_SCHEMA,`history index changed concurrently (expected ${t}, current ${e.digest})`)}async function Jp(e){let t=Vt(Ue({schemaVersion:Ge,entryIds:e.entryIds,cursor:e.cursor}));try{return await cc(e.rootDir,e.entryIds,e.cursor),await e.afterWrite?.(),await Ve(e.rootDir)}catch(n){let r=await Ve(e.rootDir).catch(()=>null);if(r?.digest===t)return r;throw r?.digest===e.previousDigest?n:new z(K.INDEX_CORRUPT,"history index publish outcome is ambiguous",{cause:n})}}async function Jk(e){await xe.mkdir(e,{recursive:!0}),await xe.mkdir(Mr(e),{recursive:!0}),await xe.mkdir(Or(e),{recursive:!0}),await xe.mkdir(Tr(e),{recursive:!0})}async function Xk(e){await xe.rm(Tr(e),{recursive:!0,force:!0}),await xe.mkdir(Tr(e),{recursive:!0})}async function zk(e){let t=Tr(e);await xe.mkdir(t,{recursive:!0});for(let n of await gi(t))n!=="stages"&&await xe.rm(Ee.join(t,n),{recursive:!0,force:!0})}function Wk(e){if(!st(e))throw new z(K.INDEX_CORRUPT,"index.json must be an object");if(e.schemaVersion!==Ge)throw new z(K.INVALID_SCHEMA,`unsupported index schemaVersion: ${String(e.schemaVersion)}`);let t=qp(e.entryIds,"index.entryIds"),n=e.cursor;if(!Number.isInteger(n)||n<-1||n>=t.length)throw new z(K.INDEX_CORRUPT,"index cursor is out of bounds");let r=n,o=e.digest;if(!Ke(o))throw new z(K.INDEX_CORRUPT,"index digest is invalid");let i=Vt(Ue({schemaVersion:Ge,entryIds:t,cursor:r}));if(o!==i)throw new z(K.INDEX_CORRUPT,"index digest mismatch");return{schemaVersion:Ge,digest:o,entryIds:t,cursor:r}}function Hk(e){if(!st(e))throw new z(K.ENTRY_CORRUPT,"entry must be an object");if(e.schemaVersion!==Ge)throw new z(K.INVALID_SCHEMA,`unsupported entry schemaVersion: ${String(e.schemaVersion)}`);let t=e.id;if(!Ke(t))throw new z(K.ENTRY_CORRUPT,"entry id is invalid");let n=e.kind;if(typeof n!="string"||n.trim().length===0)throw new z(K.ENTRY_CORRUPT,"entry kind is invalid");let r=rc(e.manifest,"entry.manifest"),o=Gk(e.blobs);return{id:t,schemaVersion:Ge,kind:n,manifest:r,blobs:o}}function Gk(e){if(!Array.isArray(e))throw new z(K.ENTRY_CORRUPT,"entry blobs must be an array");return e.map((t,n)=>{if(!st(t))throw new z(K.ENTRY_CORRUPT,`entry blob ref ${n} must be an object`);let r=t.name;if(typeof r!="string"||r.trim().length===0)throw new z(K.ENTRY_CORRUPT,`entry blob ref ${n} name is invalid`);let o=t.digest;if(!Ke(o))throw new z(K.ENTRY_CORRUPT,`entry blob ref ${n} digest is invalid`);let i=t.sizeBytes;if(!Number.isInteger(i)||i<0)throw new z(K.ENTRY_CORRUPT,`entry blob ref ${n} sizeBytes is invalid`);return{name:r,digest:o,sizeBytes:i}})}async function Ar(e,t){await Qp(e,Ue(t))}async function Yk(e,t){let n=Ee.dirname(e),r=Ee.basename(e),o=Ee.join(n,`.${r}.${process.pid}.${sc()}.tmp`);await xe.mkdir(n,{recursive:!0});try{await xe.writeFile(o,Ue(t),{flag:"wx"}),await xe.rename(o,e)}finally{await mi(o)}}async function Qp(e,t){let n=Ee.dirname(e),r=Ee.basename(e),o=Ee.join(n,`.${r}.${process.pid}.${sc()}.tmp`);await xe.mkdir(n,{recursive:!0});try{let i=await xe.open(o,"wx");try{await i.writeFile(t),await i.sync()}finally{await i.close()}await xe.rename(o,e),await ic(n)}finally{await mi(o)}}function Ue(e){return Buffer.from(JSON.stringify(nc(e)),"utf8")}function nc(e){if(Array.isArray(e))return e.map(t=>nc(t));if(st(e)){let t={};for(let n of Object.keys(e).sort())t[n]=nc(e[n]);return t}return e}function Fr(e,t){try{return JSON.parse(e)}catch(n){throw new z(K.INVALID_JSON,`${t} is not valid JSON`,{cause:n})}}function rc(e,t){if(e===null)return null;switch(typeof e){case"boolean":case"number":case"string":return e;case"object":if(Array.isArray(e))return e.map(n=>rc(n,t));if(st(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=rc(o,t);return n}break}throw new z(K.INVALID_JSON,`${t} must be JSON-serializable`)}function qp(e,t){if(!Array.isArray(e))throw new z(K.INDEX_CORRUPT,`${t} must be an array`);return e.map((n,r)=>{if(!Ke(n))throw new z(K.INDEX_CORRUPT,`${t}[${r}] is invalid`);return n})}function fi(e,t){if(!Ke(e))throw new z(K.INVALID_PATH,`${t} must be a sha256 digest`)}function Ke(e){return typeof e=="string"&&/^sha256:[a-f0-9]{64}$/u.test(e)}function Vt(e){return`sha256:${Fk("sha256").update(e).digest("hex")}`}function Zk(e){return typeof e=="string"?Buffer.from(e,"utf8"):Buffer.from(e)}async function $t(e,t,n){try{return await xe.readFile(e)}catch(r){throw new z(t,`${n} not found: ${e}`,{cause:r})}}async function oc(e){try{return await xe.readFile(e)}catch(t){if(Dr(t))return null;throw t}}function lc(e,t,n){if(Vt(e)!==t)throw new z(K.BLOB_CORRUPT,`blob hash mismatch for ${n}`)}async function Le(e){try{return await xe.access(e),!0}catch(t){if(Dr(t))return!1;throw t}}async function mi(e){try{await xe.rm(e,{force:!0,recursive:!0})}catch{}}async function ic(e){try{let t=await xe.open(e,"r");try{await t.sync()}finally{await t.close()}}catch{}}async function gi(e){try{return await xe.readdir(e)}catch(t){if(Dr(t))return[];throw t}}function Qk(e){if(typeof e!="string"||e.trim().length===0)throw new z(K.INVALID_ROOT,"history store rootDir must be a non-empty string");return Ee.resolve(e)}function yi(e){return Ee.join(e,Ok)}function Ga(e){return Ee.join(e,Dk)}function qk(e){return Ee.join(e,Lk)}function em(e){return Ee.join(e,Bk)}async function Xp(e){try{let t=await xe.readFile(em(e),"utf8"),n=Fr(t,"document version");if(!st(n)||n.schemaVersion!==1||!Number.isInteger(n.version)||n.version<0)throw new z(K.INVALID_SCHEMA,"document version schema is invalid");return n.version}catch(t){if(Dr(t))return 0;throw t}}async function ui(e){let t=await $t(e,K.RECOVERY_PENDING,"transaction journal"),n=Fr(Buffer.from(t).toString("utf8"),"transaction journal");return tm(n),n}function tm(e){if(!st(e)||e.schemaVersion!==Mk||typeof e.transactionId!="string"||e.transactionId.length===0||typeof e.operationId!="string"||e.operationId.length===0||!["prepared","files-written","history-published"].includes(e.phase)||!$k(e.historyTransition)||!Array.isArray(e.files))throw new z(K.INVALID_SCHEMA,"transaction journal schema is invalid");for(let t of e.files)if(!st(t)||typeof t.path!="string"||t.path.length===0||t.preDigest!==null&&!Ke(t.preDigest)||t.postDigest!==null&&!Ke(t.postDigest))throw new z(K.INVALID_SCHEMA,"transaction journal file digest is invalid")}function eC(e){return e.replace(/[\r\n]+/g," ").slice(0,512)}function Mr(e){return Ee.join(e,"entries")}function Or(e){return Ee.join(e,"blobs")}function Tr(e){return Ee.join(e,"tmp")}function uc(e){return Ee.join(Tr(e),"stages")}function dc(e,t){return Ee.join(uc(e),`${t}.json`)}function fc(e,t){return Ee.join(Mr(e),`${om(t)}.json`)}function pc(e,t){return Ee.join(Or(e),om(t))}function mc(e,t){return Ee.join(Mr(e),`${t}.json`)}function gc(e,t){return Ee.join(Or(e),t)}async function nm(e,t){return rm(fc(e,t),mc(e,t))}async function hc(e,t){return rm(pc(e,t),gc(e,t))}async function rm(e,t){return await Le(e)?e:await Le(t)?t:e}function om(e){return e.slice(7)}function zp(e){let t=e.startsWith("sha256:")?e:`sha256:${e}`;return Ke(t)?t:null}function st(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Dr(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}function tC(e){return{maxEntries:e?.maxEntries??di.maxEntries,maxSessionBytes:e?.maxSessionBytes??di.maxSessionBytes,maxEntryBytes:e?.maxEntryBytes??di.maxEntryBytes}}async function nC(e){let t=yi(e);await Le(t)||await cc(e,[],-1)}import{createHash as rC}from"node:crypto";import{computeSiteEditCompositionKey as sm,ManagedPageTemplateRouteManifestV1Schema as oC}from"@vcp-dev/contracts";var iC="app/_vcp/page-templates/runtime.tsx",am=".vcp/page-templates/routes/",sC="app/_vcp/page-templates/routes/";function cm(e){return e.startsWith(am)&&e.endsWith(".json")}var Ae=class extends Error{constructor(t,n,r){super(n),this.code=t,this.details=r,this.name="PageTemplateManagedSourceError"}};function $n(e){let t=Yo(e);return rC("sha256").update(t,"utf8").digest("hex").slice(0,16)}function Si(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function Lr(e,t){let n=$n(e),r=`${sC}${n}`,o=Si(t);return{routeRoot:r,manifestFile:`${am}${n}.json`,runtimeFile:iC,registryFile:`${r}/registry.ts`,templateEntryFile:`${r}/templates/${o}/page.tsx`}}function lm(e){let t=fC(e),n=new Map;for(let r of t){let o=Si(r),i=n.get(o);if(i!==void 0&&i!==r)throw new Ae("PAGE_TEMPLATE_ID_COLLISION",`Page-template IDs ${JSON.stringify(i)} and ${JSON.stringify(r)} map to the same safe name ${JSON.stringify(o)}.`,{reason:"safe-name-collision",templateId:r,safeName:o});n.set(o,r)}}function yc(e){let t=Yo(e.routeId),n=um(e.files),r=Lr(t,""),o=n.get(r.manifestFile);if(o===void 0)return null;let i=uC(t,r.manifestFile,o);return dC({routeId:t,manifest:i,files:n}),i}function aC(e){let t=Yo(e.selector.routeId),n=un(e.canonicalEntryFile),r=yc({routeId:t,files:e.files});if(r===null){if(e.selector.templateId!==void 0)throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Page-template selection ${JSON.stringify(e.selector.templateId)} cannot be resolved without a managed manifest for ${JSON.stringify(t)}.`,{reason:"template-selection-without-manifest",routeId:t,templateId:e.selector.templateId});return{mode:"direct",context:{routeId:t},entryFile:n,effectiveEntryFile:n}}if(un(r.canonical_entry_file)!==n)throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest for ${JSON.stringify(t)} does not match the supplied canonical entry.`,{reason:"canonical-entry-mismatch",routeId:t,path:r.canonical_entry_file});let o=e.selector.templateId??null,i=(o?r.templates.find(c=>c.template_id===o):void 0)??r.templates.find(c=>c.template_id===r.default_template_id);if(!i)throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest for ${JSON.stringify(t)} has no resolvable default template.`,{reason:"default-entry-missing",routeId:t});let a={context:{routeId:t,effectiveTemplateId:i.template_id},entryFile:un(i.entry_file)};return{...a,mode:"delegated",effectiveEntryFile:a.entryFile}}function cC(e){let t=um(e.files),n=[...t.keys()].map(l=>({path:l})),r=kr(n),o=new Set,i=new Map;for(let l of r){if(o.has(l.routeId))throw new Ae("PAGE_TEMPLATE_ROUTE_AMBIGUOUS",`Multiple canonical page entries resolve to route ${JSON.stringify(l.routeId)}.`,{reason:"duplicate-route-id",routeId:l.routeId,candidates:r.filter(p=>p.routeId===l.routeId).map(p=>p.entryFile)});o.add(l.routeId);let u=$n(l.routeId),d=i.get(u);if(d!==void 0&&d!==l.routeId)throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Page-template route-key collision between ${JSON.stringify(d)} and ${JSON.stringify(l.routeId)}.`,{reason:"route-key-collision",routeId:l.routeId});i.set(u,l.routeId)}let s=new Set(r.map(l=>Lr(l.routeId,"").manifestFile));for(let l of t.keys())if(cm(l)&&!s.has(l))throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest ${JSON.stringify(l)} does not belong to a scanned canonical route.`,{reason:"unknown-manifest",path:l});let a=[];for(let l of r){let u=yc({routeId:l.routeId,files:t});if(u===null){let d={routeId:l.routeId};a.push(lC(d,l.entryFile));continue}for(let d of[...u.templates].sort(pC)){let p={routeId:l.routeId,effectiveTemplateId:d.template_id},m={context:p,entryFile:un(d.entry_file)};a.push({key:sm(p),composition:m})}}let c=new Set;for(let{key:l,composition:u}of a){if(c.has(l))throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Duplicate site-edit composition key for ${JSON.stringify(l)}.`,{reason:"duplicate-composition-key",routeId:u.context.routeId});c.add(l)}return a.sort((l,u)=>mC(l.composition,u.composition)||xi(l.key,u.key)).map(({composition:l})=>l)}function lC(e,t){return{key:sm(e),composition:{context:e,entryFile:t}}}function um(e){let t=new Map;if(hC(e)){for(let n of e)im(t,n.path,n.content);return t}for(let[n,r]of e)im(t,n,r);return t}function im(e,t,n){let r=un(t);if(e.has(r))throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Snapshot contains duplicate file path ${JSON.stringify(r)}.`,{reason:"duplicate-file-path",path:r});e.set(r,n)}function uC(e,t,n){let r;try{r=JSON.parse(n)}catch{throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest ${JSON.stringify(t)} is not valid JSON.`,{reason:"invalid-json",routeId:e,path:t})}let o=oC.safeParse(r);if(!o.success)throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest ${JSON.stringify(t)} does not match the known manifest contract.`,{reason:"schema-invalid",routeId:e,path:t,issues:o.error.issues.map(i=>`${i.path.join(".")||"manifest"}: ${i.message}`)});return o.data}function dC(e){let{routeId:t,manifest:n,files:r}=e,o=Lr(t,""),i=kr([...r.keys()].map(l=>({path:l}))).filter(l=>l.routeId===t);if(n.route_id!==t&&pt(t,"route-id-mismatch",o.manifestFile),n.route_key!==$n(t)&&pt(t,"route-key-mismatch",o.manifestFile),i.length!==1)throw new Ae("PAGE_TEMPLATE_ROUTE_AMBIGUOUS",`Managed page-template route ${JSON.stringify(t)} has ${i.length} canonical entries.`,{reason:i.length===0?"canonical-entry-missing":"duplicate-route-id",routeId:t,candidates:i.map(l=>l.entryFile)});let s=un(n.canonical_entry_file);(s!==i[0].entryFile||!r.has(s))&&pt(t,"canonical-entry-mismatch",s),n.default_template_id!==`vcp-default:${$n(t)}`&&pt(t,"default-template-id-mismatch",o.manifestFile),lm(n.templates);let a=new Set,c=new Set;for(let l of n.templates){let u=Lr(t,l.template_id),d=un(l.entry_file),p=Si(l.template_id);l.safe_name!==p&&pt(t,"safe-name-mismatch",o.manifestFile,{templateId:l.template_id}),a.has(l.safe_name)&&pt(t,"duplicate-safe-name",o.manifestFile,{templateId:l.template_id}),a.add(l.safe_name),c.has(d)&&pt(t,"duplicate-entry-file",o.manifestFile,{templateId:l.template_id}),c.add(d),gC(d,u.routeRoot)||pt(t,"entry-outside-route-root",d,{templateId:l.template_id}),d!==u.templateEntryFile&&pt(t,"entry-path-mismatch",d,{templateId:l.template_id}),r.has(d)||pt(t,"template-entry-missing",d,{templateId:l.template_id})}}function pt(e,t,n,r={}){throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template source for ${JSON.stringify(e)} failed validation (${t}).`,{reason:t,routeId:e,path:n,...r})}function fC(e){return Array.isArray(e)?e.length===0||typeof e[0]=="string"?e:e.map(t=>t.template_id):"rawTemplateIds"in e?e.rawTemplateIds:"templateIds"in e?e.templateIds:[]}function pC(e,t){return+(t.kind==="default")-+(e.kind==="default")||xi(e.template_id,t.template_id)}function mC(e,t){let n=xi(e.context.routeId,t.context.routeId);if(n!==0)return n;let r=e.context.effectiveTemplateId,o=t.context.effectiveTemplateId;if(r===void 0)return-1;if(o===void 0)return 1;let s=`vcp-default:${$n(e.context.routeId)}`,a=r===s;return Number(o===s)-Number(a)||xi(r,o)}function xi(e,t){return e<t?-1:e>t?1:0}function gC(e,t){return e.startsWith(`${t}/`)}function un(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function hC(e){return Array.isArray(e)}export{z as FileHistoryStoreError,Ae as PageTemplateManagedSourceError,li as PreviewFileSystemSiteEditEngineRuntime,vf as SITE_EDIT_RAW_COLOR_LITERAL_RE,ai as SnapshotSiteEditEngineRuntime,lm as assertNoPageTemplateSafeNameCollision,Lr as computeManagedPageTemplatePaths,$n as computePageTemplateRouteKey,Si as computePageTemplateSafeName,_k as createPreviewSiteEditEngineRuntime,Nk as createSiteEditEngineRuntime,cm as isManagedPageTemplateManifestPath,Wp as openFileHistoryStore,yc as parseManagedPageTemplateManifest,aC as resolveManagedPageTemplateComposition,cC as scanSiteEditCompositionsFromFiles,Sr as scanSiteEditThemeStyleViolations};
12
+ `||p==="\r"))return Yn(t,`Unterminated string literal in ${t}.`);l=p===`
13
+ `||p==="\r";continue}if(p==="/"&&m==="*"){s=!0,d+=1,l=!1;continue}if(n==="mdx"&&p==="/"&&m==="/"){a=!0,d+=1,l=!1;continue}if(p==="'"||p==='"'||n==="mdx"&&p==="`"){o=p,l=!1;continue}if(p==="{"||p==="("||p==="["){r.push({char:p,offset:d}),l=!1;continue}if(p==="}"||p===")"||p==="]"){let g=p==="}"?"{":p===")"?"(":"[",b=r.pop();if(!b||b.char!==g)return Yn(t,`Unexpected closing token "${p}" in ${t}.`);l=!1;continue}l=p===`
14
+ `||p==="\r"}if(s)return Yn(t,`Unterminated block comment in ${t}.`);if(o)return Yn(t,`Unterminated string literal in ${t}.`);if(c)return Yn(t,`Unterminated MDX code fence in ${t}.`);let u=r.at(-1);return u?Yn(t,`Unclosed token "${u.char}" in ${t}.`):{ok:!0}}function Yn(e,t){return{ok:!1,errorCode:"ast-error",message:t,details:{path:e}}}function Jr(e){let t="idle",n=e.fileSystem??rC(),r=Yf(),o=tm({compositions:e.compositions,initialDocumentVersions:e.initialDocumentVersions}),i=new Map,s=new Map,a=new Set,c=null,l=e.history??(e.historyStore?Jp(e.historyStore):oC()),u=Gf(n,{externalAdapters:e.externalAdapters}),d=new Map,p=new Set,m=0,g=e.historyStore?.recoveryRequired??!1,b=lc(),C=O();function I(f){return(Si.isAbsolute(f)?Si.relative(e.projectRoot,f):f).replace(/\\/g,"/").replace(/^\.\//,"")}function w(f,y){let h=Si.posix.dirname(f),E=y.replace(/\.(?:tsx?|jsx?)$/i,""),R=Si.posix.relative(h,E);return R.startsWith(".")?R:`./${R}`}function P(f,y){return f.startLine===y.startLine&&f.startColumn===y.startColumn&&f.endLine===y.endLine&&f.endColumn===y.endColumn}async function O(){let f=e.historyStore;if(f)try{let y=await f.readTransactionJournal();if(!y)return;let h=await f.readIndex(),E=await Promise.all(y.files.map(async T=>await n.exists(T.path)?pe(await n.readFile(T.path)):null));if(Qp({journal:y,index:h,observedFileDigests:E})!=="ambiguous"){await f.clearTransactionJournal(y.transactionId);let T=await f.readStatus();T.recoveryRequired||(await f.cleanupTmp(),T=await f.readStatus()),g=T.recoveryRequired;return}await f.markRecoveryRequired(`Ambiguous transaction journal ${y.transactionId} at phase ${y.phase}`),g=!0}catch(y){g=!0,await f.markRecoveryRequired(`Transaction journal recovery failed: ${Be(y)}`).catch(()=>{})}}function se(){return t==="disposed"}e.onEvent&&r.subscribe(e.onEvent);for(let f of o.entries){let y=sm(f.context,f.entryFile);i.set(f.key,y),re(y,y.dependencyFiles)}function re(f,y){let h=new Set(y);N(f),f.dependencyFiles=h;for(let E of f.dependencyFiles){let R=s.get(E);R||(R=new Set,s.set(E,R)),R.add(f.key)}}function N(f){for(let y of f.dependencyFiles){let h=s.get(y);h&&(h.delete(f.key),h.size===0&&s.delete(y))}f.dependencyFiles.clear()}function z(f){let y=new Set;for(let h of f)for(let E of s.get(h)??[])y.add(E);return y}function M(f){for(let y of f)if(!s.has(y))return!1;return!0}async function j(f,y,h,E,R){let T=new Map,F=Qd(R.values()),D=new Map,_=typeof n.exists=="function"?V=>n.exists(V):async()=>!1;for(let[V,K]of f.elements){let fe=y.nodes.get(V);if(!fe)continue;let ne=h.get(K.sourceFile)??E.get(K.sourceFile),ve=new Map,oe=new Map,xe=new Map,ye=[];for(let ge of K.textSegments){if(!ne){ve.set(ge.index,null);continue}let Qn=await ef({file:K.sourceFile,source:ne,segment:ge,readFile:Ke=>n.readFile(Ke),exists:_,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Ke,adapterId:tn,capabilities:zi})=>({sourceType:Ke,adapterId:tn,capabilities:zi})),functionCallContracts:e.functionCallContracts,fileCache:F}),Le=await Sa({file:K.sourceFile,source:ne,target:{kind:"text-segment",segment:ge},readFile:Ke=>n.readFile(Ke),exists:_,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Ke,adapterId:tn,capabilities:zi})=>({sourceType:Ke,adapterId:tn,capabilities:zi})),functionCallContracts:e.functionCallContracts,fileCache:F}),Ye=gC(Qn);ve.set(ge.index,Ye),oe.set(ge.index,Qn),xe.set(ge.index,Le),ye.push({editable:ge.editable,source:Ye})}let A=new Map,$=new Map;if(ne)for(let ge of K.attributes??[]){let Qn=await Wn({file:K.sourceFile,source:ne,sourceRange:ge.sourceRange,expression:ge.source?.expression??ge.value,sourceInfo:ge.source,readFile:Ye=>n.readFile(Ye),exists:_,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Ye,adapterId:Ke,capabilities:tn})=>({sourceType:Ye,adapterId:Ke,capabilities:tn})),functionCallContracts:e.functionCallContracts,fileCache:F}),Le=await Zf({element:K,file:K.sourceFile,source:ne,propertyName:ge.name,readFile:Ye=>n.readFile(Ye),exists:_,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Ye,adapterId:Ke,capabilities:tn})=>({sourceType:Ye,adapterId:Ke,capabilities:tn})),functionCallContracts:e.functionCallContracts,fileCache:F});$.set(ge.name,Le),A.set(ge.name,Qn)}let ee=Ru(hC(fe.writeTarget),ye),me=Tu({key:V,element:K,graph:f,provenances:xe}),Ft=Mu(K),Ot=Du(K),Rn=Lu(K),ro=ne?await Nf({element:K,graph:f,file:K.sourceFile,source:ne,readFile:ge=>n.readFile(ge),exists:_,fileCache:D}):void 0,Ae=f.regions.find(ge=>ge.kind==="conditional-region"&&ge.childKeys.includes(V)),oo,Xi=Ae?.sourceCandidates?.[0];if(ne&&Ae&&Xi?.kind==="conditional-branch"){let ge=await Sa({file:K.sourceFile,source:ne,target:{kind:"conditional-branch",candidate:Xi},readFile:Le=>n.readFile(Le),exists:_,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Le,adapterId:Ye,capabilities:Ke})=>({sourceType:Le,adapterId:Ye,capabilities:Ke})),functionCallContracts:e.functionCallContracts,fileCache:F});oo={currentBranch:Ae.childKeys.indexOf(V)<=0?"then":"else",availableBranches:Ae.childKeys.length>1?["then","else"]:["then"],conditionExpression:Xi.conditionExpression,provenance:{finalSource:ge.finalSource?{kind:ge.finalSource.kind,file:ge.finalSource.file,displayPath:ge.finalSource.displayPath}:null,chain:ge.chain.map(Le=>({kind:Le.kind,file:Le.file,displayName:Le.displayName,canEditHere:Le.canEditHere})),confidence:ge.confidence,editMode:ge.editMode,diagnostics:ge.diagnostics.map(Le=>({code:Le.code,message:Le.message}))}}}T.set(V,{textSources:ve,textTargets:oe,elementPropertyTargets:A,propertyProvenances:$,isRepeat:TC(V,f),provenances:xe,writeTarget:ee,componentSemantic:me,contentModel:Ft,mediaModel:Ot,styleSource:Rn,conditional:oo,dynamicData:ro})}return T}function Y(f){return typeof n.getVersion=="function"?n.getVersion(f):0}function te(f,y){let h=o.initialVersions.get(f.key)??0;for(let E of y.values())h=Math.max(h,E);return Math.max(h,f.graph?.version??0)}function Se(f){return i.get(f)?.graph?.version??o.initialVersions.get(f)??0}function H(f){try{return Se(o.resolveSelector(f.composition).key)}catch{return 0}}async function q(f,y,h={}){let E=i.get(f);if(!E)return null;let R=h.sourceCache??uc(d,[]),T=await Ie(E.entryFile),{graph:F,allSources:D,diagnostics:_,parsedModules:V,entryModule:K}=await Il(E.entryFile,y,Ae=>n.readFile(Ae),typeof n.exists=="function"?Ae=>n.exists(Ae):async()=>!1,{additionalEntries:T,version:E.graph?.version??1});if(_.length>0)throw new Ur(_);let fe=new Map;for(let Ae of D.keys())fe.set(Ae,Y(Ae));let ne=Math.max(te(E,fe),h.minimumVersion??0);h.changed&&ne<=(E.graph?.version??0)&&(ne=(E.graph?.version??0)+1),F.version=ne;for(let[Ae,oo]of D)dc(R,Ae,oo,rm);let ve=await Tt(E.composition,E.entryFile,D,R);F.routeId=E.routeId,F.composition=E.composition;let oe=kl(F),xe=Rl(oe,F),ye=await j(F,oe,D,R,V),A=Qm(F,xe,ye),$=qm(ye),ee=_C(Eu(F,oe,xe,{canUpdateTextByKey:A,dynamicDataSummaryByKey:$}),F,ye),me=pu({route:E.routeId,composition:E.composition,entryFile:E.entryFile,version:ne,source:y,ast:K?.ast}),Ft=mu(me);me.ok&&EC(ee,F,me.projection);let Ot={...ee,composition:E.composition,...ve?{styleContext:ve}:{},pageComposition:Ft},Rn=new Set([E.entryFile,...D.keys()]);if(ve){Rn.add(ve.entryCss.path);for(let Ae of ve.stylesheets)Rn.add(Ae.path)}let ro={...E,dependencyFiles:Rn,graph:F,topology:oe,capabilities:xe,document:Ot,pageComposition:Ft,pageCompositionProjection:me.projection,pagePlacementByKey:me.ok?me.projection.placementByKey:null,pagePlacementUnitByKey:me.ok?me.projection.placementUnitByKey:null,pageUnitByKey:me.ok?me.projection.unitByKey:null,pagePlacementsByUnitKey:me.ok?me.projection.placementsByUnitKey:null,documentIndex:cC(Ot),detailProjections:ye,fileVersions:fe,styleContext:ve};if(h.publish===!1)return ro;Gn(d,R);for(let Ae of R.keys())p.delete(Ae);return re(E,Rn),Object.assign(E,ro),E}async function Ie(f){let y=[];for(let h of CC(f))typeof n.exists=="function"&&await n.exists(h)&&y.push({file:h,source:await n.readFile(h)});return y}async function Tt(f,y,h,E){let R=[];for(let[V,K]of h){if(mc(V)){R.push(V);continue}for(let fe of wC(K)){let ne=dm(V,fe);ne&&R.push(ne)}}if(!R.length){for(let V of RC(y))if(await zc(V)){R.push(V);break}}let T=new Map,F=hm(R).slice(0,nm);for(;F.length>0&&T.size<nm;){let V=F.shift();if(T.has(V)||!mc(V))continue;let K=await _t(V,E);if(K!==null){T.set(V,{path:V,content:K});for(let fe of NC(K)){let ne=dm(V,fe);ne&&!T.has(ne)&&!F.includes(ne)&&F.push(ne)}}}let D=[...T.values()].map(V=>({...V,hash:pe(V.content)})),_=D[0];return _?{composition:f,revision:pe(JSON.stringify(D.map(({path:V,hash:K})=>({path:V,hash:K})))),entryCss:_,stylesheets:D.slice(1)}:null}async function _t(f,y){let h=y.get(f);if(h!==void 0)return h;if(!await zc(f))return null;let E=await n.readFile(f);return dc(y,f,E,rm),E}async function zc(f){return typeof n.exists=="function"?n.exists(f):!1}function qm(f){let y=new Map;for(let[h,E]of f)E.dynamicData?.bindings.length&&y.set(h,jf(E.dynamicData.bindings));return y}function Qm(f,y,h){let E=new Map;for(let[R,T]of f.elements){if(!y.get(R)?.canUpdateText){E.set(R,!1);continue}let D=h.get(R),_=T.textSegments.some(V=>{if(!V.editable)return!1;let K=D?.provenances.get(V.index)??null;return!K||eg(K)});E.set(R,_)}return E}function eg(f){return f.editMode==="direct"||f.editMode==="proxy"||f.editMode==="upstream"}async function eo(f,y={}){let h=[...new Set(f)],E=y.affectedCompositionKeys!==void 0,R=E?new Set(y.affectedCompositionKeys):z(h);if(!E&&(R.size===0||!M(h)))for(let _ of i.values())Wc(_,h)&&R.add(_.key);let T=!E&&R.size===0&&h.some(um),F=y.publish===!1?uc(d,h):void 0,D={rebuiltRoutes:[],failedRoutes:[],...y.publish===!1?{candidateRouteStates:[],candidateSourceCache:F}:{}};for(let _ of i.values())if(!(y.excludedCompositionKeys?.has(_.key)||!(R.has(_.key)||T)))try{let K=!!_.graph,fe=await n.readFile(_.entryFile),ne=await q(_.key,fe,{...y,...F?{sourceCache:F}:{}});ne?.graph&&(D.rebuiltRoutes.push({documentChanged:K,composition:_.composition,routeId:_.routeId,version:ne.graph.version}),D.candidateRouteStates?.push({composition:_.composition,key:_.key,routeId:_.routeId,state:ne}))}catch(K){D.failedRoutes.push({...qp(_.routeId,K),composition:_.composition})}return D}function In(f){let y=[...new Set(f)],h=z(y);if(h.size>0&&M(y))return[...h];for(let E of i.values())Wc(E,y)&&h.add(E.key);return[...h]}function tg(f){let y=new Set(In(f));return o.entries.filter(h=>y.has(h.key)).map(h=>h.context)}function ng(f){return[...new Set(In(f))].sort((h,E)=>h<E?-1:h>E?1:0).map(h=>o.getByKey(h)?.context).filter(h=>h!==void 0)}function rg(f,y){let h=new Set(In(y)),E=f.provenance?.affectedCompositions??[];if(E.length===0)return h;if([...new Set(E.map(T=>o.resolveContext(T).key))].some(T=>!h.has(T)))throw new Error("History provenance does not match the affected composition index.");return h}function og(f,y){let h=f.composition??f.provenance?.initiatingComposition;if(h){let T=o.resolveContext(h);return{context:T.context,key:T.key}}let E=[...new Set(In(y))];if(E.length!==1)throw new Error(`Legacy history entry cannot be attributed to a unique composition (affected composition count: ${E.length}).`);let R=o.getByKey(E[0]);if(!R)throw new Error("Legacy history entry references an unknown affected composition.");return{context:R.context,key:R.key}}function $i(f,y){r.emit({type:"operation-completed",composition:f.composition,result:f});for(let{composition:h,version:E}of y.rebuiltRoutes)r.emit({type:"document-changed",composition:h,version:E});for(let{composition:h,message:E}of y.failedRoutes)r.emit({type:"graph-error",composition:h,message:E})}function Wc(f,y){return y.some(h=>f.dependencyFiles.has(h)||f.entryFile===h||f.graph?.fileIndex.has(h))}function Hc(f){for(let y of f)a.add(y);c||se()||(c=(async()=>{t="building";let y=!1;try{for(;a.size>0;){if(se())return;await ig();let h=[...a];a.clear();let E=await Gc(h);if(E.length===0)continue;let R=In(E);for(let D of R){let _=i.get(D)?.composition;_&&r.emit({type:"graph-invalidated",composition:_})}let{rebuiltRoutes:T,failedRoutes:F}=await eo(E,{changed:!0});for(let{documentChanged:D,composition:_,version:V}of T)r.emit({type:"graph-ready",composition:_,version:V}),D&&r.emit({type:"document-changed",composition:_,version:V});for(let{composition:D,message:_}of F)y=!0,r.emit({type:"graph-error",composition:D,message:_})}}finally{c=null,t!=="disposed"&&(t=!y&&[...i.values()].some(h=>h.graph)?"ready":"idle"),a.size>0&&Hc([])}})())}async function ig(){for(;m>0;)await new Promise(f=>setTimeout(f,0))}async function Gc(f){let y=[];for(let h of new Set(f)){let E=d.get(h);if(E===void 0){if(p.has(h)&&!await n.exists(h))continue;p.delete(h),y.push(h);continue}try{await n.readFile(h)!==E&&(p.delete(h),y.push(h))}catch(R){if(!SC(R))try{if(await n.exists(h))continue}catch{continue}p.add(h),y.push(h)}}return y}function Yc(f){Yp(d,f);for(let y of f)y.exists===!1?p.add(y.file):p.delete(y.file)}function Zc(f){p.clear();for(let y of f)p.add(y)}async function qc(f){let y=await Gc(f);if(y.length===0)return;let h=In(y);for(let T of h){let F=i.get(T)?.composition;F&&r.emit({type:"graph-invalidated",composition:F})}let{rebuiltRoutes:E,failedRoutes:R}=await eo(y,{changed:!0});for(let{documentChanged:T,composition:F,version:D}of E)r.emit({type:"graph-ready",composition:F,version:D}),T&&r.emit({type:"document-changed",composition:F,version:D});for(let{composition:T,message:F}of R)r.emit({type:"graph-error",composition:T,message:F})}async function sg(f,y){let h=qn(f,y);if(!h?.graph)return;let E=Ve(f)??f,R=h.graph.elements.get(E);R&&await qc([R.sourceFile])}async function Qc(f){let y=new Set;if(f.target.kind==="node"){let h=qn(f.target.key,f.composition),E=Ve(f.target.key)??f.target.key,R=h?.graph?.elements.get(E);R&&y.add(R.sourceFile)}else if(f.target.kind==="route"){let h=i.get(o.resolveSelector(f.target.composition).key);h&&y.add(h.entryFile)}else if(f.target.kind==="page-unit"){let h=i.get(o.resolveSelector(f.target.composition).key);h&&y.add(h.entryFile)}else if(f.target.kind==="source-file")y.add(f.target.path);else if(f.target.kind==="source-batch")for(let h of f.target.paths)y.add(h);await qc(y)}async function ag(f){if(f.params.kind!=="source-edit")return Vi(f,"invalid-params","source-edit requires source-edit params");for(let y of f.params.edits){let h=bC(y);if(!h.ok)return Vi(f,h.errorCode,h.message,h.details)}m+=1;try{let y=await pg(f.params.edits);if(!y.ok)return Vi(f,y.errorCode,y.message,y.details);await Qc(f);let h={operationId:f.id,kind:"source-edit",target:f.target,documentVersion:f.documentVersion,conflictPolicy:f.params.conflictPolicy,edits:f.params.edits.map(E=>E.operation==="delete"?{operation:"delete",file:E.path,baseContentHash:E.baseContentHash??null}:{operation:"upsert",file:E.path,baseContentHash:E.baseContentHash??null,content:E.content})};return await Cn({request:f,filePlan:h})}catch(y){return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:H(f),error:{code:L.INTERNAL_ERROR,message:Be(y)}}}finally{m-=1}}async function cg(f){if(f.target.kind!=="project"||f.params.kind!=="insert-page-resource")return Q(f,L.INVALID_PARAMS,"insert-page-resource requires project target and matching params.");m+=1;try{let y=await nc({files:[...f.params.artifact.components.flatMap(E=>E.materialization.files.map(R=>({path:R.pathTemplate,content:R.content}))),...f.params.artifact.pages.flatMap(E=>E.materialization.files.map(R=>({path:R.pathTemplate,content:R.content})))],exists:E=>n.exists(E),readFile:E=>n.readFile(E)});if(!y.ok)return Q(f,L.MATERIALIZATION_REJECTED,y.message);let h=await ec({artifact:f.params.artifact,exists:E=>n.exists(E)});return h.ok?await Cn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:f.target,documentVersion:f.documentVersion,conflictPolicy:"overwrite",edits:h.files},output:{kind:"insert-page-resource",package_instance_id:h.packageInstanceId,pages:h.pages},historyPolicy:"none"}):Q(f,h.code==="MATERIALIZATION_CONFLICT"?L.MATERIALIZATION_CONFLICT:L.MATERIALIZATION_REJECTED,h.message,h.path?{path:h.path}:void 0)}catch(y){return Q(f,L.INTERNAL_ERROR,Be(y))}finally{m-=1}}async function lg(f){if(f.target.kind!=="project"||f.params.kind!=="delete-page-source")return Q(f,L.INVALID_PARAMS,"delete-page-source requires project target and matching params.");if(!n.listFiles)return Q(f,L.PLAN_FAILED,"Complete project file listing is required for page deletion.");m+=1;try{let y=pm(await n.listFiles({maxFiles:5e4,maxDepth:64}));if(y.truncated)return Q(f,L.PLAN_FAILED,"Project file listing is incomplete; page deletion was refused.",{truncationReasons:y.truncated.reasons});let h=y.files.filter(({path:F})=>/\.(?:tsx?|jsx?)$/.test(F)),E=Object.fromEntries(await Promise.all(h.map(async({path:F})=>[F,await n.readFile(F)]))),R=Bp({expectedUrlPath:f.params.expectedUrlPath,files:E});if(!R.ok)return Q(f,R.code==="HOME_PAGE_LOCKED"?L.HOME_PAGE_LOCKED:R.code==="ROUTE_NOT_FOUND"?L.ROUTE_NOT_FOUND:L.PLAN_FAILED,R.message);let T=await Promise.all(R.edits.map(async F=>({...F,baseContentHash:pe(await n.readFile(F.file))})));return Cn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:f.target,documentVersion:f.documentVersion,conflictPolicy:"compare-and-swap",edits:T},output:{kind:"delete-page-source",deleted_files:R.deletedFiles,updated_files:R.updatedFiles,preserved_shared_files:R.preservedSharedFiles,warnings:R.warnings},historyPolicy:"none"})}catch(y){return Q(f,L.INTERNAL_ERROR,Be(y))}finally{m-=1}}async function ug(f,y){if(f.kind!=="insert-child"||f.params.kind!=="insert-child")return Q(f,L.UNSUPPORTED_OPERATION,"Only page-unit insert-child is currently supported by the page composition transaction.");if(!("kind"in f.params.position)||f.params.position.kind!=="page-composition")return Q(f,L.INVALID_PARAMS,"Page-unit insert-child requires a page-composition placement.");if(f.params.position.documentVersion!==f.documentVersion)return Q(f,L.VERSION_STALE,"Page-unit insert-child placement belongs to a different document version.");let h=y.document,E=y.pageCompositionProjection;if(!h||h.pageComposition?.status!=="supported"||!E||E.status!=="supported")return Q(f,L.UNSUPPORTED_OPERATION,"The current route has no supported page composition.");if(f.documentVersion!==h.version||E.documentVersion!==h.version)return Q(f,L.VERSION_STALE,`Document version ${f.documentVersion} is stale (current: ${h.version}).`);let R=f.params.node.kind==="component-call"?f.params.node.materialization:void 0;if(!R)return Q(f,L.UNSUPPORTED_OPERATION,"Page-unit insertion currently requires a static materialization manifest.");let T=f.params.position,F=await nc({files:R.files.map(_=>({path:_.pathTemplate,content:_.content})),exists:_=>n.exists(_),readFile:_=>n.readFile(_)});if(!F.ok)return Q(f,L.MATERIALIZATION_REJECTED,F.message);let D=await bp({manifest:R,generatedRoot:"components/site/generated",controlledFiles:R.files.map(_=>({pathTemplate:_.pathTemplate})),exists:_=>n.exists(_),commit:async _=>{let V=await n.readFile(y.entryFile),K=y.document,fe=y.pageCompositionProjection;if(!K||K.pageComposition?.status!=="supported"||K.version!==f.documentVersion||!fe||fe.status!=="supported"||fe.documentVersion!==K.version)return{ok:!0,data:Q(f,L.VERSION_STALE,"The route changed before the page-unit insertion could commit.")};let ne=_.entry.path,ve=Sg(_.instanceName),oe=Rs({routeId:y.routeId,entryFile:y.entryFile,currentDocumentVersion:K.version,expectedDocumentVersion:f.documentVersion,source:V,projection:fe,placementKey:T.placementKey,component:{source:ne,exportName:_.entry.export.kind==="default"?"default":_.entry.export.name,localName:ve}});if(!oe.ok)return{ok:!0,data:Q(f,ll(oe.error.code),oe.error.message,{diagnostics:oe.error.diagnostics})};let xe=oe.plan.returnStep?cu({source:V,jsx:oe.plan.returnStep.node.jsx,placement:oe.plan.returnStep.placement,...oe.plan.returnStep.replaceOriginal?{replaceOriginal:!0}:{}}):oe.plan.insertStep?.parentLocator?Mn({source:V,locator:oe.plan.insertStep.parentLocator,node:oe.plan.insertStep.node,placement:oe.plan.insertStep.placement,...oe.plan.insertStep.anchorLocator?{anchorLocator:oe.plan.insertStep.anchorLocator}:{}}):{ok:!1,source:V,diagnostic:{code:"unsupported-syntax",message:"Route composition rewrite has no insertion step."}};if(!xe.ok)return{ok:!0,data:Q(f,L.AST_PARSE_ERROR,xe.diagnostic.message)};let ye=jn({source:xe.source,moduleSpecifier:oe.plan.importStep.moduleSpecifier,imports:oe.plan.importStep.imports});if(!ye.ok)return{ok:!0,data:Q(f,L.AST_PARSE_ERROR,ye.diagnostic.message)};let A=_.files.map(ee=>({operation:"create-only",file:ee.path,content:ee.content})),$=[{operation:"upsert",file:y.entryFile,content:ye.source,baseContentHash:pe(V)},...A];m+=1;try{let ee=await Cn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:{kind:"source-file",path:y.entryFile},documentVersion:f.documentVersion,conflictPolicy:"compare-and-swap",edits:$}});return!ee.ok&&ee.error?.message.includes("MATERIALIZATION_INSTANCE_CONFLICT")?{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_CONFLICT",message:ee.error?.message??"Static prefab instance conflicted during commit."}}:{ok:!0,data:ee}}finally{m-=1}}});return D.ok?D.data:Q(f,L.VERSION_STALE,D.error.message,{materializationCode:D.error.code})}async function dg(f,y){if(f.kind!=="move-node"&&f.kind!=="remove-node")return Q(f,L.UNSUPPORTED_OPERATION,"Only page-unit move-node and remove-node are currently supported by the page composition transaction.");let h=y.document,E=y.pageCompositionProjection;if(!h||h.pageComposition?.status!=="supported"||!E||E.status!=="supported")return Q(f,L.UNSUPPORTED_OPERATION,"The current route has no supported page composition.");if(f.documentVersion!==h.version||E.documentVersion!==h.version)return Q(f,L.VERSION_STALE,`Document version ${f.documentVersion} is stale (current: ${h.version}).`);let R=await n.readFile(y.entryFile),T=lu({routeId:y.routeId,composition:y.composition,entryFile:y.entryFile,currentDocumentVersion:h.version,expectedDocumentVersion:f.documentVersion,source:R,projection:E,placementUnitKey:f.target.placementUnitKey,operation:f.kind,targetPlacement:f.kind==="move-node"&&f.params.kind==="move-node"&&"kind"in f.params.target&&f.params.target.kind==="page-composition"?f.params.target:void 0});if(!T.ok)return Q(f,ll(T.error.code),T.error.message,{diagnostics:T.error.diagnostics});let F=T.plan.rewriteStep.kind==="move-node"?Ln({source:R,locator:T.plan.rewriteStep.locator,targetParentLocator:T.plan.rewriteStep.targetParentLocator,placement:T.plan.rewriteStep.placement,...T.plan.rewriteStep.anchorLocator?{anchorLocator:T.plan.rewriteStep.anchorLocator}:{}}):Fn({source:R,locator:T.plan.rewriteStep.locator});if(!F.ok)return Q(f,L.AST_PARSE_ERROR,F.diagnostic.message);let D=F.source,_=[];if(f.kind==="remove-node"){let K=await fg({routeState:y,placementUnitKey:f.target.placementUnitKey,source:R,mutatedSource:D});D=K.source,_=await Promise.all(K.files.map(async fe=>({operation:"delete",file:fe,baseContentHash:pe(await n.readFile(fe))})))}let V=[{operation:"upsert",file:y.entryFile,content:D,baseContentHash:pe(R)},..._];m+=1;try{return await Cn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:{kind:"source-file",path:y.entryFile},documentVersion:f.documentVersion,conflictPolicy:"compare-and-swap",edits:V}})}finally{m-=1}}async function fg(f){let y={source:f.mutatedSource,files:[]},h=f.routeState.graph,E=f.routeState.pageCompositionProjection;if(!h||!E||E.status!=="supported"||!n.listFiles)return y;let T=E.placementUnitByKey.get(f.placementUnitKey)?.sourceRange;if(!T)return y;let F=[...h.elements.values()].find(A=>A.sourceFile===f.routeState.entryFile&&A.importedFrom&&P(A.sourceRange,T));if(!F?.importedFrom||!F.exportName)return y;let D=I(F.importedFrom),_="components/site/generated/";if(!D.startsWith(_))return y;let V=D.slice(_.length).split("/")[0];if(!V||!/-[0-9a-f]{8}$/i.test(V))return y;let K=`${_}${V}`;if([...h.elements.values()].filter(A=>A.sourceFile===f.routeState.entryFile&&I(A.importedFrom??"")===D).length!==1)return y;let ne=await n.listFiles({maxFiles:5e3,maxDepth:32}),ve=Array.isArray(ne)?ne:ne.files;if(!Array.isArray(ne)&&ne.truncated)return y;let oe=ve.map(({path:A})=>A).filter(A=>A===K||A.startsWith(`${K}/`));if(oe.length===0||!oe.includes(D))return y;for(let{path:A}of ve)if(!(A===f.routeState.entryFile||A===K||A.startsWith(`${K}/`)))try{if((await n.readFile(A)).includes(V))return y}catch{return y}let xe=w(f.routeState.entryFile,D),ye=$n({source:f.mutatedSource,moduleSpecifier:xe,imports:F.exportName==="default"?[{kind:"default"}]:[{kind:"named",imported:F.exportName}]});return ye.ok?{source:ye.source,files:oe.sort((A,$)=>A.localeCompare($))}:y}async function pg(f){if(n.getFileInfo){for(let R of f)if(await n.exists(R.path)&&await n.getFileInfo(R.path)===null)return{ok:!1,errorCode:"invalid-params",message:`Source edit path must resolve to a regular non-symbolic-link file: ${R.path}`,details:{path:R.path}}}let y=mg(f);if(y.length===0)return{ok:!0};let h=yC(n,f),E=Jr({projectRoot:e.projectRoot,fileSystem:h,compositions:[...i.values()].map(R=>({context:R.composition,entryFile:R.entryFile})),externalAdapters:e.externalAdapters,externalSourceResolvers:e.externalSourceResolvers,functionCallContracts:e.functionCallContracts,dev:e.dev});try{for(let R of y){let T=i.get(R)?.composition;if(!T)continue;let F={routeId:T.routeId,...T.effectiveTemplateId!==void 0?{templateId:T.effectiveTemplateId}:{}};await E.initializeComposition(F),E.getDocument(F)}}catch(R){return{ok:!1,errorCode:"ast-error",message:`Source edit preflight failed: ${Be(R)}`,details:{compositionKeys:y}}}finally{E.dispose()}return{ok:!0}}function mg(f){return f.map(h=>h.path).some(um)?[...i.keys()]:[]}function Vi(f,y,h,E){let R=Kr(y);return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:H(f),error:{code:R,message:h,...E?{details:E}:{}}}}async function Ui(f){let y=[];for(let h of new Set(f))y.push(await gg(h));return y}async function gg(f){if(!(typeof n.exists=="function"?await n.exists(f):!0))return{file:f,content:"",version:Math.max(0,Y(f)),exists:!1};let h=await n.readFile(f);return{file:f,content:h,version:Math.max(1,Y(f)),exists:!0,sha256:pe(h)}}async function el(f,y,h,E){if(!e.historyStore)return null;let R=new Map(y.map(D=>[D.file,D])),T=new Map(h.map(D=>[D.file,D])),F=[...new Set([...R.keys(),...T.keys()])].sort().map(D=>{let _=R.get(D),V=T.get(D);return{path:D,preDigest:_?.exists===!1||!_?null:pe(_.content),postDigest:V?.exists===!1||!V?null:pe(V.content)}});return{schemaVersion:2,transactionId:`${f}:${E.expectedIndexDigest}`,operationId:f,phase:"prepared",historyTransition:E,files:F}}async function tl(f){return!f||!e.historyStore||await e.historyStore.writeTransactionJournal(f),f}async function kn(f){f&&e.historyStore&&await e.historyStore.clearTransactionJournal(f.transactionId)}async function Ki(f,y){let h=[];try{for(let E of f)await nl(E),typeof n.bumpVersion=="function"&&n.bumpVersion(E.file),h.push(E.file)}catch(E){let R=await hg(y.filter(T=>h.includes(T.file)));return R.ok?{ok:!1,reason:`Writeback failed and committed files were restored: ${Be(E)}`,rolledBack:!0}:{ok:!1,reason:`Writeback failed, then rollback failed for ${R.failedFiles.join(", ")}: ${Be(E)}`,rolledBack:!1}}return{ok:!0,snapshots:f.map(yg)}}async function nl(f){if(f.exists===!1){await n.deleteFile(f.file);return}await n.writeFile(f.file,f.content)}async function hg(f){let y=[];for(let h of f)try{await nl(h),typeof n.bumpVersion=="function"&&n.bumpVersion(h.file)}catch{y.push(h.file)}return y.length===0?{ok:!0}:{ok:!1,failedFiles:y}}function yg(f){let y=f.exists!==!1;return{file:f.file,content:y?f.content:"",version:f.version,exists:y,...y?{sha256:pe(f.content)}:{}}}async function Cn(f){return b.runExclusive(()=>xg(f))}async function xg(f){let y=f.filePlan.edits.map(A=>A.file),h=o.resolveSelector(f.request.composition),E=h.context,R=f.historyPolicy==="none"?void 0:{initiatingComposition:E,affectedCompositions:ng(y)},T=await Ui(y),F=new Map(T.filter(A=>A.exists!==!1).map(A=>[A.file,A.content])),D=ol(),_=new Map(d),V=new Set(p),K=new Set([...i.values()].filter(A=>f.filePlan.edits.some($=>$.operation==="delete"&&$.file===A.entryFile)).map(A=>A.key)),fe=f.filePlan.edits.map(A=>A.operation==="delete"?{file:A.file,content:"",version:0,exists:!1}:{file:A.file,content:A.content,version:0,exists:!0,sha256:pe(A.content)}),ne={operationId:f.filePlan.operationId,intents:f.filePlan.edits.map(A=>A.operation==="delete"?{kind:"delete",path:A.file}:{kind:A.operation==="create-only"?"create-only":"upsert",path:A.file,content:A.content})},ve=null,oe=!1,xe=await yi({overlay:F,exists:A=>n.exists(A),plan:ne,buildCandidate:async({plan:A})=>({plan:A}),prepareHistory:async()=>{let A=f.historyPolicy==="none"?null:await l.prepareAppend({composition:o.resolveSelector(f.request.composition).context,operationId:f.request.id,kind:f.request.kind,target:f.request.target,preSnapshots:T,postSnapshots:fe,...f.selectionRef?{selectionRef:f.selectionRef}:{},...f.output?{output:f.output}:{},...R?{provenance:R}:{}}),$=A?.historyTransition?A.historyTransition:e.historyStore?nC(await e.historyStore.readIndex()):null;if(e.historyStore&&!$)throw new Error("Durable history did not provide an exact index transition.");return ve=await el(f.request.id,T,fe,$),ve=await tl(ve),{history:A,historyTransition:$}},reverify:async()=>{},writeCandidate:async()=>{let A=await u.executeFilePlan(f.filePlan);if(!A.ok)throw new vi(A);return{postSnapshots:await Ui(A.affectedFiles),affectedFiles:A.affectedFiles,internalResultVersion:A.resultVersion}},validateCandidate:async({candidate:A,receipt:$})=>{let ee=await eo($.affectedFiles,{changed:!0,minimumVersion:$.internalResultVersion,publish:!1,excludedCompositionKeys:K});if(ee.failedRoutes.length>0)throw new Sn(ee.failedRoutes);let me=sl(D,ee.candidateRouteStates??[]),Ft=il(me,h.key);return{...A,rebuild:ee,routeSnapshots:me,resultVersion:Ft,...am(f.selectionRef,me.map(Ot=>Ot.state.document))?{selectionRef:am(f.selectionRef,me.map(Ot=>Ot.state.document))}:{}}},publishCandidate:async({candidate:A,history:$,receipt:ee})=>{$?.history&&(await l.publishPrepared($.history),oe=!0);let me=A.resultVersion??ee.internalResultVersion;return{composition:E,requestId:f.request.id,kind:f.request.kind,target:f.request.target,ok:!0,resultVersion:me,affectedFiles:ee.affectedFiles,...f.output?{output:f.output}:{},...A.selectionRef?{selectionRef:A.selectionRef}:{}}},swapCandidate:({candidate:A,receipt:$})=>{A.routeSnapshots&&to(A.routeSnapshots),A.rebuild?.candidateSourceCache&&Gn(d,A.rebuild.candidateSourceCache),Yc($.postSnapshots)},finalizeCandidate:async()=>{await kn(ve);for(let A of K)i.delete(A)},emitCommitted:({candidate:A,published:$})=>{$i($,A.rebuild??{rebuiltRoutes:[],failedRoutes:[]})},rollbackCandidate:async({history:A,receipt:$})=>{if(oe)throw new Error("history was published before transaction finalization failed");if($){let ee=await Ki(T,$.postSnapshots);if(!ee.ok)throw new Error(ee.reason)}to(D),Gn(d,_),Zc(V),A?.history&&await l.discardPrepared?.(A.history),await kn(ve)}});if(xe.ok)return xe.published;if(xe.stage==="precheck"||xe.stage==="build")try{await kn(ve)}catch(A){let $=await no(Be(A));return Q(f.request,$,"Unable to clear an uncommitted transaction journal.")}if(xe.recoveryRequired){let A=await no(xe.reason);return Q(f.request,A===L.RECOVERY_PERSIST_FAILED?A:L.ROLLBACK_FAILED,xe.reason)}let ye=xe.error;return ye instanceof vi?{...Q(f.request,Kr(ye.result.errorCode),ye.result.reason),...ye.result.affectedFiles?{affectedFiles:ye.result.affectedFiles}:{}}:ye instanceof Sn?Q(f.request,L.ROUTE_REBUILD_FAILED,`Route rebuild failed and source was rolled back: ${fc(ye.failedRoutes)}`,{failedRoutes:ye.failedRoutes}):Q(f.request,cl(xe.stage),Be(ye))}async function rl(f){return b.runExclusive(async()=>{let y=f==="undo"?await l.prepareUndo():await l.prepareRedo();return y?bg(f,y):{composition:o.entries[0].context,requestId:f,kind:"update-text",target:{kind:"node",key:""},ok:!1,resultVersion:o.initialVersions.get(o.entries[0].key)??0,error:{code:L.INTERNAL_ERROR,message:f==="undo"?"Nothing to undo":"Nothing to redo"}}})}async function bg(f,y){let h=y.entry,E=f==="undo"?h.preSnapshots:h.postSnapshots,R=f==="undo"?h.postSnapshots:h.preSnapshots,T=E.map($=>$.file),{context:F,key:D}=og(h,T),_=await Ui(T),V=new Map(_.filter($=>$.exists!==!1).map($=>[$.file,$.content])),K=Se(D),fe=ol(),ne=new Map(d),ve=new Set(p),oe=null,xe=!1,ye,A=await yi({overlay:V,plan:{operationId:`${f}:${h.operationId}`,intents:E.map($=>$.exists===!1?{kind:"delete",path:$.file}:{kind:"upsert",path:$.file,content:$.content})},buildCandidate:async()=>({}),prepareHistory:async()=>(oe=await el(`${f}:${h.operationId}`,_,E,y.historyTransition),oe=await tl(oe),y),reverify:async()=>{},writeCandidate:async()=>{let $=await Ki(E,R);if(!$.ok)throw new Error($.reason);return{snapshots:$.snapshots}},validateCandidate:async({candidate:$})=>{ye=rg(h,T);let ee=await eo(T,{changed:!0,minimumVersion:K+1,publish:!1,affectedCompositionKeys:ye});if(ee.failedRoutes.length>0)throw new Sn(ee.failedRoutes);let me=sl(fe,ee.candidateRouteStates??[]),Ft=il(me,D);return{...$,rebuild:ee,routeSnapshots:me,resultVersion:Ft}},publishCandidate:async({candidate:$,history:ee})=>{if(!ee)throw new Error("history cursor intent is missing");await l.publishPrepared(ee),xe=!0;let me=$.resultVersion??K+1;return{composition:F,requestId:f,kind:h.kind,target:h.target,ok:!0,resultVersion:me,affectedFiles:T,...h.output?{output:h.output}:{}}},swapCandidate:({candidate:$,receipt:ee})=>{$.routeSnapshots&&to($.routeSnapshots),$.rebuild?.candidateSourceCache&&Gn(d,$.rebuild.candidateSourceCache),Yc(ee.snapshots)},finalizeCandidate:async()=>{await kn(oe)},emitCommitted:({candidate:$,published:ee})=>$i(ee,$.rebuild??{rebuiltRoutes:[],failedRoutes:[]}),rollbackCandidate:async({history:$,receipt:ee})=>{if(xe)throw new Error("history cursor was published before transaction finalization failed");if(ee){let me=await Ki(R,ee.snapshots);if(!me.ok)throw new Error(me.reason)}to(fe),Gn(d,ne),Zc(ve),$&&await l.discardPrepared?.($),await kn(oe)}});if(A.ok)return A.published;if(A.stage==="precheck"||A.stage==="build")try{await kn(oe)}catch($){let ee=await no(Be($));return{composition:F,requestId:f,kind:h.kind,target:h.target,ok:!1,resultVersion:K,error:{code:ee,message:"Unable to clear an uncommitted transaction journal."}}}if(A.recoveryRequired){let $=await no(A.reason);return{composition:F,requestId:f,kind:h.kind,target:h.target,ok:!1,resultVersion:K,affectedFiles:T,error:{code:$===L.RECOVERY_PERSIST_FAILED?$:L.ROLLBACK_FAILED,message:A.reason}}}return{composition:F,requestId:f,kind:h.kind,target:h.target,ok:!1,resultVersion:K,affectedFiles:T,error:{code:A.error instanceof Sn?L.ROUTE_REBUILD_FAILED:cl(A.stage),message:Be(A.error),...A.error instanceof Sn?{details:{failedRoutes:A.error.failedRoutes}}:{}}}}function ol(){return[...i.values()].map(f=>({composition:f.composition,key:f.key,routeId:f.routeId,state:{...f,dependencyFiles:new Set(f.dependencyFiles),fileVersions:new Map(f.fileVersions)}}))}function il(f,y){return f.find(E=>E.key===y)?.state.graph?.version??o.initialVersions.get(y)??0}function sl(f,y){let h=new Map(f.map(E=>[E.key,E]));for(let E of y)h.set(E.key,E);return[...h.values()]}function to(f){for(let y of i.values())N(y);for(let y of f){let h={...y.state,dependencyFiles:new Set(y.state.dependencyFiles),fileVersions:new Map(y.state.fileVersions)};i.set(y.key,h),re(h,h.dependencyFiles)}}async function Ji(f){let y=i.get(f);if(!y)throw new Error(`Composition not found: ${f}`);if(y.graph)return;let h=await n.readFile(y.entryFile);await q(f,h)}function qn(f,y){let h=i.get(o.resolveSelector(y).key)??null;return!h||!al(h,f)?null:h}function al(f,y){if(f.documentIndex?.entriesByKey.has(y)||f.graph?.elements.has(y))return!0;let h=Ve(y);return h&&h!==y?f.graph?.elements.has(h)===!0:!1}function Q(f,y,h,E){return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:H(f),error:{code:y,message:h,...E?{details:E}:{}}}}function cl(f){return f==="validate"?L.ROUTE_REBUILD_FAILED:f==="publish"?L.HISTORY_COMMIT_FAILED:L.WRITE_IO_ERROR}async function no(f){if(g=!0,!l.markRecoveryRequired)return L.RECOVERY_REQUIRED;try{return await l.markRecoveryRequired(f),L.RECOVERY_REQUIRED}catch{return L.RECOVERY_PERSIST_FAILED}}function Sg(f){let h=f.split(/[^a-zA-Z0-9]+/).filter(Boolean).map(E=>E.charAt(0).toUpperCase()+E.slice(1)).join("").replace(/^[^a-zA-Z_$]+/,"");return h?`Prefab${h}`:"GeneratedPrefab"}function ll(f){return f==="VERSION_STALE"?L.VERSION_STALE:f==="CROSS_PAGE_MOVE_UNSUPPORTED"?L.CROSS_PAGE_MOVE_UNSUPPORTED:L.UNSUPPORTED_OPERATION}async function ul(f){if(f.target.kind==="route"){let h=i.get(o.resolveSelector(f.target.composition).key)??null;return h?(h.graph||await Ji(h.key),h):Q(f,L.ROUTE_NOT_FOUND,"Composition not found for route target.")}if(f.target.kind==="page-unit"){let h=i.get(o.resolveSelector(f.target.composition).key)??null;return h?(h.graph||await Ji(h.key),h):Q(f,L.ROUTE_NOT_FOUND,"Composition not found for page-unit target.")}if(f.target.kind!=="node")return Q(f,L.UNSUPPORTED_OPERATION,`${f.kind} source target execution is not implemented yet.`);let y=i.get(o.resolveSelector(f.composition).key)??null;return y?(y.graph||await Ji(y.key),al(y,f.target.key)?y:Q(f,L.NODE_NOT_FOUND,`Target key not found: ${f.target.key}`)):Q(f,L.ROUTE_NOT_FOUND,"Composition not found for node target.")}return{get status(){return t},dispose(){t="disposed",a.clear(),i.clear(),s.clear(),d.clear(),p.clear()},registerComposition(f,y){let h=o.register({context:f,entryFile:y}),E=i.get(h.key);if(E?.entryFile===y)return;E&&N(E);let R=sm(h.context,y);i.set(h.key,R),re(R,R.dependencyFiles),r.emit({type:"graph-invalidated",composition:h.context})},unregisterComposition(f){let y=o.resolveSelector(f),h=i.get(y.key);h&&(N(h),i.delete(y.key),o.unregister(y.key),i.size===0&&(t="idle"),r.emit({type:"graph-invalidated",composition:y.context}))},getCompositionEntryFiles(){return[...i.values()].map(f=>f.entryFile)},getCompositionContext(f){return o.resolveSelector(f).context},async initializeComposition(f){let y=o.resolveSelector(f),h=i.get(y.key);if(!h)throw new Error(`Composition not registered: ${y.key}`);if(h.graph)t="ready";else{t="building";try{let E=await n.readFile(h.entryFile);await q(y.key,E),t="ready",r.emit({type:"graph-ready",composition:y.context,version:i.get(y.key)?.graph?.version??0})}catch(E){throw t="idle",r.emit({type:"graph-error",composition:y.context,message:Be(E)}),E}}},getDocument(f){let y=o.resolveSelector(f),h=i.get(y.key);if(!h)throw new Error(`Composition not registered: ${y.key}`);if(!h.document)throw new Error(`Composition not built: ${y.key}`);return h.document},async getHistoryStatus(){await C;let f=await l.getStatus?.();return f?{...f,recoveryRequired:g}:{canUndo:!1,canRedo:!1,undoDepth:0,redoDepth:0,recoveryRequired:g}},getObjectEditContext(f,y,h){let E=qn(f,y),R=Ve(f)??f;if(E?.graph&&E.topology&&E.capabilities&&E.detailProjections){let T=E.detailProjections.get(R);if(T){let F=E.graph.elements.get(R);if(!F)throw new Error(`Key not found: ${f}`);let D=lC(f,R,h),_=new Map;if(T.isRepeat&&D?.instanceIndex!==void 0)for(let fe of F.attributes??[])_.set(fe.name,Ja({file:F.sourceFile,source:d.get(F.sourceFile)??"",element:F,propertyName:fe.name,selectionRef:D,graph:E.graph,sources:d}));let V=cp({element:F,graph:E.graph,source:d.get(F.sourceFile),documentVersion:E.graph.version,selectionRef:h,isRepeat:T.isRepeat,propertyProvenance:T.propertyProvenances,repeatTargets:_}),K=Iu(R,E.graph,E.topology,E.capabilities,T.textSources,T.provenances,T.dynamicData,V);return f===R?K:BC(K,f,E.document??null,E.documentIndex?.entriesByKey)}}throw new Error(`Key not found: ${f}`)},getRenderDetail(f,y){let h=qn(f,y),E=Ve(f)??f;if(h?.graph&&h.topology&&h.capabilities&&h.detailProjections){let R=h.detailProjections.get(E);if(R){let T=vu(E,h.graph,h.topology,h.capabilities,R.textSources,R.writeTarget,R.provenances,R.conditional,R.componentSemantic,R.contentModel,R.mediaModel,R.styleSource,R.dynamicData);return f===E?T:LC(T,f,h.document??null,h.documentIndex?.entriesByKey)}}throw new Error(`Key not found: ${f}`)},getClassNameSource(f,y){let h=qn(f,y),E=Ve(f)??f;if(!h?.graph)throw new Error(`Key not found: ${f}`);let R=h.graph.elements.get(E);if(!R)throw new Error(`Key not found: ${f}`);let T=d.get(R.sourceFile);if(T===void 0)throw new Error(`Source not loaded: ${R.sourceFile}`);return Ls({key:E,route:{composition:h.composition,routeId:h.routeId,graph:h.graph,source:T}})},refreshSourceForKey:sg,async execute(f){if(await C,g)return Q(f,L.RECOVERY_REQUIRED,"The edit engine requires explicit recovery before accepting mutations.");if(f.kind==="source-edit")return ag(f);if(f.kind==="insert-page-resource")return cg(f);if(f.kind==="delete-page-source")return lg(f);let y=await ul(f);if("ok"in y)return y;await Qc(f);let h=await ul(f);if("ok"in h)return h;let E=h;if(f.target.kind==="page-unit"){let D=f;return f.kind==="insert-child"?ug(D,E):f.kind==="move-node"||f.kind==="remove-node"?dg(D,E):Q(f,L.UNSUPPORTED_OPERATION,"Only page-unit insert-child, move-node, and remove-node are currently supported by the page composition transaction.")}if(!E.graph||!E.topology||!E.capabilities)return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:H(f),error:{code:f.target.kind==="route"?L.ROUTE_NOT_FOUND:L.NODE_NOT_FOUND,message:f.target.kind==="route"?"Composition not ready for route target.":f.target.kind==="node"?`Target key not found: ${f.target.key}`:`${f.kind} source target execution is not implemented yet.`}};let R=IC(E,E.graph,E.capabilities,d,i),T=await new Zo(R).plan(f);if(!T.ok)return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:H(f),error:{code:Kr(T.errorCode),message:T.reason}};let F=T.plan;if(F.steps.length===0)return f.kind==="set-props"?{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!0,resultVersion:H(f),affectedFiles:[]}:{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:H(f),error:{code:L.PLAN_FAILED,message:"Planner could not generate a valid execution plan"}};m+=1;try{if(F.steps.some(_=>_.type==="invoke-external-adapter")){let _=await u.execute(F);if(!_.ok)return Q(f,Kr(_.errorCode),_.reason);let V={composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!0,resultVersion:Math.max(H(f),_.resultVersion),affectedFiles:_.affectedFiles,..._.selectionRef?{selectionRef:_.selectionRef}:{}};return $i(V,{rebuiltRoutes:[],failedRoutes:[]}),V}let D=await u.prepareRewritePlan(F);return D.ok?await Cn({request:f,filePlan:D.filePlan,...D.selectionRef?{selectionRef:D.selectionRef}:{}}):Q(f,Kr(D.errorCode),D.reason)}catch(D){return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:H(f),error:{code:L.INTERNAL_ERROR,message:Be(D)}}}finally{m-=1}},async undo(f){if(await C,g)return{composition:o.entries[0].context,requestId:"undo",kind:"update-text",target:{kind:"node",key:""},ok:!1,resultVersion:Se(o.entries[0].key),error:{code:L.RECOVERY_REQUIRED,message:"The edit engine requires explicit recovery before accepting undo."}};m+=1;try{return await rl("undo")}finally{m-=1}},async redo(f){if(await C,g)return{composition:o.entries[0].context,requestId:"redo",kind:"update-text",target:{kind:"node",key:""},ok:!1,resultVersion:Se(o.entries[0].key),error:{code:L.RECOVERY_REQUIRED,message:"The edit engine requires explicit recovery before accepting redo."}};m+=1;try{return await rl("redo")}finally{m-=1}},notifyFileChanged(f){Hc([f])},getAffectedCompositions(f){return tg(f)},subscribe(f){return r.subscribe(f)}}}function SC(e){return e instanceof Error&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR")}function EC(e,t,n){let r=new Map,o=new Map,i=(u,d,p)=>{let m=u.get(d)??new Set,g=m.size;return m.add(p),u.set(d,m),m.size!==g},s=(u,d)=>{if(!u.importedFrom)return!1;if(u.exportName==="default")return i(o,u.importedFrom,d);let p=i(r,`${u.importedFrom}#${u.tag}`,d);return u.exportName&&u.exportName!==u.tag&&(p=i(r,`${u.importedFrom}#${u.exportName}`,d)||p),p},a=u=>r.get(`${u.sourceFile}#${u.componentName}`)??o.get(u.sourceFile);for(let u of t.elements.values()){if(u.sourceFile!==n.entryFile||!u.importedFrom||!/^[A-Z]/.test(u.tag))continue;let d=n.placements.find(m=>m.members.some(g=>g.sourceRange!==null&&pc(u.sourceRange,g.sourceRange)));if(!d)continue;let p=d.placementUnitKey;s(u,p)}let c=!0;for(;c;){c=!1;for(let u of t.elements.values()){if(u.sourceFile===n.entryFile||!u.importedFrom||!/^[A-Z]/.test(u.tag))continue;let d=a(u);if(d)for(let p of d)c=s(u,p)||c}}let l=n.placements.find(u=>u.placementKey===n.container.placementKey&&u.relation==="append");for(let u of e.entries){let d=Ve(u.key)??u.key,p=t.elements.get(u.key)??t.elements.get(d);if(!p)continue;if(p.sourceFile===n.entryFile){if(n.container.sourceRange&&pc(p.sourceRange,n.container.sourceRange)&&l){u.pageCompositionUnitKey=l.placementUnitKey;continue}let b=n.placements.find(C=>C.members.some(I=>I.sourceRange!==null&&(pc(p.sourceRange,I.sourceRange)||vC(I.sourceRange,p.sourceRange))));if(b){u.pageCompositionUnitKey=b.placementUnitKey;continue}}let m=r.get(`${p.sourceFile}#${p.componentName}`);if(m){m.size===1&&(u.pageCompositionUnitKey=m.values().next().value);continue}let g=o.get(p.sourceFile);g?.size===1&&(u.pageCompositionUnitKey=g.values().next().value)}}function pc(e,t){return e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}function vC(e,t){return lm(e.startLine,e.startColumn,t.startLine,t.startColumn)<=0&&lm(e.endLine,e.endColumn,t.endLine,t.endColumn)>=0}function lm(e,t,n,r){return e!==n?e-n:t-r}function IC(e,t,n,r,o){let i=new Map,s=new Map,a=(u,d)=>{if(s.has(u))return;s.set(u,d);let p=t.elements.get(u);for(let m of p?.childKeys??[])a(m,d)};for(let u of t.regions)if(u.kind==="repeat-region")for(let d of u.childKeys)i.set(d,u.ownerKey),a(d,u.ownerKey);return{getNode(u){let d=c(u),p=t.elements.get(d.baseKey);return p?l(u,p):null},getChildNodes(u){let d=c(u),m=e.documentIndex?.entriesByKey.get(u)?.childKeys;if(m)return m.map(b=>{let C=Ve(b)??b,I=t.elements.get(C);return I?l(b,I):null}).filter(b=>b!==null);let g=t.elements.get(d.baseKey);return g?g.childKeys.map(b=>{let C=t.elements.get(b);return C?l(b,C):null}).filter(b=>b!==null):[]},getKnownSourceFiles(){return[...r.entries()].map(([u,d])=>({file:u,content:d}))},getRouteEntryFiles(){return[...o.values()].map(u=>u.entryFile)},getCapability(u){let d=c(u),p=n.get(d.baseKey);return p?{...p,key:u,constraints:p.constraints.map(m=>({...m})),...p.editModes?{editModes:{...p.editModes}}:{}}:{composition:e.composition,key:u,canUpdateText:!1,canRemove:!1,canInsertChild:!1,canMove:!1,constraints:[]}},getFileContent(u){return r.get(u)??""},getFileVersion(u){return Math.max(e.fileVersions.get(u)??0,t.version)},getRouteEntryFile(u){return e.routeId===u?e.entryFile:null},getComponentSemantic(u){let d=c(u);return e.detailProjections?.get(d.baseKey)?.componentSemantic??null},getClassNameSource(u){let d=c(u),p=t.elements.get(d.baseKey),m=p?r.get(p.sourceFile):void 0;return!p||m===void 0?null:Ls({key:d.baseKey,route:{composition:e.composition,routeId:e.routeId,graph:t,source:m}})},getEditableTextSegmentIndex(u){let d=c(u),m=e.detailProjections?.get(d.baseKey)?.textTargets.keys()?.next();return m&&!m.done?m.value:null},async getTextWriteTarget(u,d){let p=c(u);return fm(e.detailProjections?.get(p.baseKey)?.textTargets.get(d)??null,p.repeatIndex)},async getElementPropertyWriteTarget(u,d){let p=c(u);return fm(e.detailProjections?.get(p.baseKey)?.elementPropertyTargets.get(d)??null,p.repeatIndex)},getPropertyState(u,d,p){let m=c(u),g=t.elements.get(m.baseKey);if(!g)return null;let C=e.detailProjections?.get(m.baseKey)?.propertyProvenances.get(d);if(C)return C;let I=g.attributes?.find(w=>w.name===d);return I?I.source?{status:"blocked",owner:"generic",diagnostic:{code:"unsupported-property-source",message:`Property '${d}' has an unresolved value source`}}:{status:"direct",owner:"generic",attribute:I,target:{kind:"jsx-attribute",file:g.sourceFile,sourceRange:I.sourceRange}}:(g.attributeSpreads?.length??0)>0?{status:"blocked",owner:"generic",diagnostic:{code:"ambiguous-property-source",message:`A spread may provide or override property '${d}'`}}:{status:"missing",owner:"generic"}},getRepeatPropertyTarget(u,d,p){let m=c(u),g=t.elements.get(m.baseKey);if(!g)return{ok:!1,errorCode:"repeat-not-found",reason:`Node not found: ${u}`};let b=p?{...p,key:m.baseKey}:m.repeatIndex!==null?{key:m.baseKey,instanceIndex:m.repeatIndex}:void 0;return Ja({file:g.sourceFile,source:r.get(g.sourceFile)??"",element:g,propertyName:d,selectionRef:b,graph:t,sources:r})},getTextProvenance(u,d){let p=c(u);return e.detailProjections?.get(p.baseKey)?.provenances.get(d)??null}};function c(u){let d=Zk(u);return d?{baseKey:d.baseKey,repeatIndex:OC(e.document??null,u,d.baseKey,e.documentIndex)??FC(d)}:{baseKey:u,repeatIndex:null}}function l(u,d){let p=Ve(u)??u,m=e.documentIndex?.entriesByKey.get(u),g=e.detailProjections?.get(p);return{key:u,file:d.sourceFile,component:d.componentName,tag:d.tag,structuralPath:d.identity.structuralPath,sourceRange:d.sourceRange,parentKey:m?.parentKey??d.parentKey??void 0,isRepeatRegion:d.boundaryKind==="repeat-region"||s.has(p),isBoundary:!1,importedFrom:d.importedFrom,exportName:d.exportName,isRepeatItemRoot:i.has(p),repeatOwnerKey:i.get(p)??s.get(p),contentModel:g?.contentModel,attributes:d.attributes?.map(b=>({name:b.name,value:b.value,source:b.source?{expression:b.source.expression,base:b.source.base,path:b.source.path.map(C=>({...C}))}:null,resolvedValue:b.resolvedValue}))}}}var kC={"stale-version":L.VERSION_STALE,"capability-denied":L.CAPABILITY_REJECTED,"invalid-params":L.INVALID_PARAMS,"locator-miss":L.LOCATOR_FAILED,"route-not-found":L.ROUTE_NOT_FOUND,"unsupported-operation":L.UNSUPPORTED_OPERATION,"invalid-target":L.INVALID_TARGET,"ast-error":L.AST_PARSE_ERROR,"writeback-failed":L.WRITE_IO_ERROR,"rollback-failed":L.RECOVERY_REQUIRED,unknown:L.INTERNAL_ERROR};function Kr(e){return kC[e]}function Be(e){return e instanceof Error&&e.message?e.message:String(e)}function um(e){return/\.(?:[cm]?[jt]sx?|css|scss|sass|mdx|json)$/i.test(e)}function CC(e){let t=En(e);if(!eC.test(t))return[];let n=t.startsWith("src/app/")?"src/app":"app",r=t.slice(0,t.lastIndexOf("/")),o=[],i=r;for(;(i===n||i.startsWith(`${n}/`))&&(o.unshift(i),i!==n);)i=i.slice(0,i.lastIndexOf("/"));return o.flatMap(s=>tC.map(a=>`${s}/${a}`))}function RC(e){let n=En(e).startsWith("src/app/")?"src/app":"app";return[`${n}/globals.css`,`${n}/global.css`]}function wC(e){return mm(e,/\bimport\s+(?:[^'";]+?\s+from\s+)?["']([^"']+\.css(?:\?[^"']*)?)["']/g)}function NC(e){return mm(e,/@import\s+(?:url\(\s*)?["']([^"']+)["']/g)}function mm(e,t){let n=[];for(let r of e.matchAll(t)){let o=gm(r[1]??"");o&&n.push(o)}return n}function dm(e,t){let n=gm(t);return!n||n.startsWith("tailwindcss")||n.startsWith("http:")||n.startsWith("https:")?null:n.startsWith("@/")?En(`src/${n.slice(2)}`):n.startsWith("./")||n.startsWith("../")?En(`${PC(e)}/${n}`):n.startsWith("/")?En(n.slice(1)):mc(n)?En(n):null}function gm(e){return e.split(/[?#]/,1)[0]?.trim()??""}function mc(e){return/\.css$/i.test(e)}function PC(e){let t=En(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}function hm(e){return Array.from(new Set(e))}function En(e){let t=e.replace(/\\/g,"/").replace(/^\.\//,""),n=[];for(let r of t.split("/"))if(!(!r||r===".")){if(r===".."){n.pop();continue}n.push(r)}return n.join("/")}function AC(e){let t=1;for(let n of e?.textTargets.values()??[])n?.kind==="value-binding"&&n.sourceKind==="repeat-template"&&(t=Math.max(t,n.collectionIndexMap?.length??0,n.collectionPathMap?.length??0));return t}function TC(e,t){let n=t.elements.get(e);if(!n)return!1;for(let r of t.regions){if(r.kind!=="repeat-region")continue;let o=n;for(;o;){if(r.childKeys.includes(o.identity.key))return!0;o=o.parentKey?t.elements.get(o.parentKey):void 0}}return!1}function Ei(e){return e?.map(t=>({...t}))}function fm(e,t){if(t===null||e?.kind!=="value-binding"||e.sourceKind!=="repeat-template")return e;let n=e.collectionIndexMap?.[t]??t,r=Ei(e.collectionPathMap?.[t])??Ei(e.locator?.path);if(r)for(let o=r.length-1;o>=0;o-=1){let i=r[o];if(i.kind==="index"){i.index=n;break}}return{...e,path:Ei(e.path),locator:e.locator?{...e.locator,path:r}:e.locator,collectionIndexMap:e.collectionIndexMap?[...e.collectionIndexMap]:void 0,collectionPathMap:e.collectionPathMap?.map(o=>Ei(o)??[])}}function _C(e,t,n){let r=new Set;for(let m of t.regions)if(m.kind==="repeat-region")for(let g of m.childKeys)r.add(g);if(r.size===0)return e;let o=new Map(e.entries.map(m=>[m.key,m])),i=[],s=new Map,a=(m,g)=>Hk(m,g),c=(m,g,b)=>{let C=o.get(m);if(!C)return a(m,b);let I=a(m,b),w={...C,key:I,parentKey:g,childKeys:[]};return i.push(w),w.childKeys=C.childKeys.flatMap(P=>l(P,b,I)),I},l=(m,g,b)=>{if(!r.has(m))return[c(m,b,g)];let C=d(m,g),I=[];for(let w=0;w<C;w+=1)I.push(c(m,b,[...g,w]));return I},u=hm([...e.rootKeys,...e.entries.filter(m=>m.parentKey===null).map(m=>m.key)]);for(let m of u){if(!r.has(m)){c(m,null,[]);continue}let g=d(m,[]);for(let b=0;b<g;b+=1)c(m,null,[b])}return{...e,rootKeys:[...e.rootKeys],entries:i};function d(m,g){let b=new Set;for(let C of p(m)){let I=n.get(C);if(I){for(let w of[...I.textTargets.values(),...I.elementPropertyTargets.values()])if(!(w?.kind!=="value-binding"||w.sourceKind!=="repeat-template"))for(let P of MC(w))P.length<=g.length||DC(P,g)&&b.add(P[g.length])}}return b.size>0?b.size:AC(n.get(m))}function p(m){let g=s.get(m);if(g)return g;let b=[m],C=o.get(m);for(let I of C?.childKeys??[])b.push(...p(I));return s.set(m,b),b}}function FC(e){let t=e.parts.at(-1);return typeof t?.repeatIndex=="number"?t.repeatIndex:null}function OC(e,t,n,r){let o=r?.repeatOccurrenceIndexByKey.get(t);if(o!==void 0)return o;if(!e)return null;let i=0;for(let s of e.entries)if((Ve(s.key)??s.key)===n){if(s.key===t)return i;i+=1}return null}function MC(e){return e.collectionPathMap?.length?e.collectionPathMap.map(t=>t.filter(n=>n.kind==="index").map(n=>n.index)):e.collectionIndexMap?.length?e.collectionIndexMap.map(t=>[t]):[]}function DC(e,t){if(t.length>e.length)return!1;for(let n=0;n<t.length;n+=1)if(e[n]!==t[n])return!1;return!0}function LC(e,t,n,r){if(!n)return{...e,key:t};let o=r??new Map(n.entries.map(u=>[u.key,u])),i=o.get(t);if(!i)return{...e,key:t};let s=[],a=i.parentKey;for(;a;){let u=o.get(a);if(!u)break;s.push({key:u.key,tag:u.tag,label:u.label}),a=u.parentKey}s.reverse();let c=i.childKeys.map(u=>o.get(u)).filter(u=>u!==void 0).map(u=>({key:u.key,tag:u.tag,label:u.label})),l=i.parentKey===null?[]:(o.get(i.parentKey)?.childKeys??[]).filter(u=>u!==i.key).map(u=>o.get(u)).filter(u=>u!==void 0).map(u=>({key:u.key,tag:u.tag,label:u.label}));return{...e,key:i.key,ancestors:s,children:c,siblings:l}}function BC(e,t,n,r){if(!n)return{...e,key:t};let o=r??new Map(n.entries.map(c=>[c.key,c])),i=o.get(t);if(!i)return{...e,key:t};let s=[],a=i.parentKey;for(;a;){let c=o.get(a);if(!c)break;s.push({key:c.key,tag:c.tag,label:c.label}),a=c.parentKey}return s.reverse(),{...e,key:i.key,ancestors:s}}import bc from"node:path";import{TextDecoder as jC}from"node:util";import{SITE_EDIT_SOURCE_ALLOWED_APP_FILES as xm,SITE_EDIT_SOURCE_ALLOWED_DIRS as bm,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as Sm,SiteEditCompositionContextSchema as $C,SiteEditSourceFileResponseSchema as gc,SiteEditSourceLocationSchema as VC,SiteEditSourcePathSchema as Ii,SiteEditSourceTreeResponseSchema as UC,isSiteEditTextSourcePath as KC}from"@vcp-dev/contracts";var JC=[...Sm,...xm,...bm];function Sc(e){if(!e.composition)throw new Error("Composition unavailable for source access policy.");return $C.parse(e.composition)}var hc=2e3,yc=12,xc=24*1024*1024,ym=512*1024,XC=new Set(["image/avif","image/gif","image/jpeg","image/png","image/webp","image/x-icon"]),zC={".avif":"image/avif",".bin":"application/octet-stream",".eot":"application/vnd.ms-fontobject",".gif":"image/gif",".glb":"model/gltf-binary",".ico":"image/x-icon",".jpeg":"image/jpeg",".jpg":"image/jpeg",".mp3":"audio/mpeg",".mp4":"video/mp4",".pdf":"application/pdf",".png":"image/png",".svg":"image/svg+xml",".ttf":"font/ttf",".wasm":"application/wasm",".webm":"video/webm",".webp":"image/webp",".woff":"font/woff",".woff2":"font/woff2",".zip":"application/zip"},WC={".cjs":"javascript",".css":"css",".cts":"typescript",".html":"html",".js":"javascript",".jsx":"javascript",".json":"json",".md":"markdown",".mdx":"markdown",".mjs":"javascript",".mts":"typescript",".ts":"typescript",".tsx":"typescript",".txt":"plaintext",".yaml":"yaml",".yml":"yaml"},HC=new jC("utf-8",{fatal:!0});async function ki(e,t={}){let n=Sc(t),{files:r,truncated:o}=await nR(e,t),i=iR(r.map(s=>s.metadata));return UC.parse({composition:n,nodes:i,defaultPath:sR(r.map(s=>s.metadata)),totalFiles:r.length,...o?{truncated:o}:{}})}async function Ci(e,t,n={}){let r=Sc(n),o=Ii.parse(t.path),i=await ZC(e,o,n);if(!i)throw new Error(`Source file not found: ${o}`);if(Ec(o)){let a=Im(o),c=await QC(e,{path:o,sizeBytes:i.sizeBytes,mimeType:a});return gc.parse({composition:r,path:o,kind:"binary",language:null,sizeBytes:i.sizeBytes,mimeType:a,readonly:!0,...c})}let s=await GC(e,o);return s.ok?gc.parse({composition:r,path:o,kind:"text",language:km(o),sizeBytes:s.sizeBytes,contentHash:pe(s.content),readonly:!1,content:s.content}):gc.parse({composition:r,path:o,kind:"binary",language:null,sizeBytes:s.sizeBytes,mimeType:"application/octet-stream",readonly:!0,previewUnavailableReason:"unsupported-mime"})}async function GC(e,t){if(e.readFileBytes){let o=await e.readFileBytes(t),i=YC(o);return i===null?{ok:!1,sizeBytes:o.byteLength}:{ok:!0,content:i,sizeBytes:o.byteLength}}let n=await e.readFile(t),r=Buffer.byteLength(n,"utf8");return n.includes("\0")?{ok:!1,sizeBytes:r}:{ok:!0,content:n,sizeBytes:r}}function YC(e){if(e.includes(0))return null;try{return HC.decode(e)}catch{return null}}async function ZC(e,t,n){if(!eR(t,n))return null;let r=await qC(e,t);return r?{path:t,sizeBytes:r.sizeBytes}:null}async function qC(e,t){if(e.getFileInfo)return e.getFileInfo(t);if(e.listFiles){let o=Em(await e.listFiles({roots:[t],maxFiles:1,maxDepth:t.split("/").length})).files.find(i=>i.path===t);if(o)return o}if(!await e.exists(t))return null;if(e.readFileBytes){let r=await e.readFileBytes(t);return{path:t,sizeBytes:r.byteLength}}if(Ec(t))return{path:t,sizeBytes:0};let n=await e.readFile(t);return{path:t,sizeBytes:Buffer.byteLength(n,"utf8")}}async function QC(e,t){if(!XC.has(t.mimeType))return{previewUnavailableReason:"unsupported-mime"};if(t.sizeBytes>ym)return{previewUnavailableReason:"too-large"};if(!e.readFileBytes)return{previewUnavailableReason:"bytes-unavailable"};let n=await e.readFileBytes(t.path);return n.byteLength>ym?{previewUnavailableReason:"too-large"}:{contentBase64:Buffer.from(n).toString("base64")}}function eR(e,t){return Sm.some(n=>n===e)||xm.some(n=>n===e)||bm.some(n=>e===n||e.startsWith(`${n}/`))?!0:!e.startsWith("app/")&&!e.startsWith("src/app/")?!1:(t.routeEntryFiles??[]).some(n=>{let r=Ii.safeParse(n);return r.success&&r.data===e})}function Ri(e,t){if(!t.sourceLocator)throw new Error(`Source location not available for key: ${e.key}`);return VC.parse({key:e.key,composition:t.composition,sourceFile:t.sourceLocator.sourceFile,componentName:t.sourceLocator.componentName,openingElementRange:{startLine:t.sourceLocator.openingElementRange.startLine,startColumn:t.sourceLocator.openingElementRange.startColumn,endLine:t.sourceLocator.openingElementRange.endLine,endColumn:t.sourceLocator.openingElementRange.endColumn},structuralPath:t.sourceLocator.structuralPath,textPreview:t.sourceLocator.textPreview})}function Em(e){return Array.isArray(e)?{files:e}:e}function tR(e){return["max-files","max-depth","max-total-bytes"].filter(n=>e.includes(n))}async function nR(e,t){if(!e.listFiles)throw new Error("Source file listing is unavailable.");let n=Em(await e.listFiles({roots:rR(t),maxFiles:hc+1,maxDepth:yc,maxTotalBytes:xc+1})),r=new Map,o=new Set(n.truncated?.reasons),i=0;for(let a of[...n.files].sort((c,l)=>c.path.localeCompare(l.path))){let c=Ii.safeParse(a.path);if(!c.success)continue;let l=c.data;if(l.split("/").length>yc){o.add("max-depth");continue}if(r.size>=hc){o.add("max-files");break}if(i+a.sizeBytes>xc){o.add("max-total-bytes");break}r.set(l,{path:l,sizeBytes:a.sizeBytes,metadata:oR(l,a.sizeBytes,Sc(t))}),i+=a.sizeBytes}return{files:[...r.values()].sort((a,c)=>a.path.localeCompare(c.path)),...o.size>0?{truncated:{reasons:tR([...o]),maxFiles:hc,maxDepth:yc,maxTotalBytes:xc}}:{}}}function rR(e){let t=new Set(JC);for(let n of e.routeEntryFiles??[]){let r=Ii.safeParse(n);r.success&&(r.data.startsWith("app/")||r.data.startsWith("src/app/"))&&t.add(r.data)}return[...t]}function oR(e,t,n){return Ec(e)?{composition:n,path:e,kind:"binary",language:null,sizeBytes:t,mimeType:Im(e),readonly:!0}:{composition:n,path:e,kind:"text",language:km(e),sizeBytes:t,readonly:!1}}function iR(e){let t=[];for(let n of e){let r=n.path.split("/"),o=t,i="";for(let[s,a]of r.entries()){i=i?`${i}/${a}`:a;let c=s===r.length-1,l=o.find(u=>u.name===a);if(l||(l=c?{kind:"file",name:a,path:i,file:n}:{kind:"directory",name:a,path:i,children:[]},o.push(l)),c){if(l.kind!=="file")throw new Error(`Source tree path collision: ${n.path}`);l.file=n}else{if(l.kind!=="directory")throw new Error(`Source tree path collision: ${n.path}`);o=l.children}}}return vm(t)}function vm(e){return e.map(t=>t.kind==="directory"?{...t,children:vm(t.children)}:t).sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}function sR(e){let t=e.find(r=>r.path.toLowerCase()==="design.md");if(t)return t.path;let n=e.find(r=>r.path==="app/page.tsx");return n?n.path:e.find(r=>r.kind==="text")?.path??e.at(0)?.path}function Ec(e){return!KC(e)}function Im(e){let t=bc.posix.extname(e).toLowerCase();return!t&&bc.posix.basename(e).toLowerCase()==="favicon"?"image/x-icon":zC[t]??"application/octet-stream"}function km(e){let t=bc.posix.extname(e).toLowerCase();return WC[t]??"plaintext"}var wi=class{constructor(t){this.options=t,this.fileSystem=new pr(t.files),this.engine=this.createEngine(this.fileSystem)}get status(){return this.engine.status}initializeComposition(t){return this.engine.initializeComposition(t)}getDocument(t){return so(this.engine.getDocument(t),{siteId:this.options.siteId,snapshotId:this.options.snapshotId})}getInternalDocument(t){return this.engine.getDocument(t)}getStyleContext(t){return this.engine.getDocument(t).styleContext??null}getObjectEditContext(t,n,r){return ao(r?this.engine.getObjectEditContext(t,n,r):this.engine.getObjectEditContext(t,n))}getClassNameSource(t,n){return this.engine.getClassNameSource(t,n)}getSourceTree(t){return ki(this.fileSystem,{composition:this.engine.getCompositionContext(t),routeEntryFiles:this.options.compositions.map(n=>n.entryFile)})}getSourceFile(t){return Ci(this.fileSystem,t,{composition:this.engine.getCompositionContext(t.composition),routeEntryFiles:this.options.compositions.map(n=>n.entryFile)})}resolveSourceLocation(t){return Ri(t,this.engine.getRenderDetail(t.key,t.composition))}async planOperation(t){let n=cR.safeParse(t);if(!n.success)return{result:io(t,n.error.issues.map(i=>i.message))};let r=new pr(this.options.files),o=this.createEngine(r,{emitEvents:!1});try{let i=await o.execute(n.data);if(!i.ok)return{result:{ok:!1,composition:i.composition,error:{code:i.error?.code??"INTERNAL_ERROR",message:i.error?.message??"Operation failed"},data:{requestId:i.requestId,kind:i.kind,target:i.target,resultVersion:i.resultVersion}}};let s={ok:!0,composition:i.composition,data:nn(i)},a=r.getChangedFiles();if(a.length===0)return{result:s};let c=lR.parse({siteId:t.siteId,baseSnapshotId:t.baseSnapshotId,operationId:t.id,reason:`site-edit:${t.kind}`,patches:a.map(l=>uR(l,t.kind==="source-edit")),changedCompositions:o.getAffectedCompositions(a.map(l=>l.path)),diagnostics:[]});return this.options.onEvent?.({type:"site-edit.operation.planned",siteId:t.siteId,operationId:t.id,baseSnapshotId:t.baseSnapshotId,changedFiles:c.patches.map(l=>l.path),composition:i.composition,at:new Date().toISOString()}),{result:s,patchPlan:c}}finally{o.dispose()}}dispose(){this.engine.dispose()}createEngine(t,n={}){let r=n.emitEvents??!0;return Jr({projectRoot:"/snapshot",fileSystem:t,compositions:this.options.compositions,onEvent:r&&this.options.onEvent?o=>{let i=co(o,{siteId:this.options.siteId,snapshotId:this.options.snapshotId});i&&this.options.onEvent?.(i)}:void 0,dev:this.options.dev,...this.options.historyStore?{historyStore:this.options.historyStore}:{},...this.options.tenantId?{tenantId:this.options.tenantId}:{},siteId:this.options.siteId,snapshotId:this.options.snapshotId,...this.options.initialDocumentVersions?{initialDocumentVersions:this.options.initialDocumentVersions}:{}})}};function uR(e,t){return e.after===void 0?{path:e.path,operation:"delete",...t||e.before===void 0?{}:{expectedHash:pe(e.before)}}:{path:e.path,operation:e.before===void 0?"create":"update",...t||e.before===void 0?{}:{expectedHash:pe(e.before)},fullContent:e.after}}function dR(e){return new wi(e)}import{SiteEditOperationRequestSchema as mR}from"@vcp-dev/contracts";import ft from"node:fs/promises";import je from"node:path";import{SITE_EDIT_SOURCE_ALLOWED_DIRS as fR,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as pR}from"@vcp-dev/contracts";var Ni=class{constructor(t){this.options=t,this.fileSystem=this.createFileSystem(),this.engine=Jr({...t,fileSystem:this.fileSystem})}get status(){return this.engine.status}registerComposition(t,n){this.engine.registerComposition(t,n)}unregisterComposition(t){this.engine.unregisterComposition(t)}getDocument(t){return this.engine.getDocument(t)}getAffectedCompositions(t){return this.engine.getAffectedCompositions(t)}getCompositionContext(t){return this.engine.getCompositionContext(t)}initializeComposition(t){return this.engine.initializeComposition(t)}getHistoryStatus(){return this.engine.getHistoryStatus()}getObjectEditContext(t,n,r){return r?this.engine.getObjectEditContext(t,n,r):this.engine.getObjectEditContext(t,n)}getRenderDetail(t,n){return this.engine.getRenderDetail(t,n)}getClassNameSource(t,n){return this.engine.getClassNameSource(t,n)}getSourceTree(t){return ki(this.fileSystem,{composition:this.engine.getCompositionContext(t),routeEntryFiles:this.engine.getCompositionEntryFiles()})}getSourceFile(t){return Ci(this.fileSystem,t,{composition:this.engine.getCompositionContext(t.composition),routeEntryFiles:this.engine.getCompositionEntryFiles()})}resolveSourceLocation(t){return Ri(t,this.engine.getRenderDetail(t.key,t.composition))}refreshSourceForKey(t,n){return this.engine.refreshSourceForKey(t,n)}execute(t){return this.engine.execute(t)}undo(t){return this.engine.undo(t)}redo(t){return this.engine.redo(t)}notifyFileChanged(t){this.engine.notifyFileChanged(t)}subscribe(t){return this.engine.subscribe(t)}dispose(){this.engine.dispose()}createFileSystem(){if(this.options.fileSystem)return this.options.fileSystem;let t=new Map,{projectRoot:n}=this.options;return{async readFile(r){return ft.readFile(je.join(n,r),"utf8")},async readFileBytes(r){return ft.readFile(je.join(n,r))},async getFileInfo(r){let o=je.join(n,...r.split("/"));try{let i=await ft.lstat(o);return!i.isFile()||i.isSymbolicLink()?null:{path:r,sizeBytes:i.size}}catch{return null}},async writeFile(r,o){await ci(je.join(n,r),o)},async createExclusive(r,o){let i=je.join(n,r);await ft.mkdir(je.dirname(i),{recursive:!0});let s=await ft.open(i,"wx");try{await s.writeFile(o,"utf8")}catch(a){throw await s.close(),await ft.rm(i,{force:!0}),a}await s.close()},async deleteFile(r){await ft.rm(je.join(n,r),{force:!0});let o=r.replace(/\\/g,"/"),i=["components/site/generated","src/components/site/generated"].find(c=>o.startsWith(`${c}/`));if(!i)return;let s=je.join(n,i),a=je.dirname(je.join(n,o));for(;a!==s&&a.startsWith(`${s}${je.sep}`);){try{await ft.rmdir(a)}catch(c){if(c instanceof Error&&"code"in c&&c.code==="ENOENT"){a=je.dirname(a);continue}break}a=je.dirname(a)}},async exists(r){try{return await ft.access(je.join(n,r)),!0}catch{return!1}},async listFiles(r={}){let o=r.roots??[...pR,...fR],i=[],s=new Set,a=new Set,c=0;for(let d of o)await u(d,i,1);let l=i.sort((d,p)=>d.path.localeCompare(p.path));return a.size>0?{files:l,truncated:{reasons:[...a]}}:{files:l};async function u(d,p,m){if(r.maxDepth!==void 0&&m>r.maxDepth){a.add("max-depth");return}let g=je.join(n,...d.split("/")),b;try{b=await ft.lstat(g)}catch{return}if(b.isSymbolicLink())return;if(b.isFile()){let I=b.ino>0?`${String(b.dev)}:${String(b.ino)}`:null;if(I&&s.has(I))return;if(r.maxFiles!==void 0&&p.length>=r.maxFiles){a.add("max-files");return}if(r.maxTotalBytes!==void 0&&c+b.size>r.maxTotalBytes){a.add("max-total-bytes");return}I&&s.add(I),p.push({path:d,sizeBytes:b.size}),c+=b.size;return}if(!b.isDirectory())return;if(r.maxFiles!==void 0&&p.length>=r.maxFiles){a.add("max-files");return}let C=await ft.readdir(g,{withFileTypes:!0});for(let I of C)I.isSymbolicLink()||await u(`${d}/${I.name}`,p,m+1)}},getVersion(r){return t.get(r)??1},bumpVersion(r){let o=(t.get(r)??1)+1;return t.set(r,o),o}}}};function vc(e){return new Ni(e)}var Pi=class{constructor(t){this.options=t,this.listeners=new Set,this.engine=vc({projectRoot:t.projectRoot,fileSystem:t.fileSystem,compositions:t.compositions,onEvent:n=>{let r=co(n,{siteId:t.siteId,snapshotId:t.snapshotId});if(r){t.onEvent?.(r);for(let o of this.listeners)o(r)}},dev:t.dev,...t.historyStore?{historyStore:t.historyStore}:{},...t.tenantId?{tenantId:t.tenantId}:{},...t.initialDocumentVersions!==void 0?{initialDocumentVersions:t.initialDocumentVersions}:{},siteId:t.siteId,snapshotId:t.snapshotId})}get status(){return this.engine.status}initializeComposition(t){return this.engine.initializeComposition(t)}registerComposition(t,n){this.engine.registerComposition(t,n)}unregisterComposition(t){this.engine.unregisterComposition(t)}getDocument(t){return{ok:!0,composition:this.engine.getCompositionContext(t),data:so(this.engine.getDocument(t),{siteId:this.options.siteId,snapshotId:this.options.snapshotId})}}getInternalDocument(t){return this.engine.getDocument(t)}getStyleContext(t){return{ok:!0,composition:this.engine.getCompositionContext(t),data:this.engine.getDocument(t).styleContext??null}}async getHistoryStatus(){return{ok:!0,composition:this.options.compositions[0].context,data:await this.engine.getHistoryStatus()}}getObjectEditContext(t,n,r){return{ok:!0,composition:this.engine.getCompositionContext(n),data:ao(r?this.engine.getObjectEditContext(t,n,r):this.engine.getObjectEditContext(t,n))}}getClassNameSource(t,n){return{ok:!0,composition:this.engine.getCompositionContext(n),data:this.engine.getClassNameSource(t,n)}}async getSourceTree(t){return{ok:!0,composition:this.engine.getCompositionContext(t),data:await this.engine.getSourceTree(t)}}async getSourceFile(t){return{ok:!0,composition:this.engine.getCompositionContext(t.composition),data:await this.engine.getSourceFile(t)}}resolveSourceLocation(t){return{ok:!0,composition:this.engine.getCompositionContext(t.composition),data:this.engine.resolveSourceLocation(t)}}refreshSourceForKey(t,n){return this.engine.refreshSourceForKey(t,n)}async executeOperation(t,n){let r=n===void 0||t.mutationContext!==void 0?t:{...t,mutationContext:n},o=mR.safeParse(r);if(!o.success)return io(t,o.error.issues.map(s=>s.message));let i=await this.engine.execute(o.data);if(!i.ok){let s=i.error;if(!s)throw new Error("executeOperation failed without an error payload");return{ok:!1,composition:i.composition,error:{code:s.code,message:s.message},data:{requestId:i.requestId,kind:i.kind,composition:i.composition,target:i.target,resultVersion:i.resultVersion,...i.affectedFiles?.length?{affectedFiles:i.affectedFiles}:{}}}}return{ok:!0,composition:i.composition,data:nn(i)}}async undo(t){let n=await this.engine.undo();if(!n.ok){let r=n.error;if(!r)throw new Error("undo failed without an error payload");return{ok:!1,composition:n.composition,error:{code:r.code,message:r.message},data:{requestId:n.requestId,kind:n.kind,composition:n.composition,target:n.target,resultVersion:n.resultVersion}}}return{ok:!0,composition:n.composition,data:nn(n)}}async redo(t){let n=await this.engine.redo();if(!n.ok){let r=n.error;if(!r)throw new Error("redo failed without an error payload");return{ok:!1,composition:n.composition,error:{code:r.code,message:r.message},data:{requestId:n.requestId,kind:n.kind,composition:n.composition,target:n.target,resultVersion:n.resultVersion}}}return{ok:!0,composition:n.composition,data:nn(n)}}notifyFileChanged(t){this.engine.notifyFileChanged(t)}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}dispose(){this.listeners.clear(),this.engine.dispose()}};function gR(e){return new Pi(e)}import{createHash as hR,randomUUID as Oc}from"node:crypto";import Ee from"node:fs/promises";import ke from"node:path";var nt=1,kc=1,yR=2,xR="index.json",bR="recovery.json",SR="transaction-journal.json",ER="document-version.json",Ti={maxEntries:100,maxSessionBytes:512*1024*1024,maxEntryBytes:128*1024*1024},X={INVALID_ROOT:"INVALID_ROOT",INVALID_PATH:"INVALID_PATH",INVALID_SCHEMA:"INVALID_SCHEMA",INVALID_JSON:"INVALID_JSON",INDEX_CORRUPT:"INDEX_CORRUPT",ENTRY_CORRUPT:"ENTRY_CORRUPT",BLOB_CORRUPT:"BLOB_CORRUPT",RECOVERY_PENDING:"RECOVERY_PENDING",CAPACITY_EXCEEDED:"CAPACITY_EXCEEDED",NOT_FOUND:"NOT_FOUND"},W=class extends Error{constructor(t,n,r){super(n),this.name="FileHistoryStoreError",this.code=t,r?.cause!==void 0&&(this.cause=r.cause)}};async function Om(e,t={}){let n=MR(e),r=BR(t.limits),o=Ic(n),i=DR(n),s=await Ue(i),a=await Ue(o)||s;a||(await wR(n),await NR(n)),a||await jR(n);let c=await We(n),l=new Set(a?(await Di(n)).map(d=>d.stageId):[]);a||await Xr(n,c.entryIds);let u=async()=>{if(await Ue(o)||s)throw new W(X.RECOVERY_PENDING,"history store requires explicit recovery before accepting writes")};return{rootDir:n,recoveryRequired:a,async readDocumentVersion(){return _m(n)},async writeDocumentVersion(d){if(await u(),!Number.isInteger(d)||d<0)throw new W(X.INVALID_SCHEMA,"document version must be a non-negative integer");let p=await _m(n);await zr(Vm(n),{schemaVersion:1,version:Math.max(p,d)})},async stageAppend(d,p={}){await u();let m=await Rm(d,r),g={schemaVersion:kc,stageId:Oc(),entryId:m.entryId,blobIds:m.blobs.map(b=>b.digest)};try{await wm(n,m),await kR(n,g,p.durableManifest!==!1)}catch(b){try{await Pm(n,g)}catch(C){throw new W(X.INDEX_CORRUPT,"staged history cleanup failed after preparation error",{cause:C})}throw b}return{stageId:g.stageId,entryId:g.entryId,blobIds:g.blobIds}},async discardStage(d){await u(),Nc(d);let p=await Rc(n,d);p&&await Pm(n,p)},async previewStagedAppend(d,p){return await u(),(await Cm(n,r,d,p)).transition},async previewCursor(d,p){await u();let m=await We(n);return Pc(m,p),Cc(d,m.entryIds.length),Mm(m,m.entryIds,d)},async publishStagedAppend(d,p,m){if(await u(),_i(d,"entryId"),m){Nc(m);let b=await Rc(n,m);if(!b||b.entryId!==d)throw new W(X.INVALID_SCHEMA,"history stage does not match the published entry")}let g=await Cm(n,r,d,p);return Tm({rootDir:n,previousDigest:g.current.digest,entryIds:g.entryIds,cursor:g.cursor,afterWrite:async()=>{m?await Fi(n,m):await RR(n,d),await Xr(n,g.entryIds)}})},async append(d){await u();let p=await We(n),m=await Rm(d,r),g=[...p.entryIds];p.cursor<g.length-1&&g.splice(p.cursor+1),g.push(m.entryId);try{await wm(n,m);let b=await Dm(n,g,r);return await Dc(n,b.entryIds,b.cursor),await Xr(n,b.entryIds),We(n)}catch(b){throw await Xr(n,p.entryIds),b}},async readEntry(d){return _i(d,"entryId"),Hr(n,d)},async readBlob(d){_i(d,"blobId");let p=await Jc(n,d),m=await Qt(p,X.NOT_FOUND,"blob");return Lc(m,d,p),m},async readIndex(){return We(n)},async readStatus(){let d=await We(n);return{canUndo:d.undoIds.length>0,canRedo:d.redoIds.length>0,undoDepth:d.undoIds.length,redoDepth:d.redoIds.length,cursor:d.cursor,recoveryRequired:await Ue(o)||await Ue(i)}},async readUndoRedoIds(){let d=await We(n);return{undoIds:d.undoIds,redoIds:d.redoIds,currentId:d.currentId}},async setCursor(d,p){await u();let m=await We(n);return Pc(m,p),Cc(d,m.entryIds.length),Tm({rootDir:n,previousDigest:m.digest,entryIds:m.entryIds,cursor:d})},async markRecoveryRequired(d){await Ue(o)||await zr(Ic(n),{schemaVersion:nt,reason:LR(d),createdAt:new Date().toISOString()})},async clearRecoveryRequired(){await Ee.rm(Ic(n),{force:!0})},async readTransactionJournal(){return await Ue(i)?Ai(i):null},async writeTransactionJournal(d){await u(),Um(d);try{await zr(i,d)}catch(m){let g=await Ai(i).catch(()=>null);if(g&&Buffer.from(He(g)).equals(Buffer.from(He(d))))return;throw g?new W(X.INDEX_CORRUPT,"transaction journal publish outcome is ambiguous",{cause:m}):m}let p=await Ai(i);if(!Buffer.from(He(p)).equals(Buffer.from(He(d))))throw new W(X.INDEX_CORRUPT,"transaction journal publish outcome is ambiguous")},async clearTransactionJournal(d){let p=await Ue(i)?await Ai(i):null;if(p&&p.transactionId!==d)throw new W(X.INVALID_SCHEMA,"transaction journal changed concurrently");try{await Ee.rm(i,{force:!0})}catch(m){if(!await Ue(i))return;throw m}if(await Ue(i))throw new W(X.INDEX_CORRUPT,"transaction journal clear outcome is ambiguous");s=!1},async cleanupTmp(){await u();for(let p of l)await Fi(n,p),l.delete(p);await PR(n);let d=await We(n);await Xr(n,d.entryIds)}}}async function Cm(e,t,n,r){_i(n,"entryId");let o=await We(e);Pc(o,r);let i=await Hr(e,n),s=[...o.entryIds];o.cursor<s.length-1&&s.splice(o.cursor+1),s.push(i.id);let a=await Dm(e,s,t);return{current:o,entryIds:a.entryIds,cursor:a.cursor,transition:Mm(o,a.entryIds,a.cursor)}}function Mm(e,t,n){return Cc(n,t.length),{expectedIndexDigest:e.digest,publishedIndexDigest:vR(t,n),publishedCursor:n,publishedCurrentId:t[n]??null}}function vR(e,t){return en(He({schemaVersion:nt,entryIds:e,cursor:t}))}function Cc(e,t){if(!Number.isInteger(e)||e<-1||e>=t)throw new W(X.INVALID_SCHEMA,`history cursor is out of bounds: ${e}`)}function IR(e){if(!pt(e))return!1;let t=e.publishedCursor,n=e.publishedCurrentId;return!Ge(e.expectedIndexDigest)||!Ge(e.publishedIndexDigest)||!Number.isInteger(t)||t<-1||n!==null&&!Ge(n)?!1:t===-1?n===null:Ge(n)}async function Rm(e,t){if(!e.kind.trim())throw new W(X.INVALID_JSON,"history entry kind must not be empty");let n=[],r=[];for(let c of e.blobs??[]){if(!c.name.trim())throw new W(X.INVALID_JSON,"history blob name must not be empty");let l=OR(c.data),u=en(l);n.push({name:c.name,bytes:l,digest:u,sizeBytes:l.byteLength}),r.push({name:c.name,digest:u,sizeBytes:l.byteLength})}let o={schemaVersion:nt,kind:e.kind,manifest:e.manifest,blobs:r},i=He({...o}),s=en(i),a=i.byteLength+n.reduce((c,l)=>c+l.sizeBytes,0);if(a>t.maxEntryBytes)throw new W(X.CAPACITY_EXCEEDED,`history entry exceeds maxEntryBytes (${a} > ${t.maxEntryBytes})`);return{entryBody:o,entryId:s,blobs:n}}async function wm(e,t){let n=$c(e,t.entryId),r={id:t.entryId,...t.entryBody},o=[...t.blobs.map(a=>Nm(Vc(e,a.digest),a.bytes,{kind:"blob",digest:a.digest},Kc(e,a.digest))),Nm(n,He(r),{kind:"entry",digest:t.entryId},Uc(e,t.entryId))],s=(await Promise.allSettled(o)).find(a=>a.status==="rejected");if(s)throw s.reason}async function Nm(e,t,n,r){let o=await _c(e)??(r?await _c(r):null);if(o!==null){if(Buffer.compare(o,t)!==0)throw new W(n.kind==="blob"?X.BLOB_CORRUPT:X.ENTRY_CORRUPT,`${n.kind} content mismatch for ${n.digest}`);return}await jm(e,t)}async function Dm(e,t,n){let r=[...t],o=r.length-1;for(;;){if((await Bm(e,r)).totalBytes<=n.maxSessionBytes&&r.length<=n.maxEntries)return{entryIds:r,cursor:o};if(o<=0||r.length===0)throw new W(X.CAPACITY_EXCEEDED,"history store exceeds capacity limits and the current entry cannot be trimmed");r.shift(),o-=1}}async function kR(e,t,n){Mc(t);let r=jc(e,t.stageId);if(n){await zr(r,t);return}await FR(r,t)}async function Rc(e,t){let n=await _c(jc(e,t));if(n===null)return null;let r=Gr(Buffer.from(n).toString("utf8"),`history stage ${t}`),o=Mc(r);if(o.stageId!==t)throw new W(X.INVALID_SCHEMA,`history stage id mismatch: ${t}`);return o}async function Di(e){let t=[];for(let n of await Mi(Bc(e))){if(!n.endsWith(".json"))continue;let r=n.slice(0,-5);Nc(r);let o=await Rc(e,r);o&&t.push(o)}return t}async function Pm(e,t){Mc(t);let n=await We(e),r=(await Di(e)).filter(s=>s.stageId!==t.stageId),o=new Set(n.entryIds),i=new Set;for(let s of n.entryIds){let a=await Hr(e,s);for(let c of a.blobs)i.add(c.digest)}for(let s of r){o.add(s.entryId);for(let a of s.blobIds)i.add(a)}o.has(t.entryId)||await Am($c(e,t.entryId),Uc(e,t.entryId));for(let s of t.blobIds)i.has(s)||await Am(Vc(e,s),Kc(e,s));await Fi(e,t.stageId),await Fc(Yr(e)),await Fc(Zr(e))}async function Fi(e,t){await wc(jc(e,t)),await CR(e)}async function CR(e){try{await Ee.rmdir(Bc(e))}catch(t){if(qr(t)||pt(t)&&t.code==="ENOTEMPTY")return;throw t}}async function RR(e,t){for(let n of await Di(e))n.entryId===t&&await Fi(e,n.stageId)}async function wc(e){if(await Ee.rm(e,{force:!0}),await Ue(e))throw new W(X.INDEX_CORRUPT,`unable to remove staged history object: ${e}`)}async function Am(e,t){await wc(e),await wc(t)}function Mc(e){if(!pt(e)||e.schemaVersion!==kc||typeof e.stageId!="string"||!Lm(e.stageId)||!Ge(e.entryId))throw new W(X.INVALID_SCHEMA,"history stage schema is invalid");let t=$m(e.blobIds,"history stage blobIds");return{schemaVersion:kc,stageId:e.stageId,entryId:e.entryId,blobIds:t}}function Nc(e){if(!Lm(e))throw new W(X.INVALID_PATH,"history stageId must be a UUID")}function Lm(e){return typeof e=="string"&&/^[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/iu.test(e)}async function Xr(e,t){let n=new Set(t),r=new Set;for(let c of t){let l=await Hr(e,c);for(let u of l.blobs)r.add(u.digest)}for(let c of await Di(e)){n.add(c.entryId);for(let l of c.blobIds)r.add(l)}let o=Yr(e),i=await Mi(o);for(let c of i){if(!c.endsWith(".json"))continue;let l=Fm(c.slice(0,-5));l&&!n.has(l)&&await Oi(ke.join(o,c))}let s=Zr(e),a=await Mi(s);for(let c of a){let l=Fm(c);l&&!r.has(l)&&await Oi(ke.join(s,c))}}async function We(e){let t=Li(e),n=await Qt(t,X.NOT_FOUND,"index"),r=Gr(Buffer.from(n).toString("utf8"),"index"),o=AR(r),i=[...o.entryIds],{totalBytes:s}=await Bm(e,i),a=i.slice(0,o.cursor+1).reverse(),c=i.slice(o.cursor+1);return{schemaVersion:nt,digest:o.digest,entryIds:i,cursor:o.cursor,currentId:i[o.cursor]??null,undoIds:a,redoIds:c,totalBytes:s}}async function Bm(e,t){let n=0,r=new Set,o=Li(e),i=await Qt(o,X.NOT_FOUND,"index");n+=i.byteLength;for(let s of t){let a=await Hr(e,s),c=await Km(e,s),l=await Qt(c,X.NOT_FOUND,"entry");n+=l.byteLength;for(let u of a.blobs){if(r.has(u.digest))continue;r.add(u.digest);let d=await Jc(e,u.digest),p=await Qt(d,X.NOT_FOUND,"blob");Lc(p,u.digest,d),n+=p.byteLength}}return{totalBytes:n}}async function Hr(e,t){let n=await Km(e,t),r=await Qt(n,X.NOT_FOUND,"entry"),o=Gr(Buffer.from(r).toString("utf8"),`entry ${t}`),i=TR(o);if(i.id!==t)throw new W(X.ENTRY_CORRUPT,`entry id mismatch for ${t}`);if(en(He({schemaVersion:i.schemaVersion,kind:i.kind,manifest:i.manifest,blobs:i.blobs}))!==t)throw new W(X.ENTRY_CORRUPT,`entry hash mismatch for ${t}`);for(let a of i.blobs){let c=await Jc(e,a.digest),l=await Qt(c,X.NOT_FOUND,"blob");Lc(l,a.digest,c)}return i}async function Dc(e,t,n){let r={schemaVersion:nt,digest:en(He({schemaVersion:nt,entryIds:t,cursor:n})),entryIds:t,cursor:n};await zr(Li(e),r)}function Pc(e,t){if(t!==void 0&&e.digest!==t)throw new W(X.INVALID_SCHEMA,`history index changed concurrently (expected ${t}, current ${e.digest})`)}async function Tm(e){let t=en(He({schemaVersion:nt,entryIds:e.entryIds,cursor:e.cursor}));try{return await Dc(e.rootDir,e.entryIds,e.cursor),await e.afterWrite?.(),await We(e.rootDir)}catch(n){let r=await We(e.rootDir).catch(()=>null);if(r?.digest===t)return r;throw r?.digest===e.previousDigest?n:new W(X.INDEX_CORRUPT,"history index publish outcome is ambiguous",{cause:n})}}async function wR(e){await Ee.mkdir(e,{recursive:!0}),await Ee.mkdir(Yr(e),{recursive:!0}),await Ee.mkdir(Zr(e),{recursive:!0}),await Ee.mkdir(Wr(e),{recursive:!0})}async function NR(e){await Ee.rm(Wr(e),{recursive:!0,force:!0}),await Ee.mkdir(Wr(e),{recursive:!0})}async function PR(e){let t=Wr(e);await Ee.mkdir(t,{recursive:!0});for(let n of await Mi(t))n!=="stages"&&await Ee.rm(ke.join(t,n),{recursive:!0,force:!0})}function AR(e){if(!pt(e))throw new W(X.INDEX_CORRUPT,"index.json must be an object");if(e.schemaVersion!==nt)throw new W(X.INVALID_SCHEMA,`unsupported index schemaVersion: ${String(e.schemaVersion)}`);let t=$m(e.entryIds,"index.entryIds"),n=e.cursor;if(!Number.isInteger(n)||n<-1||n>=t.length)throw new W(X.INDEX_CORRUPT,"index cursor is out of bounds");let r=n,o=e.digest;if(!Ge(o))throw new W(X.INDEX_CORRUPT,"index digest is invalid");let i=en(He({schemaVersion:nt,entryIds:t,cursor:r}));if(o!==i)throw new W(X.INDEX_CORRUPT,"index digest mismatch");return{schemaVersion:nt,digest:o,entryIds:t,cursor:r}}function TR(e){if(!pt(e))throw new W(X.ENTRY_CORRUPT,"entry must be an object");if(e.schemaVersion!==nt)throw new W(X.INVALID_SCHEMA,`unsupported entry schemaVersion: ${String(e.schemaVersion)}`);let t=e.id;if(!Ge(t))throw new W(X.ENTRY_CORRUPT,"entry id is invalid");let n=e.kind;if(typeof n!="string"||n.trim().length===0)throw new W(X.ENTRY_CORRUPT,"entry kind is invalid");let r=Tc(e.manifest,"entry.manifest"),o=_R(e.blobs);return{id:t,schemaVersion:nt,kind:n,manifest:r,blobs:o}}function _R(e){if(!Array.isArray(e))throw new W(X.ENTRY_CORRUPT,"entry blobs must be an array");return e.map((t,n)=>{if(!pt(t))throw new W(X.ENTRY_CORRUPT,`entry blob ref ${n} must be an object`);let r=t.name;if(typeof r!="string"||r.trim().length===0)throw new W(X.ENTRY_CORRUPT,`entry blob ref ${n} name is invalid`);let o=t.digest;if(!Ge(o))throw new W(X.ENTRY_CORRUPT,`entry blob ref ${n} digest is invalid`);let i=t.sizeBytes;if(!Number.isInteger(i)||i<0)throw new W(X.ENTRY_CORRUPT,`entry blob ref ${n} sizeBytes is invalid`);return{name:r,digest:o,sizeBytes:i}})}async function zr(e,t){await jm(e,He(t))}async function FR(e,t){let n=ke.dirname(e),r=ke.basename(e),o=ke.join(n,`.${r}.${process.pid}.${Oc()}.tmp`);await Ee.mkdir(n,{recursive:!0});try{await Ee.writeFile(o,He(t),{flag:"wx"}),await Ee.rename(o,e)}finally{await Oi(o)}}async function jm(e,t){let n=ke.dirname(e),r=ke.basename(e),o=ke.join(n,`.${r}.${process.pid}.${Oc()}.tmp`);await Ee.mkdir(n,{recursive:!0});try{let i=await Ee.open(o,"wx");try{await i.writeFile(t),await i.sync()}finally{await i.close()}await Ee.rename(o,e),await Fc(n)}finally{await Oi(o)}}function He(e){return Buffer.from(JSON.stringify(Ac(e)),"utf8")}function Ac(e){if(Array.isArray(e))return e.map(t=>Ac(t));if(pt(e)){let t={};for(let n of Object.keys(e).sort())t[n]=Ac(e[n]);return t}return e}function Gr(e,t){try{return JSON.parse(e)}catch(n){throw new W(X.INVALID_JSON,`${t} is not valid JSON`,{cause:n})}}function Tc(e,t){if(e===null)return null;switch(typeof e){case"boolean":case"number":case"string":return e;case"object":if(Array.isArray(e))return e.map(n=>Tc(n,t));if(pt(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=Tc(o,t);return n}break}throw new W(X.INVALID_JSON,`${t} must be JSON-serializable`)}function $m(e,t){if(!Array.isArray(e))throw new W(X.INDEX_CORRUPT,`${t} must be an array`);return e.map((n,r)=>{if(!Ge(n))throw new W(X.INDEX_CORRUPT,`${t}[${r}] is invalid`);return n})}function _i(e,t){if(!Ge(e))throw new W(X.INVALID_PATH,`${t} must be a sha256 digest`)}function Ge(e){return typeof e=="string"&&/^sha256:[a-f0-9]{64}$/u.test(e)}function en(e){return`sha256:${hR("sha256").update(e).digest("hex")}`}function OR(e){return typeof e=="string"?Buffer.from(e,"utf8"):Buffer.from(e)}async function Qt(e,t,n){try{return await Ee.readFile(e)}catch(r){throw new W(t,`${n} not found: ${e}`,{cause:r})}}async function _c(e){try{return await Ee.readFile(e)}catch(t){if(qr(t))return null;throw t}}function Lc(e,t,n){if(en(e)!==t)throw new W(X.BLOB_CORRUPT,`blob hash mismatch for ${n}`)}async function Ue(e){try{return await Ee.access(e),!0}catch(t){if(qr(t))return!1;throw t}}async function Oi(e){try{await Ee.rm(e,{force:!0,recursive:!0})}catch{}}async function Fc(e){try{let t=await Ee.open(e,"r");try{await t.sync()}finally{await t.close()}}catch{}}async function Mi(e){try{return await Ee.readdir(e)}catch(t){if(qr(t))return[];throw t}}function MR(e){if(typeof e!="string"||e.trim().length===0)throw new W(X.INVALID_ROOT,"history store rootDir must be a non-empty string");return ke.resolve(e)}function Li(e){return ke.join(e,xR)}function Ic(e){return ke.join(e,bR)}function DR(e){return ke.join(e,SR)}function Vm(e){return ke.join(e,ER)}async function _m(e){try{let t=await Ee.readFile(Vm(e),"utf8"),n=Gr(t,"document version");if(!pt(n)||n.schemaVersion!==1||!Number.isInteger(n.version)||n.version<0)throw new W(X.INVALID_SCHEMA,"document version schema is invalid");return n.version}catch(t){if(qr(t))return 0;throw t}}async function Ai(e){let t=await Qt(e,X.RECOVERY_PENDING,"transaction journal"),n=Gr(Buffer.from(t).toString("utf8"),"transaction journal");return Um(n),n}function Um(e){if(!pt(e)||e.schemaVersion!==yR||typeof e.transactionId!="string"||e.transactionId.length===0||typeof e.operationId!="string"||e.operationId.length===0||!["prepared","files-written","history-published"].includes(e.phase)||!IR(e.historyTransition)||!Array.isArray(e.files))throw new W(X.INVALID_SCHEMA,"transaction journal schema is invalid");for(let t of e.files)if(!pt(t)||typeof t.path!="string"||t.path.length===0||t.preDigest!==null&&!Ge(t.preDigest)||t.postDigest!==null&&!Ge(t.postDigest))throw new W(X.INVALID_SCHEMA,"transaction journal file digest is invalid")}function LR(e){return e.replace(/[\r\n]+/g," ").slice(0,512)}function Yr(e){return ke.join(e,"entries")}function Zr(e){return ke.join(e,"blobs")}function Wr(e){return ke.join(e,"tmp")}function Bc(e){return ke.join(Wr(e),"stages")}function jc(e,t){return ke.join(Bc(e),`${t}.json`)}function $c(e,t){return ke.join(Yr(e),`${Xm(t)}.json`)}function Vc(e,t){return ke.join(Zr(e),Xm(t))}function Uc(e,t){return ke.join(Yr(e),`${t}.json`)}function Kc(e,t){return ke.join(Zr(e),t)}async function Km(e,t){return Jm($c(e,t),Uc(e,t))}async function Jc(e,t){return Jm(Vc(e,t),Kc(e,t))}async function Jm(e,t){return await Ue(e)?e:await Ue(t)?t:e}function Xm(e){return e.slice(7)}function Fm(e){let t=e.startsWith("sha256:")?e:`sha256:${e}`;return Ge(t)?t:null}function pt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function qr(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}function BR(e){return{maxEntries:e?.maxEntries??Ti.maxEntries,maxSessionBytes:e?.maxSessionBytes??Ti.maxSessionBytes,maxEntryBytes:e?.maxEntryBytes??Ti.maxEntryBytes}}async function jR(e){let t=Li(e);await Ue(t)||await Dc(e,[],-1)}import{createHash as $R}from"node:crypto";import{computeSiteEditCompositionKey as Wm,ManagedPageTemplateRouteManifestV1Schema as VR}from"@vcp-dev/contracts";var UR="app/_vcp/page-templates/runtime.tsx",Hm=".vcp/page-templates/routes/",KR="app/_vcp/page-templates/routes/";function Gm(e){return e.startsWith(Hm)&&e.endsWith(".json")}var De=class extends Error{constructor(t,n,r){super(n),this.code=t,this.details=r,this.name="PageTemplateManagedSourceError"}};function Zn(e){let t=hi(e);return $R("sha256").update(t,"utf8").digest("hex").slice(0,16)}function ji(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function Qr(e,t){let n=Zn(e),r=`${KR}${n}`,o=ji(t);return{routeRoot:r,manifestFile:`${Hm}${n}.json`,runtimeFile:UR,registryFile:`${r}/registry.ts`,templateEntryFile:`${r}/templates/${o}/page.tsx`}}function Ym(e){let t=GR(e),n=new Map;for(let r of t){let o=ji(r),i=n.get(o);if(i!==void 0&&i!==r)throw new De("PAGE_TEMPLATE_ID_COLLISION",`Page-template IDs ${JSON.stringify(i)} and ${JSON.stringify(r)} map to the same safe name ${JSON.stringify(o)}.`,{reason:"safe-name-collision",templateId:r,safeName:o});n.set(o,r)}}function Xc(e){let t=hi(e.routeId),n=Zm(e.files),r=Qr(t,""),o=n.get(r.manifestFile);if(o===void 0)return null;let i=WR(t,r.manifestFile,o);return HR({routeId:t,manifest:i,files:n}),i}function JR(e){let t=hi(e.selector.routeId),n=vn(e.canonicalEntryFile),r=Xc({routeId:t,files:e.files});if(r===null){if(e.selector.templateId!==void 0)throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Page-template selection ${JSON.stringify(e.selector.templateId)} cannot be resolved without a managed manifest for ${JSON.stringify(t)}.`,{reason:"template-selection-without-manifest",routeId:t,templateId:e.selector.templateId});return{mode:"direct",context:{routeId:t},entryFile:n,effectiveEntryFile:n}}if(vn(r.canonical_entry_file)!==n)throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest for ${JSON.stringify(t)} does not match the supplied canonical entry.`,{reason:"canonical-entry-mismatch",routeId:t,path:r.canonical_entry_file});let o=e.selector.templateId??null,i=(o?r.templates.find(c=>c.template_id===o):void 0)??r.templates.find(c=>c.template_id===r.default_template_id);if(!i)throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest for ${JSON.stringify(t)} has no resolvable default template.`,{reason:"default-entry-missing",routeId:t});let a={context:{routeId:t,effectiveTemplateId:i.template_id},entryFile:vn(i.entry_file)};return{...a,mode:"delegated",effectiveEntryFile:a.entryFile}}function XR(e){let t=Zm(e.files),n=[...t.keys()].map(l=>({path:l})),r=$r(n),o=new Set,i=new Map;for(let l of r){if(o.has(l.routeId))throw new De("PAGE_TEMPLATE_ROUTE_AMBIGUOUS",`Multiple canonical page entries resolve to route ${JSON.stringify(l.routeId)}.`,{reason:"duplicate-route-id",routeId:l.routeId,candidates:r.filter(p=>p.routeId===l.routeId).map(p=>p.entryFile)});o.add(l.routeId);let u=Zn(l.routeId),d=i.get(u);if(d!==void 0&&d!==l.routeId)throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Page-template route-key collision between ${JSON.stringify(d)} and ${JSON.stringify(l.routeId)}.`,{reason:"route-key-collision",routeId:l.routeId});i.set(u,l.routeId)}let s=new Set(r.map(l=>Qr(l.routeId,"").manifestFile));for(let l of t.keys())if(Gm(l)&&!s.has(l))throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest ${JSON.stringify(l)} does not belong to a scanned canonical route.`,{reason:"unknown-manifest",path:l});let a=[];for(let l of r){let u=Xc({routeId:l.routeId,files:t});if(u===null){let d={routeId:l.routeId};a.push(zR(d,l.entryFile));continue}for(let d of[...u.templates].sort(YR)){let p={routeId:l.routeId,effectiveTemplateId:d.template_id},m={context:p,entryFile:vn(d.entry_file)};a.push({key:Wm(p),composition:m})}}let c=new Set;for(let{key:l,composition:u}of a){if(c.has(l))throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Duplicate site-edit composition key for ${JSON.stringify(l)}.`,{reason:"duplicate-composition-key",routeId:u.context.routeId});c.add(l)}return a.sort((l,u)=>ZR(l.composition,u.composition)||Bi(l.key,u.key)).map(({composition:l})=>l)}function zR(e,t){return{key:Wm(e),composition:{context:e,entryFile:t}}}function Zm(e){let t=new Map;if(QR(e)){for(let n of e)zm(t,n.path,n.content);return t}for(let[n,r]of e)zm(t,n,r);return t}function zm(e,t,n){let r=vn(t);if(e.has(r))throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Snapshot contains duplicate file path ${JSON.stringify(r)}.`,{reason:"duplicate-file-path",path:r});e.set(r,n)}function WR(e,t,n){let r;try{r=JSON.parse(n)}catch{throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest ${JSON.stringify(t)} is not valid JSON.`,{reason:"invalid-json",routeId:e,path:t})}let o=VR.safeParse(r);if(!o.success)throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template manifest ${JSON.stringify(t)} does not match the known manifest contract.`,{reason:"schema-invalid",routeId:e,path:t,issues:o.error.issues.map(i=>`${i.path.join(".")||"manifest"}: ${i.message}`)});return o.data}function HR(e){let{routeId:t,manifest:n,files:r}=e,o=Qr(t,""),i=$r([...r.keys()].map(l=>({path:l}))).filter(l=>l.routeId===t);if(n.route_id!==t&&vt(t,"route-id-mismatch",o.manifestFile),n.route_key!==Zn(t)&&vt(t,"route-key-mismatch",o.manifestFile),i.length!==1)throw new De("PAGE_TEMPLATE_ROUTE_AMBIGUOUS",`Managed page-template route ${JSON.stringify(t)} has ${i.length} canonical entries.`,{reason:i.length===0?"canonical-entry-missing":"duplicate-route-id",routeId:t,candidates:i.map(l=>l.entryFile)});let s=vn(n.canonical_entry_file);(s!==i[0].entryFile||!r.has(s))&&vt(t,"canonical-entry-mismatch",s),n.default_template_id!==`vcp-default:${Zn(t)}`&&vt(t,"default-template-id-mismatch",o.manifestFile),Ym(n.templates);let a=new Set,c=new Set;for(let l of n.templates){let u=Qr(t,l.template_id),d=vn(l.entry_file),p=ji(l.template_id);l.safe_name!==p&&vt(t,"safe-name-mismatch",o.manifestFile,{templateId:l.template_id}),a.has(l.safe_name)&&vt(t,"duplicate-safe-name",o.manifestFile,{templateId:l.template_id}),a.add(l.safe_name),c.has(d)&&vt(t,"duplicate-entry-file",o.manifestFile,{templateId:l.template_id}),c.add(d),qR(d,u.routeRoot)||vt(t,"entry-outside-route-root",d,{templateId:l.template_id}),d!==u.templateEntryFile&&vt(t,"entry-path-mismatch",d,{templateId:l.template_id}),r.has(d)||vt(t,"template-entry-missing",d,{templateId:l.template_id})}}function vt(e,t,n,r={}){throw new De("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template source for ${JSON.stringify(e)} failed validation (${t}).`,{reason:t,routeId:e,path:n,...r})}function GR(e){return Array.isArray(e)?e.length===0||typeof e[0]=="string"?e:e.map(t=>t.template_id):"rawTemplateIds"in e?e.rawTemplateIds:"templateIds"in e?e.templateIds:[]}function YR(e,t){return+(t.kind==="default")-+(e.kind==="default")||Bi(e.template_id,t.template_id)}function ZR(e,t){let n=Bi(e.context.routeId,t.context.routeId);if(n!==0)return n;let r=e.context.effectiveTemplateId,o=t.context.effectiveTemplateId;if(r===void 0)return-1;if(o===void 0)return 1;let s=`vcp-default:${Zn(e.context.routeId)}`,a=r===s;return Number(o===s)-Number(a)||Bi(r,o)}function Bi(e,t){return e<t?-1:e>t?1:0}function qR(e,t){return e.startsWith(`${t}/`)}function vn(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function QR(e){return Array.isArray(e)}export{W as FileHistoryStoreError,De as PageTemplateManagedSourceError,Pi as PreviewFileSystemSiteEditEngineRuntime,up as SITE_EDIT_RAW_COLOR_LITERAL_RE,wi as SnapshotSiteEditEngineRuntime,Ym as assertNoPageTemplateSafeNameCollision,Qr as computeManagedPageTemplatePaths,Zn as computePageTemplateRouteKey,ji as computePageTemplateSafeName,gR as createPreviewSiteEditEngineRuntime,dR as createSiteEditEngineRuntime,Gm as isManagedPageTemplateManifestPath,Om as openFileHistoryStore,Xc as parseManagedPageTemplateManifest,JR as resolveManagedPageTemplateComposition,XR as scanSiteEditCompositionsFromFiles,Mr as scanSiteEditThemeStyleViolations};