@vcp-dev/site-edit-engine 0.9.4 → 0.9.6

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.
Files changed (2) hide show
  1. package/dist/index.js +7 -7
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
- import{SiteEditOperationRequestSchema as kk,SiteEditPatchPlanSchema as Ck}from"@vcp-dev/contracts";function Ut(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:Fm(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:Ut(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 Fm(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 dv,composeSiteEditRepeatInstanceKey as fv,getSiteEditSourceDeleteProtectionReason as pv,isSiteEditTextSourcePath as mv,parseSiteEditRepeatInstanceKey as gv,SITE_EDIT_SOURCE_DELETE_CAPABILITY as hv,stripSiteEditRepeatInstanceKeys as $e}from"@vcp-dev/contracts";import{parse as yv}from"yaml";import ei from"node:path";function Jn(e,t,n){return`${e}::${t}::${n}`}var O={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 $m}from"node:crypto";import*as Dc from"@babel/parser";function Kt(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:Kt(t,n,r,o)}}function wi(e,t,n,r,o){return{ok:!1,source:e,diagnostic:Kt(t,n,r,o)}}var Mm={"tsx-module":["jsx","typescript"],"ts-module":["typescript"],"next-app-entry":["jsx","typescript"]};function ct(e){let{source:t,profile:n}=e;try{return{ok:!0,ast:Dc.parse(t,{sourceType:"module",plugins:Mm[n]})}}catch(r){return{ok:!1,source:t,diagnostic:Kt("parse-failed",`AST parse failed: ${r instanceof Error?r.message:String(r)}`)}}}function Ni(e,t){return ct({source:e,profile:Lc(t.kind)})}function Pi(e,t){return ct({source:e,profile:Lc(t)})}function Lc(e){return"next-app-entry"}function Jt(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 Om from"@babel/parser";import*as hn from"@babel/types";import*as kt from"node:path";var Ai=[".tsx",".ts",".jsx",".js"],Dm=Ai.map(e=>`/index${e}`),Lm=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 Bc(e){let t=e.replace(/[?#].*$/,""),n=/\.([a-z0-9]+)$/i.exec(t);return n!==null&&Lm.has(n[1].toLowerCase())}function jc(e){let t=[];for(let n of e.program.body)hn.isImportDeclaration(n)&&typeof n.source.value=="string"&&lt(n.source.value)&&t.push(n.source.value),hn.isExportNamedDeclaration(n)&&n.source&&typeof n.source.value=="string"&&lt(n.source.value)&&t.push(n.source.value),hn.isExportAllDeclaration(n)&&typeof n.source.value=="string"&&lt(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"&&lt(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 lt(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("@/")}function _i(e,t){if(t.startsWith("@/"))return t.slice(2).replace(/\\/g,"/");let n=kt.dirname(e);return kt.join(n,t).replace(/\\/g,"/")}async function Bm(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 Dm){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(!jm(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 Bm(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 jm(e,t,n){if(!lt(t)||t.includes("\0")||t.includes("\\")||kt.posix.isAbsolute(n))return!1;let r=kt.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!kt.posix.isAbsolute(e)}var Xn=(e,t)=>{let n=ct({source:t,profile:Jt({filePath:e,source:t})});return n.ok?{ok:!0,module:{file:e,source:t,sourceHash:`sha256:${$m("sha256").update(t).digest("hex")}`,ast:n.ast,imports:jc(n.ast).map(r=>({specifier:r}))}}:{ok:!1,diagnostic:{path:e,code:"parse-failed",message:n.diagnostic.message}}};var zr="components/ui";function Xt(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("~/")?Xt(e.slice(2)):e.startsWith("./")||e.startsWith("../")?Xt(Fi(`${Vm(t)}/${e}`)):Xt(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 Vm(e){let t=Fi(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}var Um=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 Km(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 Uc(e){return x.isJSXIdentifier(e.name)?e.name.name:x.isJSXMemberExpression(e.name)?Kc(e.name):x.isJSXNamespacedName(e.name)?`${e.name.namespace.name}:${e.name.name.name}`:"unknown"}function Kc(e){return x.isJSXIdentifier(e.object)?`${e.object.name}.${e.property.name}`:x.isJSXMemberExpression(e.object)?`${Kc(e.object)}.${e.property.name}`:e.property.name}function Jm(e){return e.split(".")[0]??e}function Xm(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 zm(){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 Wm(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 gt(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)?gt(n.value,t):x.isRestElement(n)&&gt(n.argument,t);return t}if(x.isArrayPattern(e)){for(let n of e.elements)n&&(x.isRestElement(n)?gt(n.argument,t):gt(n,t));return t}return x.isAssignmentPattern(e)?(gt(e.left,t),t):(x.isRestElement(e)&&gt(e.argument,t),t)}function Ct(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 Hm(e,t,n){e.set(t,{resolved:!0,value:n})}function $i(e,t){e.set(t,{resolved:!1})}function Jc(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=Wt(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:Ct(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 Wt(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=Wt(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=Wt(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=Jc(r.value,n.path);return o.kind==="resolved"?o.value:void 0}if(x.isCallExpression(e))return zc(e,t)??void 0}function Xc(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:Ct(e,n),source:null}:null;let o=Hr(r.base,t.valueScopes),i=r.kind==="identifier"?o:o.kind==="resolved"?Jc(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:zm(),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 gt(o.id))$i(n,s);if(!x.isIdentifier(o.id)||!o.init||!x.isExpression(o.init))continue;let i=Wt(o.init,t);i!==void 0&&Hm(n,o.id.name,i)}}function Gm(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 Ym(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:Ct(s,n),sourceRange:_e(i),editable:!0,source:Re(s,n,t)})}else if(x.isJSXExpressionContainer(i)&&x.isExpression(i.expression)){let s=Xc(i.expression,t,n);s&&r.push({index:o++,value:s.value,sourceRange:_e(i),editable:!0,source:s.source})}return r}function Zm(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=Wt(o.value.expression,t);if(o.name.name==="className"){let a=typeof i=="string"?i:i===void 0?zc(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=Xc(o.value.expression,t,n);if(i!==void 0&&typeof i!="string"&&typeof i!="number"){r.push({name:o.name.name,value:$c(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:$c(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 zc(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=Wt(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=Wt(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=qm(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 qm(e){return x.isIdentifier(e)?e.name:x.isStringLiteral(e)?e.value:null}function eg(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 tg(e,t){for(let n of t){let r=eg(e,n);if(r)return r}return null}function ng(e){return x.isJSXIdentifier(e.name)?e.name.name:null}function $c(e){return e===null?"null":typeof e=="boolean"?e?"true":"false":JSON.stringify(e)}function rg(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 og(e){return e==="render"||e==="itemRender"||e==="rowRender"||e==="children"}function ig(e){return e==="empty"||e==="emptyRender"||e==="loading"||e==="loadingRender"||e==="error"||e==="errorRender"||e==="fallback"||e==="headerRender"||e==="footerRender"}function Vc(e,t,n,r){if(!e||!x.isExpression(e))return null;let o={kind:"repeat-template",collectionExpression:Ct(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 Rt(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)?Rt(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 gt(o))$i(r,i);t.valueScopes.push(r);try{if(!x.isBlockStatement(e.body))return Rt(e.body,t,n);let o=new Map;t.valueScopes.push(o);try{return Wc(e.body.body,t,n)}finally{t.valueScopes.pop()}}finally{t.valueScopes.pop()}}function Wc(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?Rt(e.argument,t,n):[];if(x.isBlockStatement(e))return zt(e.body,t,n);if(x.isIfStatement(e)){let r=x.isBlockStatement(e.consequent)?zt(e.consequent.body,t,n):Bi(e.consequent,t,n),o=e.alternate?x.isBlockStatement(e.alternate)?zt(e.alternate.body,t,n):Bi(e.alternate,t,n):[];return[...r,...o]}if(x.isSwitchStatement(e))return zt(e.cases.flatMap(r=>r.consequent),t,n);if(x.isTryStatement(e)){let r=zt(e.block.body,t,n);return e.handler&&r.push(...zt(e.handler.body.body,t,n)),e.finalizer&&r.push(...zt(e.finalizer.body,t,n)),r}return[]}function zt(e,t,n){let r=new Map;t.valueScopes.push(r);try{return Wc(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 sg(e,t,n,r){let o=tg(e.openingElement,["items","dataSource","data"]),i={key:t,tag:Uc(e.openingElement)};n.parentStack.push(i);try{for(let s of e.openingElement.attributes){if(!x.isJSXAttribute(s))continue;let a=ng(s);if(!a||!x.isJSXExpressionContainer(s.value))continue;let c=s.value.expression;if(!x.isJSXEmptyExpression(c)){if(og(a)&&Di(c)){let l=Gr(c,n,r),u=Vc(o,c,r,n);Yr(n,"repeat-region",t,s,l,u?[u]:void 0);continue}if(ig(a)){let l=Di(c)?Gr(c,n,r):Rt(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=Vc(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=Uc(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=Km(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=Ym(e.children,t,n),g=Zm(e.openingElement,t,n),S,C,v=!1;if(s){let w=t.importMap.get(r)??t.importMap.get(Jm(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),sg(e,u,t,n),(!s||e.children.length>0)&&(t.parentStack.push({key:u,tag:r}),ag(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 ag(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 cg(e){return e==="&&"||e==="||"||e==="??"}function eo(e,t,n){if(x.isJSXEmptyExpression(e))return[];let r=rg(e);if(r){let o=r.call,i=t.parentStack[t.parentStack.length-1]??null,s=[],a=r.callback,c={kind:"repeat-template",collectionExpression:Ct(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:Ct(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(...Rt(e.consequent,t,n)),s.childKeys.push(...Rt(e.alternate,t,n)),s.childKeys}if(x.isLogicalExpression(e)&&cg(e.operator)){let o=t.parentStack[t.parentStack.length-1]??null,i={kind:"conditional-branch",conditionExpression:Ct(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(...Rt(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 lg(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=lg(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 Hc(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=Wm(r);Um(r,{"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression"(d){let p=Xm(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(Gm(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 gt(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=Rt(B.argument,w,n);for(let ne of re)a.includes(ne)||a.push(ne);if(B.condition){let ne={kind:"conditional-branch",conditionExpression:Ct(B.condition,n),conditionSource:Re(B.condition,n,w)};Yr(w,"conditional-region","",B.statement,re,[ne])}}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 Gc(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:ne}=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,ne));continue}u.set(P,N.module);let{graph:X,localImports:M}=Hc(N.module);for(let D of X.elements.values())if(D.importedFrom&&lt(D.importedFrom)){let Z=D.importedFrom,te=await Xr(P,Z,r);te.ok?(D.importedFrom=te.path,Xt(te.path)&&(D.isPublicUiComponent=!0)):zn(Z,P)||m(to(te.diagnostic,re,Vi(ne,P,Z,te.diagnostic.path)))}if(l.set(P,X),!(B>=i))for(let D of M){if(Bc(D))continue;let Z=await Xr(P,D,r);if(!Z.ok){zn(D,P)||m(to(Z.diagnostic,re,Vi(ne,P,D,Z.diagnostic.path)));continue}let te=Z.path;if(S.has(te)||Xt(te))continue;let he=Vi(ne,P,D,te);try{let H=await n(te);g.push({file:te,source:H,depth:B+1,diagnosticEntryFile:re,importStack:he})}catch(H){m(to({path:te,code:"import-read-failed",message:`Failed to read imported file: ${te}`,details:{fromFile:P,specifier:D,reason:H instanceof Error?H.message:String(H)}},re,he))}}}let C=ug(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 ug(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 Yc(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}),Zc(i,r,o,t,e)}}return{nodes:t,rootKeys:[...e.rootKeys]}}function Zc(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}),Zc(s,t,n,r,o))}}import{isSiteEditRuntimeContainerTag as dg,isSiteEditRuntimeVoidElementTag as fg}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 pg(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&&fg(u),m=d||dg(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,pg(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 jh}from"node:crypto";import Tl from"node:path";import*as xo from"@babel/parser";import ns from"@babel/generator";import rs from"@babel/traverse";import*as Pt from"@babel/types";import Ki from"@babel/traverse";var wt=typeof Ki=="function"?Ki:Ki.default,no=new WeakMap,qc=new WeakMap;function yt(e,t){let n=Ni(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"?rl(e,t):t.kind==="jsx-attribute"?Sg(e,t):t.kind==="value"?bg(e,t):t.kind==="expression"?Eg(e,t):t.kind==="directive"?Ig(e,t):t.kind==="export"?vg(e,t):{ok:!1,diagnostic:Kt("unsupported-syntax",`Unsupported locator kind: ${t.kind}`)}}function rl(e,t){return t.strategy==="source-range"?mg(e,t):gg(e,t)}function mg(e,t){let n=null;if(wt(e,{JSXElement(o){if(!In(o.node,t.sourceRange))return;let i=Ee("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=Ee("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=Ee("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&&!Mg(r.path,t.expectedIdentity)?ve("jsx-node","locator-miss","JSX node failed expected identity validation"):{ok:!0,match:r}}function gg(e,t){if(t.structuralPath===""){let r=yg(e,t.component);if(r){let o=xg(r);if(o)return o}}let n=null;return wt(e,{JSXElement(r){if(Gn(r)!==t.component||Xi(r)!==t.structuralPath)return;let i=Ee("jsx-node",r);i&&(n=i,r.stop())},JSXFragment(r){if(Gn(r)!==t.component||Xi(r)!==t.structuralPath)return;let i=Ee("jsx-node",r);i&&(n=i,r.stop())}}),!n&&t.expectedRange&&(n=hg(e,t.component,t.expectedRange)),n?{ok:!0,match:n}:ve("jsx-node","locator-miss","JSX node not found for structural-path locator")}function hg(e,t,n){let r=null;return wt(e,{JSXElement(o){if(Gn(o)!==t||!In(o.node,n))return;let i=Ee("jsx-node",o);i&&(r=i,o.stop())},JSXFragment(o){if(Gn(o)!==t||!In(o.node,n))return;let i=Ee("jsx-node",o);i&&(r=i,o.stop())}}),r}function yg(e,t){let n=null;return wt(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 xg(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 Sg(e,t){let n=rl(e,t.element);if(!n.ok)return n;let s=n.match.path.get("openingElement").get("attributes").find(c=>Og(c,t.name));if(!s||!s.isJSXAttribute())return ve("jsx-attribute","locator-miss",`JSX attribute '${t.name}' not found`);let a=Ee("jsx-attribute",s);return a?{ok:!0,match:a}:ve("jsx-attribute","locator-miss",`JSX attribute '${t.name}' has no source range`)}function bg(e,t){let n=kg(e,t);if(!n.ok)return n;let r=Cg(n.match.path,t.path??[]);return r.ok?t.expectedRange&&!ht(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 Eg(e,t){let n=null;return wt(e,{Identifier(r){if(!Ag(r))return;let o=tl(r);if(!o||!nl(o,t))return;let i=Ee("expression",r);i&&(t.expectedRange&&!ht(r.node.loc,t.expectedRange)||(n=i,r.stop()))},MemberExpression(r){let o=tl(r);if(!o||!nl(o,t))return;let i=Ee("expression",r);i&&(t.expectedRange&&!ht(r.node.loc,t.expectedRange)||(n=i,r.stop()))}}),n?{ok:!0,match:n}:ve("expression","locator-miss","Expression not found")}function Ig(e,t){let n=null;return wt(e,{Program(r){let i=r.get("directives").find(a=>a.node.value.value===t.value);if(!i||t.expectedRange&&!ht(i.node.loc,t.expectedRange))return;let s=Ee("directive",i);s&&(n=s,r.stop())}}),n?{ok:!0,match:n}:ve("directive","locator-miss",`Directive '${t.value}' not found`)}function vg(e,t){let n=null;return wt(e,{ExportNamedDeclaration(r){if(t.exportKind==="generate-metadata"){let c=r.get("declaration");if(c.isFunctionDeclaration()&&c.node.id?.name==="generateMetadata"){let p=Ee("export",c);if(!p||t.expectedRange&&!ht(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=Ee("export",u);if(!d||t.expectedRange&&!ht(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&&!ht(s.node.loc,t.expectedRange))return;let a=Ee("export",s);a&&(n=a,r.stop())},ExportDefaultDeclaration(r){if(t.exportKind!=="default")return;let o=r.get("declaration"),i=Ee("export",o);i&&(t.expectedRange&&!ht(o.node.loc,t.expectedRange)||(n=i,r.stop()))}}),n?{ok:!0,match:n}:ve("export","export-not-found",`Export '${Fg(t)}' not found`)}function kg(e,t){let n=null;return wt(e,{Expression(r){if(n||t.root.kind!=="expression"||!In(r.node,t.root.sourceRange))return;let o=Ee("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=Ee("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=Ee("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=Ee("value",s);a&&(n=a,r.stop())},ExportDefaultDeclaration(r){if(n||t.root.kind!=="default-export")return;let o=r.get("declaration"),i=Ee("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 Cg(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=>Dg(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=Ee("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 Ee(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 ht(e.loc,t)}function ht(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=ol(n.node.openingElement);o&&(/^[A-Z]/.test(o)?t.unshift(`component:${o}#${el(n,o)}`):t.unshift(`${o}#${el(n,o)}`))}}else n.isJSXFragment()&&n.node===r&&t.unshift("fragment");if(!n.parentPath||Pg(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 el(e,t){let n=Rg(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(ol(s.node.openingElement)===t){if(i.set(s.node,o),s.node===e.node)return o;o++}return i.get(e.node)??0}function Rg(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=qc.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 qc.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()&&wg(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 wg(e){return e==="&&"||e==="||"||e==="??"}function ol(e){return e.name.type==="JSXIdentifier"?e.name.name:e.name.type==="JSXMemberExpression"?Ng(e.name):null}function Ng(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 Pg(e){return!!(e.isFunctionDeclaration()||e.isFunctionExpression()||e.isArrowFunctionExpression())}function Ag(e){return!(!e.isExpression()||e.parentPath?.isMemberExpression({property:e.node}))}function tl(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 nl(e,t){return e.base===t.base&&Tg(e.path,t.path??[])}function Tg(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 _g(e){return e.key.type==="Identifier"?e.key.name:e.key.type==="StringLiteral"?e.key.value:null}function Fg(e){return e.exportKind==="named"?e.name:e.exportKind}function ve(e,t,n,r){return{ok:!1,diagnostic:Kt(t,n,e,r)}}function Mg(e,t){return Gn(e)!==t.component?!1:Xi(e)===t.structuralPath}function Og(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 Dg(e,t){return e.isObjectProperty()?_g(e.node)===t:!1}import Wi from"@babel/generator";var Lg=typeof Wi=="function"?Wi:Wi.default;function Bg(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 jg(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 $g(e,t){return e.split(`
3
- `).map(r=>jg(r,t)).join(`
4
- `)}function oo(e){let{ast:t,source:n}=e;try{let r=Bg(n),i=Lg(t,{comments:!0,jsescOption:{minimal:!0,quotes:"single"}},n).code;return r!=="2"&&(i=$g(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 sl from"@babel/parser";import{arrayExpression as Vg,booleanLiteral as Ug,identifier as Kg,jsxAttribute as Jg,jsxExpressionContainer as Xg,jsxIdentifier as zg,nullLiteral as Wg,numericLiteral as Hg,objectExpression as Gg,objectProperty as Yg,stringLiteral as al}from"@babel/types";function il(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:il(e),afterSourceHash:il(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 Zg(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 cl(e,t,n){let r=Zg(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 ll(e,t){let n=ie(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"?al(e):typeof e=="number"?Hg(e):typeof e=="boolean"?Ug(e):e===null?Wg():Array.isArray(e)?Vg(e.map(t=>vn(t))):Gg(Object.entries(e).map(([t,n])=>Yg(Kg(t),vn(n))))}function Qg(e){return typeof e=="string"?al(e):Xg(vn(e))}function so(e,t){return Jg(zg(e),Qg(t))}function ul(e,t){try{let r=sl.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=ie(i.ast,n);if(!s.ok)return{ok:!1,source:t,diagnostic:s.diagnostic};let c=qg(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=eh(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 qg(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=th(r.get("expression"));o.length>0&&t.push(...o)}}return t}function eh(e,t){let n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"";return`${n}${t.trim()}${r}`}function th(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=ie(r.ast,n);return o.ok?(nh(o.match.path),de(r.ast,t,{kind:"remove-node",target:"jsx-node",inverse:"insert-child"})):{ok:!1,source:t,diagnostic:o.diagnostic}}function nh(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 ph}from"@babel/types";import Gi from"@babel/traverse";import*as U from"@babel/types";var rh=typeof Gi=="function"?Gi:Gi.default;function ze(e,t,n,r){if(!e.ok)return e;let o=Xe(n);if(!o)return e;let i=oh(t,o,r);return i?{...e,selectionRef:i}:e}function oh(e,t,n){let r=ih(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??ah(r)??i?.component??o?.component;if(!(!s||!a))return{key:Jn(s,a,ch(r))}}function dl(e){return e.strategy==="structural-path"?{file:e.file,component:e.component,structuralPath:e.structuralPath}:e.expectedIdentity}function ih(e,t){let n=null;return rh(e,{JSXElement(r){r.node===t&&(n=r,r.stop())}}),n}function Xe(e){if(!e)return null;if(U.isJSXElement(e))return Cn(e)?fl(e.children):e;if(U.isJSXFragment(e))return fl(e.children);if(U.isJSXExpressionContainer(e)||U.isParenthesizedExpression(e)||U.isTSAsExpression(e)||U.isTSSatisfiesExpression(e)||U.isTSTypeAssertion(e)||U.isTSNonNullExpression(e))return Xe(e.expression);if(U.isLogicalExpression(e))return Xe(e.right);if(U.isConditionalExpression(e))return Xe(e.consequent)??Xe(e.alternate);if(U.isCallExpression(e)||U.isOptionalCallExpression(e))return yl(e)?sh(e.arguments[0]):null;if(U.isArrayExpression(e))for(let t of e.elements){if(!t)continue;let n=Xe(t);if(n)return n}return null}function fl(e){for(let t of e){let n=Xe(t);if(n)return n}return null}function sh(e){return!e||!U.isArrowFunctionExpression(e)&&!U.isFunctionExpression(e)?null:U.isBlockStatement(e.body)?Zn(e.body.body):Xe(e.body)}function Zn(e){for(let t of e){if(U.isReturnStatement(t)){let n=Xe(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=pl(t.consequent);if(n)return n;let r=t.alternate?pl(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 pl(e){return U.isBlockStatement(e)?Zn(e.body):Zn([e])}function ah(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 ml=new WeakMap,gl=new WeakMap,Yi=new WeakMap;function ch(e){let t=ml.get(e.node);if(t!==void 0)return t;let n=[],r=e;for(;r;){if(r.isJSXElement()){let i=lh(r);i&&n.unshift(i)}r=r.parentPath}let o=n.join("/");return ml.set(e.node,o),o}function lh(e){let t=Zi(e.node.openingElement.name);return!t||Cn(e.node)?null:/^[A-Z]/.test(t)?`component:${t}#${hl(e,t)}`:`${t}#${hl(e,t)}`}function hl(e,t){let n=uh(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 Ht(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 uh(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 Ht(e){let t=gl.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(...Ht(o));continue}n.push(o);continue}if(o.isJSXFragment()){n.push(...Ht(o));continue}o.isJSXExpressionContainer()&&n.push(...xt(o.get("expression")))}return gl.set(e.node,n),n}function xt(e){if(e.isJSXElement())return Cn(e.node)?Ht(e):[e];if(e.isJSXFragment())return Ht(e);if(e.isParenthesizedExpression())return xt(e.get("expression"));if(e.isLogicalExpression())return xt(e.get("right"));if(e.isConditionalExpression())return[...xt(e.get("consequent")),...xt(e.get("alternate"))];if(e.isArrayExpression())return e.get("elements").flatMap(t=>Array.isArray(t)||!t.node||!t.isExpression()?[]:xt(t));if((e.isCallExpression()||e.isOptionalCallExpression())&&yl(e.node)){let t=e.get("arguments"),n=Array.isArray(t)?t[0]:void 0;return n?dh(n):[]}return[]}function dh(e){if(!e.isArrowFunctionExpression()&&!e.isFunctionExpression())return[];let t=e.get("body");if(t.isJSXElement())return Cn(t.node)?Ht(t):[t];if(t.isJSXFragment())return Ht(t);if(t.isParenthesizedExpression())return xt(t.get("expression"));if(t.isLogicalExpression()||t.isConditionalExpression())return xt(t);if(!t.isBlockStatement())return[];for(let n of t.get("body")){if(!n.isReturnStatement())continue;let r=n.get("argument");return r.node?xt(r):[]}return[]}function yl(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)?xl(e):U.isJSXNamespacedName(e)?`${e.namespace.name}:${e.name.name}`:null}function xl(e){return`${U.isJSXIdentifier(e.object)?e.object.name:xl(e.object)}.${e.property.name}`}function Nt(e,t){if(t.parentPath===e&&t.listKey==="children"&&Sl(e))return e;if(!t.parentPath||t.listKey!=="children")return null;let n=t.parentPath;if(!Sl(n))return null;let r=n;for(;r&&r!==e;){if(!fh(r)||r.listKey!=="children")return null;r=r.parentPath}return r===e?n:null}function Sl(e){return e.isJSXElement()||e.isJSXFragment()}function fh(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=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 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=ul(t,r.jsx);if(!u.ok)return u.result;let d=ph(u.node,!0),p=l.node.children,m={...s,targetParentLocator:n},g=w=>s?ze(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=ie(a.ast,i);if(!S.ok)return{ok:!1,source:t,diagnostic:S.diagnostic};let C=Nt(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 bl from"@babel/parser";import{cloneNode as mh}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=gh(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 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=ie(a.ast,i);if(!v.ok)return{ok:!1,source:t,diagnostic:v.diagnostic};let P=Nt(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=mh(c.node,!0),m=u.node.children,g={...s,targetParentLocator:n},S=v=>s?ze(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 gh(e,t){try{let r=bl.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 hh,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=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 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=ie(a.ast,i);if(!P.ok)return{ok:!1,source:t,diagnostic:P.diagnostic};let w=Nt(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=hh(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");yh(c.match.path);let S=u.node.children,C={...s,sourceLocator:n,targetParentLocator:r};if(o==="append")return S.push(m),ze(io(a.ast,t),a.ast,m,C);if(o==="prepend")return S.unshift(m),ze(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),ze(io(a.ast,t),a.ast,m,C)}function yh(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 El from"@babel/parser";import{cloneNode as xh,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=Sh(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 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=ie(c.ast,i);if(!w.ok)return{ok:!1,source:t,diagnostic:w.diagnostic};let B=Nt(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=xh(l.node,!0);bh(u.match.path);let C={...a,sourceLocator:n,targetParentLocator:r},v=g.children;if(o==="append")return v.push(S),ze(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),ze(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),ze(de(c.ast,t,{kind:"move-repeat-template-child",target:"jsx-node",inverse:"move-repeat-template-child"}),c.ast,S,C))}function Sh(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","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 bh(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=cl(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=ll(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 Eh,identifier as Qn,importDeclaration as Ih,importDefaultSpecifier as vh,importNamespaceSpecifier as kh,importSpecifier as Ch,isImportDefaultSpecifier as Il,isImportNamespaceSpecifier as vl,isImportSpecifier as kl,stringLiteral as Rh}from"@babel/types";function Pn(e){let{source:t,moduleSpecifier:n,imports:r}=e,o=r.findIndex(C=>!Oh(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=_h(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=Dh(C,v);return P?[P]:[]}))),d=i.imports.filter(C=>!u.has(Al(C)));if(d.length===0)return Yn(t,t,{kind:"add-import",target:"import",inverse:"remove-import"});let p=Fh(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=Th(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(!Nl(Rl(C)))return V(t,"unsupported-syntax","Unsupported import specifier combination");let v=l.find(P=>wh(P,C));if(v)Nh(v,C);else{let P=Ih(Cl(C),Rh(n));Mh(c.body,P),l.push(P)}}return de(a,t,{kind:"add-import",target:"import",inverse:"remove-import"})}function wh(e,t){return e.importKind==="type"?!1:Nl(Ah(Ph(e),Rl(t)))}function Nh(e,t){let n=!1,r=new Set(e.specifiers.map(o=>ts(o)));for(let o of Cl(t)){let i=ts(o);r.has(i)||(e.specifiers.push(o),r.add(i),n=!0)}return Pl(e.specifiers),{changed:n}}function Cl(e){let t=e.map(n=>{switch(n.kind){case"named":return Ch(n.local?Qn(n.local):Qn(n.imported),Qn(n.imported));case"default":return vh(Qn(n.local));case"namespace":return kh(Qn(n.local));default:return n}});return Pl(t),t}function Rl(e){let t=wl();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 Ph(e){let t=wl();for(let n of e.specifiers)Il(n)?t.defaultLocals.add(n.local.name):vl(n)?t.namespaceLocals.add(n.local.name):t.hasNamed=!0;return t}function wl(){return{defaultLocals:new Set,hasNamed:!1,namespaceLocals:new Set}}function Ah(e,t){return{defaultLocals:new Set([...e.defaultLocals,...t.defaultLocals]),hasNamed:e.hasNamed||t.hasNamed,namespaceLocals:new Set([...e.namespaceLocals,...t.namespaceLocals])}}function Nl(e){return e.defaultLocals.size>1||e.namespaceLocals.size>1?!1:!(e.hasNamed&&e.namespaceLocals.size>0)}function Pl(e){let t=[...e.filter(n=>Il(n)),...e.filter(n=>vl(n)),...e.filter(n=>kl(n))];e.splice(0,e.length,...t)}function Th(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 _h(e){let t=new Map,n=new Map;for(let r of e){let o=Al(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 Fh(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(Eh(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 Mh(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 Oh(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 Al(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 Dh(e,t){return e.importKind==="type"||kl(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=>!Bh(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=>Lh(u,d))),l.specifiers.length===0&&a.body.splice(c,1),de(s,t,{kind:"remove-import",target:"import",inverse:"add-import"}))}function Lh(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 Bh(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=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}}}var $h=typeof ns=="function"?ns:ns.default;function is(e){let t=Ll(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:_l(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=yt(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(Xh(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=_l(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 _l(e){let t=Jh(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 Ol(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=Vh(i,s);if(a){if(a.isArrowFunctionExpression()&&!a.get("body").isBlockStatement()){let c=a.get("body");c.replaceWith(Fl(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(Fl(l.node,n,e.placement,e.replaceOriginal===!0)),r=!0,c.stop())}}),r&&i.stop()}}}),r?{ok:!0,source:$h(t,{}).code}:{ok:!1,source:e.source,diagnostic:{message:"Route default return boundary could not be resolved."}}}function Vh(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 Fl(e,t,n,r){if(Pt.isNullLiteral(e)||r)return t;let s=n==="before"||n==="prepend"?[t,e]:[e,t];return Pt.jsxFragment(Pt.jsxOpeningFragment(),Pt.jsxClosingFragment(),s)}function Dl(e){let t=Ll(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=Bl(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=yt(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||!Kh(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=yt(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 Ml("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=yt(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?Ml("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 Ml(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 Ll(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&&!Uh(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 Uh(e,t){return e.routeId===t.routeId&&e.effectiveTemplateId===t.effectiveTemplateId}function Kh(e,t){return e.routeId===t.routeId&&e.templateId===t.effectiveTemplateId}function Jh(e,t){let n=Tl.posix.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=Tl.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:${jh("sha256").update(e.slice(t,n)).digest("hex")}`}function Xh(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 zh=typeof as=="function"?as:as.default;function $l(e){if(!e.ast)return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","SourceGraph entry AST is required",{reason:"parsed-ast-required"})]);let t=ey(e.ast);if(!t)return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export must resolve to a local function component",{reason:"default-export-unresolved"})]);let n=ny(t);if(n.length===0)return ut(e,[Oe("ROUTE_RETURN_NOT_FOUND","Route default export does not contain a proven return boundary")]);if(n.length>1)return ut(e,[Oe("MULTIPLE_PAGE_RETURNS","Route default export contains multiple page-level return statements",{returnCount:n.length})]);let r=ry(n[0].argument);if(!r)return ut(e,[Oe("ROUTE_RETURN_NOT_FOUND","Route default export returns without a boundary expression",{reason:"bare-return"})]);if(r.isNullLiteral())return jl(e,t,"virtual-route-root");if(oy(r,t))return ut(e,[Oe("INDIRECT_RETURN_ONLY","Route default export only returns through an indirect function boundary")]);if(iy(r,t)||sy(r)&&!e.source.includes("DESIGN_PLAN_REPLACE_ME"))return ut(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=Tt(r);if(i.unsupported)return ut(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=Tt(r);if(i.unsupported)return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let s=i.members;if(cy(e.source,r,s))return jl(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(ay(r))return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let o=uy({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 Bl(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 Vl(e){return e.ok?Wh(e.projection):Hh(e.projection)}function Wh(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)=>Ul(e,u,S,C,e.container.placementKey)),p=d.filter(({member:S})=>S.isBusinessMember).map(({sourceMember:S})=>Yh(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:Gh(e,a),sourceMembers:i,businessMembers:s,placementUnits:n,placements:c}}function Hh(e){let t=e.diagnostics.map(Zh);return{status:"unsupported",version:e.version,composition:e.composition,reason:Qh(e.diagnostics),diagnostics:t}}function Gh(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 Ul(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)=>Ul(e,t,a,c,i))]}function Yh(e,t,n){return{key:`business:${e}:${t.key}`,sourceMemberKey:t.key,containerKey:e,label:t.label,isIndependent:n}}function Zh(e){return{code:qh(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 qh(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 ey(e){let t=null;return zh(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=ty(o.path);i&&(t=i,n.stop())}}),t}function ty(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 ny(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 ry(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 oy(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 iy(e,t){return e.isConditionalExpression()?At(e.get("consequent"),t)||At(e.get("alternate"),t):e.isLogicalExpression()?At(e.get("left"),t)||At(e.get("right"),t):!1}function sy(e){if(!e.isJSXElement()||!Tn(e))return!1;let t=Tt(e).members;if(t.length!==1)return!1;let n=t[0];return n.kind==="jsx-element"&&!n.isBusinessMember&&n.businessMemberCount>0}function At(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()?At(e.get("consequent"),t)||At(e.get("alternate"),t):e.isLogicalExpression()?At(e.get("left"),t)||At(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 ay(e){return e.isJSXSpreadChild()}function cy(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 Tt(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:Qe(r.node.loc),businessMemberCount:0,parentSourceRange:Qe(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=Tt(o);n||=i.unsupported,t.push(...i.members);continue}if(o.isJSXElement()){let i=Tn(o)?Tt(o):null;n||=i?.unsupported??!1,t.push({...ds(o,i?.members),sourceRange:Qe(r.node.loc),parentSourceRange:Qe(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:Qe(r.node.loc),businessMemberCount:1,parentSourceRange:Qe(e.node.loc),children:[],isBusinessMember:!0,label:"atomic-expression"});continue}if(r.isJSXFragment()||r.isJSXElement()&&Kl(r)){let o=Tt(r);n||=o.unsupported,t.push(...o.members);continue}if(r.isJSXElement()){let o=Tn(r)?Tt(r):null;n||=o?.unsupported??!1,t.push({...ds(r,o?.members),parentSourceRange:Qe(e.node.loc)})}}return{members:t,unsupported:n}}function ds(e,t){let n=e.isJSXElement()&&Tn(e)?t??Tt(e).members:[],r=e.isJSXElement()&&!Tn(e)&&!Kl(e);return{memberKey:fs(e.node.type,e.node.start,e.node.end),kind:"jsx-element",nodeType:e.node.type,sourceRange:Qe(e.node.loc),businessMemberCount:r?1:Jl(n),parentSourceRange:Qe(e.parentPath?.node.loc),children:n,isBusinessMember:r,label:ly(e)}}function Kl(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 ly(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 Jl(e){return e.reduce((t,n)=>t+n.businessMemberCount,0)}function Eo(e){return e.length===0?0:Math.max(1,Jl(e))}function cs(e){let t=Qe(e.containerPath.node.loc),n=zl(e.source,e.containerPath.node.start,e.containerPath.node.end),r=We(e.input,e.containerKind,e.sourceKind,t),o=We(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 uy(e){let t=Qe(e.expression.node.loc),n=zl(e.source,e.expression.node.start,e.expression.node.end),r=We(e.input,"virtual-route-root","atomic-expression",t),o=We(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:We(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=dy(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:Wl(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 dy(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=>We(e,i,"placement-unit",l.sourceRange)),a=s[0]??t.placementUnitKey,c=s.at(-1)??t.placementUnitKey;r.push(o("prepend",We(e,i,"prepend",n),a,n,null,[]));for(let l of t.members){let u=l.parentSourceRange??n,d=We(e,i,"placement-unit",l.sourceRange);r.push(o("before",We(e,d,"before",l.sourceRange),d,l.sourceRange,l.sourceRange,[l],u)),r.push(o("after",We(e,d,"after",l.sourceRange),d,l.sourceRange,l.sourceRange,[l],u))}return r.push(o("append",i,c,n,null,[])),r}function jl(e,t,n){let r=We(e,n,"empty-container",void 0),o=We(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:Wl(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 ut(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 We(e,t,n,r){return Xl([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 Xl(["member",e,String(t??-1),String(n??-1)])}function Xl(e){return`pc_${ps("sha256").update(e.join("\0")).digest("hex").slice(0,24)}`}function zl(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 Qe(e){return e?{startLine:e.start.line,startColumn:e.start.column,endLine:e.end.line,endColumn:e.end.column}:null}function Wl(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 py(e){return e==="api-field"||e==="cms-field"||e==="i18n-message"||e==="config-entry"}var my=160;function Hl(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 Gl(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=eu(g.textSegments,s),P=tu(e,t,g,C,v),w=v?yy(v):void 0,B=xy(i,v),re=g.textSegments.map(M=>({index:M.index,value:M.value,editable:nu(M,C,s?.get(M.index)??null),source:o.get(M.index)??null})),ne=Ql(g,t),N=g.childKeys.map(M=>{let D=t.elements.get(M);return D?{key:M,tag:D.tag,label:D.tag}:null}).filter(M=>M!==null),X=[];if(g.parentKey){let M=t.elements.get(g.parentKey);if(M)for(let D of M.childKeys){if(D===e)continue;let Z=t.elements.get(D);Z&&X.push({key:D,tag:Z.tag,label:Z.tag})}}return{composition:m,key:e,tag:g.tag,componentName:g.componentName,sourceFile:g.sourceFile,sourceLocator:Zl(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:ne,children:N,siblings:X}}function Yl(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=eu(c.textSegments,i);return{composition:a,key:e,tag:c.tag,componentName:c.componentName,sourceFile:c.sourceFile,sourceLocator:Zl(c),label:c.tag,capabilities:tu(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:nu(p,u,i?.get(p.index)??null),source:m?{kind:m.kind}:null}}),boundaryKind:c.boundaryKind,isOpaque:c.isOpaque,ancestors:Ql(c,t)}}function Zl(e){return{sourceFile:e.sourceFile,componentName:e.componentName,openingElementRange:gy(e.sourceRange),structuralPath:e.identity.structuralPath,...hy(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 gy(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}function hy(e){let t=e.map(n=>n.value.trim()).filter(Boolean).join(" ").replace(/\s+/g," ").trim();return t?{textPreview:t.slice(0,my)}:{}}function ql(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 eu(e,t){if(!t)return null;for(let n of e){let r=t.get(n.index);if(r)return r}return null}function tu(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&&ru(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 nu(e,t,n){return!e.editable||!t.canUpdateText?!1:n?ru(n.editMode):!0}function ru(e){return e==="direct"||e==="proxy"||e==="upstream"}function yy(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 xy(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}:py(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 ou(e){let{key:t,element:n,graph:r,provenances:o}=e,i=by(t,n,r),s=i?.tag??(Gt(n.tag)?n.tag:n.componentName),a=i?.identity.key??iu(n,r)??t,c=vy(i),l=ky(t,n,r,o,i),u=Sy(t,n,r,o,a);return{componentName:s,instanceKey:a,templateOwner:Iy(i??n,s),...c.length>0?{variantKeys:c}:{},...l.length>0?{slotKeys:l}:{},editableStrategy:u,impactScope:Cy(u),alternativeStrategies:Ry(u)}}function Sy(e,t,n,r,o){for(let i of r.values())if(i?.editMode==="upstream")return"upstream";return ms(e,n)?"instance":!Gt(t.tag)&&t.sourceFile!==n.routeId&&o!==e?"template":"instance"}function iu(e,t){if(Gt(e.tag))return e.identity.key;let n=[...t.elements.values()].filter(r=>r.importedFrom===e.sourceFile&&Ey(r,e.componentName));return n.length!==1?null:n[0].identity.key}function by(e,t,n){if(Gt(t.tag))return t;let r=ms(e,n);if(r)return r;let o=iu(t,n);return o?n.elements.get(o)??null:null}function Ey(e,t){return e.exportName===t||e.tag===t||e.exportName==="default"}function Iy(e,t){return Gt(e.tag)&&e.importedFrom?`${e.importedFrom}#${t}`:`${e.sourceFile}#${t}`}function vy(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 ky(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&&Gt(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(Gt(r.tag))return r;n=r.parentKey}return null}function Gt(e){return/^[A-Z]/.test(e)}function Cy(e){switch(e){case"template":return"component-template";case"upstream":return"upstream-source";default:return"current-instance"}}function Ry(e){switch(e){case"template":return["instance"];case"upstream":return["template"];default:return["template"]}}var wy=new Set(["markdown","body","content","value","document"]),su=[];function cu(e){if(!(!Ay(e.tag)||!e.attributes))for(let t of e.attributes){if(!wy.has(t.name))continue;if(Py(t))return{kind:"markdown",field:t.name,schema:"markdown",valuePath:t.source?.expression,operationBoundary:su};let n=Ny(t.resolvedValue);if(n==="prosemirror-doc"||n==="node-array")return{kind:"rich-text-json",field:t.name,valuePath:t.source?.expression,schema:n,operationBoundary:su};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 Ny(e){if(e){if(Array.isArray(e)&&e.every(t=>au(t)))return"node-array";if(au(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 au(e){return!Array.isArray(e)&&typeof e=="object"&&e!==null}function Py(e){return e.name==="markdown"}function Ay(e){return/^[A-Z]/.test(e)}var Ty=["src","alt","poster","caption","width","height"];function lu(e){let t=e.attributes?.filter(i=>Ty.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=Fy(t.map(i=>i.value));return{kind:_y(e.tag,n),sourceType:o,fields:n,editableFields:[],operationBoundary:[],...Object.keys(r).length>0?{valuePaths:r}:{}}}function _y(e,t){return e==="img"?"image":e==="video"||t.includes("poster")?"video":"media"}function Fy(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 uu(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 My}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 ue(e){return`sha256:${My("sha256").update(e).digest("hex")}`}function pu(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:ue(e.route.source)},diagnostics:[{code:"source-locator-warning",message:`Key not found: ${e.key}`}]};let n=Oy(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:ue(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:fu(r),version:{documentVersion:e.route.graph.version,contentHash:ue(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:du(e.route.source,o),valueRaw:s?du(e.route.source,s):null,attrRange:fu(o),diagnostics:[]}}function mu(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 Oy(e,t){let n=ct({source:e,profile:Jt({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:Dy(t.sourceRange)});return!r.ok||r.match.node.type!=="JSXElement"?null:r.match.node}function gu(e){let t=ct({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 du(e,t){return t.start==null||t.end==null?"":e.slice(t.start,t.end)}function fu(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 Dy(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 bt from"node:path";import*as bu from"@babel/parser";import xs from"@babel/traverse";import*as _n 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?Io(n,t):null}if(e.isMemberExpression()){let n=Uy(e.node),r=Ly(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)?_t(Jy(e.node),t,"awaited or fetched expression"):null}function Ly(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 Io(e,t=[]){let n=By(e,t);if(n)return n;let r=jy(e,t);if(r)return r;let o=$y(e,t);return o||null}function nr(e){return e?.kind==="api-source"}function By(e,t){if(e.path.isVariableDeclarator()&&G.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 _t(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)&&xu(c)==="data"&&tr(c.value,e.identifier.name)),a=e.path.get("init");if(s&&a?.isCallExpression()&&hs(a.node))return _t(e.identifier.name,t,"query hook data binding")}let n=Vy(e);if(!n||xu(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:_t(e.identifier.name,t,"query hook data binding")}function jy(e,t){if(e.path.isVariableDeclarator()&&G.isArrayPattern(e.path.node.id)){let a=e.path.get("init");if(!a?.isCallExpression()||!yu(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:hu(e,l.name)?_t(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()||!yu(o.node)||n.node.elements.findIndex(a=>a===e.path.node)!==0)return null;let s=n.node.elements[1];return G.isIdentifier(s)&&hu(e,s.name)?_t(e.identifier.name,t,"state setter is updated by API data"):null}function $y(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()?_t(e.identifier.name,t,"awaited binding result"):ys(r.node)?_t(e.identifier.name,t,"fetch-backed binding result"):null:null}function Vy(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 G.isIdentifier(e)?e.name===t:G.isAssignmentPattern(e)?tr(e.left,t):G.isObjectPattern(e)?e.properties.some(n=>G.isObjectProperty(n)?tr(n.value,t):tr(n.argument,t)):G.isArrayPattern(e)?e.elements.some(n=>!!n&&tr(G.isRestElement(n)?n.argument:n,t)):!1}function hu(e,t){let n=!1,r=!1;return e.scope.path.traverse({CallExpression(i){ys(i.node)&&(n=!0),(Ky(i.node.callee,t)||i.node.arguments.some(s=>G.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 yu(e){return Co(e.callee)==="useState"}function ys(e){return vo(e,t=>G.isCallExpression(t)&&Co(t.callee)==="fetch")}function Uy(e){let t=e;for(;G.isMemberExpression(t);)t=t.object;return G.isIdentifier(t)?t.name:null}function xu(e){return e.computed?null:G.isIdentifier(e.key)?e.key.name:G.isStringLiteral(e.key)?e.key.value:null}function Co(e){return G.isIdentifier(e)?e.name:G.isMemberExpression(e)&&G.isIdentifier(e.property)?e.property.name:null}function Ky(e,t){return vo(e,n=>G.isIdentifier(n)&&n.name===t)}function vo(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)&&vo(i,t))return!0;continue}if(G.isNode(o)&&vo(o,t))return!0}return!1}function Jy(e){return G.isIdentifier(e)?e.name:G.isCallExpression(e)?Co(e.callee)??"api":G.isAwaitExpression(e)?"awaited-api":"api"}function _t(e,t,n){return{kind:"api-source",readonly:!0,sourceId:e,displayPath:Xy(e,t),reason:n}}function Xy(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}var Eu=typeof xs=="function"?xs:xs.default;function Iu(e,t){let n=ku(e);if(!n)return{allowed:!0};let r=!1;return Eu(n,{CallExpression(o){if(!Cu(o.node,t.sourceRange)||!zy(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 vu(e,t){let n=ku(e);if(!n)return{allowed:!0};let r=!1;return Eu(n,{JSXExpressionContainer(o){Cu(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 ku(e){try{return bu.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function zy(e){let t=e.callee;return _n.isMemberExpression(t)&&_n.isIdentifier(t.property)&&t.property.name==="map"}function Cu(e,t){let n=e.loc;return n?Su({line:n.start.line,column:n.start.column},{line:t.startLine,column:t.startColumn})>=0&&Su({line:n.end.line,column:n.end.column},{line:t.endLine,column:t.endColumn})<=0:!1}function Su(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 ae from"@babel/types";function Ru(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 dt(e){if(e.path.isObjectPattern()||e.path.isArrayPattern())return Yt(e.path.node,e.identifier.name);if(e.path.isVariableDeclarator()){let n=e.path.node.id;if(ae.isObjectPattern(n)||ae.isArrayPattern(n))return Yt(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(Hy(e.path,n))return!0}if(t.isFunction()||t.isVariableDeclarator())return!1;t=t.parentPath}return!1}function Yt(e,t,n=!1){return ae.isIdentifier(e)?e.name===t&&n:ae.isObjectPattern(e)?e.properties.some(r=>ae.isObjectProperty(r)?Yt(r.value,t,n):Yt(r.argument,t,n)):ae.isArrayPattern(e)?e.elements.some(r=>{if(!r)return!1;let o=ae.isRestElement(r)?r.argument:r;return Yt(o,t,n)}):ae.isAssignmentPattern(e)?Yt(e.left,t,!0):ae.isRestElement(e)?Yt(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:dt(e)}}return t?{propName:t.base,remainingPath:t.path,hasDefault:dt(e)}:null}if(e.path.isVariableDeclarator()){let r=e.path.get("init");if(r?.isExpression()){let o=wu(r),i=!1,s=o?o.initBinding&&Ss(o.initBinding)?(i=dt(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||dt(e)}}}}let n=Zy(e);if(n){let r=Wy(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||dt(e)}}if(n.findParent(s=>s.isVariableDeclarator()))return null;let o=Gy(e);if(o){let[s,...a]=o;return!s||s.kind!=="property"?null:{propName:s.name,remainingPath:[...a,...t?.path??[]],hasDefault:dt(e)}}let i=rr(n.node);return i?{propName:i,remainingPath:t?.path??[],hasDefault:dt(e)}:null}if(Ss(e)){let[r,...o]=t?.path??[];return!r||r.kind!=="property"?null:{propName:r.name,remainingPath:o,hasDefault:dt(e)}}return null}function Wy(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=wu(r);if(!o)return null;let{initBinding:i,initPathPrefix:s}=o;if(!i)return null;let a=!1,c=Ss(i)?(a=dt(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||dt(t)}:null}function wu(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 Hy(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentPath}return!1}function Gy(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 Nu(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=Yy(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(ae.isIdentifier(e))return e.name===t?n:null;if(ae.isObjectPattern(e)){for(let r of e.properties)if(ae.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(ae.isRestElement(r)){let o=qe(r.argument,t,n);if(o)return o}}if(ae.isArrayPattern(e))for(let r=0;r<e.elements.length;r+=1){let o=e.elements[r];if(!o)continue;let i=ae.isRestElement(o)?o.argument:o,s=qe(i,t,[...n,{kind:"index",index:r}]);if(s)return s}return ae.isAssignmentPattern(e)?qe(e.left,t,n):null}function Yy(e){if(!e.path.isIdentifier())return null;let t=e.path.parentPath;return t?.isAssignmentPattern()&&t.node.left===e.path.node?t:null}function Zy(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:ae.isIdentifier(e.key)?e.key.name:ae.isStringLiteral(e.key)?e.key.value:null}function Qy(e){let t=[],n=e;for(;ae.isMemberExpression(n);){if(n.computed)if(ae.isNumericLiteral(n.property))t.unshift({kind:"index",index:n.property.value});else if(ae.isStringLiteral(n.property))t.unshift({kind:"property",name:n.property.value});else return null;else if(ae.isIdentifier(n.property))t.unshift({kind:"property",name:n.property.name});else return null;n=n.object}return ae.isIdentifier(n)?{base:n.name,path:t}:null}var Lt=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 qy(e){return e.target.kind==="node"?e.target.key:null}function ex(e){return"kind"in e}function wo(e){return!ex(e)}function Rs(e,t){let n=bt.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=bt.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=yt(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 He(e){try{return _s.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function tx(e){if(e.isNumericLiteral())return!0;if(!e.isUnaryExpression({operator:"-"}))return!1;let t=e.get("argument");return!Array.isArray(t)&&t.isNumericLiteral()}function nx(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 le(e){return typeof e.start=="number"&&typeof e.end=="number"?{start:e.start,end:e.end}:null}function qt(e,t){let n=le(e);return!!(n&&et(t,n))}function et(e,t){return t.start>=e.start&&t.end<=e.end}function Ju(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 rx(e,t){let n=le(e.node);if(!n)return[];let r=new Set,o=(i,s)=>{let a=s.scope.getBinding(i);if(!a||qt(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=Ju(i.node.name);s&&o(s,i)}}),[...r].sort()}function Pu(e,t,n){let r=He(e);if(!r)return{ok:!0};let o=ie(r,fe(t));if(!o.ok||!o.match.path.isJSXElement())return{ok:!0};let i=ie(r,fe(n));if(!i.ok||!i.match.path.isJSXElement())return{ok:!0};if(id(o.match.path,i.match.path))return{ok:!1,bindingNames:[],reason:"Cannot move node out of its conditional branch"};let s=rx(o.match.path,i.match.path);return s.length>0?{ok:!1,bindingNames:s}:{ok:!0}}function Au(e,t,n){let r=Ft(t,n);return r?St(e,r):null}function Ft(e,t){let n=ie(e,fe(t));return n.ok&&n.match.path.isJSXElement()?n.match.path:Ts(e,t)}function St(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=le(i.node),g=le(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=le(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 ox(e,t){let n=le(e.node);return n?ix(t).some(r=>{let o=le(r);return r===e.node||!!(o&&o.start===n.start&&o.end===n.end)}):!1}function ix(e){let t=e.callbackPath.node.body;return b.isBlockStatement(t)?Mt(t.body):Dt(t)}function Mt(e){let t=[];for(let n of e){if(b.isReturnStatement(n)){n.argument&&t.push(...Dt(n.argument));continue}if(b.isBlockStatement(n)){t.push(...Mt(n.body));continue}if(b.isIfStatement(n)){let r=b.isBlockStatement(n.consequent)?n.consequent.body:[n.consequent];if(t.push(...Mt(r)),n.alternate){let o=b.isBlockStatement(n.alternate)?n.alternate.body:[n.alternate];t.push(...Mt(o))}continue}if(b.isSwitchStatement(n)){for(let r of n.cases)t.push(...Mt(r.consequent));continue}b.isTryStatement(n)&&(t.push(...Mt(n.block.body)),n.handler&&t.push(...Mt(n.handler.body.body)),n.finalizer&&t.push(...Mt(n.finalizer.body)))}return t}function Dt(e){return b.isJSXElement(e)?sx(e)?Tu(e.children):[e]:b.isJSXFragment(e)?Tu(e.children):b.isParenthesizedExpression(e)||b.isTSAsExpression(e)||b.isTSSatisfiesExpression(e)||b.isTSNonNullExpression(e)||b.isTSTypeAssertion(e)?Dt(e.expression):b.isConditionalExpression(e)?[...Dt(e.consequent),...Dt(e.alternate)]:b.isLogicalExpression(e)&&ad(e.operator)?Dt(e.right):[]}function Tu(e){return e.flatMap(t=>b.isJSXElement(t)||b.isJSXFragment(t)?Dt(t):b.isJSXExpressionContainer(t)&&(b.isJSXElement(t.expression)||b.isJSXFragment(t.expression)||b.isConditionalExpression(t.expression)||b.isLogicalExpression(t.expression))?Dt(t.expression):[])}function sx(e){let t=e.openingElement.name;return b.isJSXIdentifier(t)?t.name==="Fragment":b.isJSXMemberExpression(t)&&t.property.name==="Fragment"}function ax(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 _u(e,t,n,r={}){if(!r.preserveConditionalBoundary&&id(e,t))return{ok:!1,bindingNames:[],reason:"Cannot move node out of its conditional branch"};let o=le(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||qt(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=Ju(c.node.name);l&&a(l,c)}}),s.size>0?{ok:!1,bindingNames:[...s].sort()}:{ok:!0}}function Fu(e,t,n){let r=le(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||qt(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 cx(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=lx(l);u&&o(u,c)}}});return r.size>0?{ok:!1,bindingNames:[...r].sort()}:{ok:!0}}function lx(e){let t=e;for(;b.isTSQualifiedName(t);)t=t.left;return b.isIdentifier(t)?t.name:null}function Xu(e,t){let n=le(e.node),r=new Set;return Ms(e,o=>{let i=o.scope.getBinding(o.node.name);if(!i||n&&qt(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 ux(e){let t=dx(e.ast,e.sourceNode.component,e.targetParent.component);if(!t.ok)return{ok:!1,reason:t.reason};let n=cd(t.path,e.targetParentPath);if(!n.ok)return{ok:!1,reason:n.reason};let r=kx({source:e.source,sourceContext:e.sourceContext,callSitePath:t.path,targetParentPath:e.targetParentPath});if(!r.ok)return r;let o=od(r.collectionExpression);return{ok:!0,context:{...e.sourceContext,collectionExpression:r.collectionExpression,collectionNeedsParens:o?Ls(o):!0}}}function dx(e,t,n){let r=Hu(e,t);if(Gu(e,r),Yu(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 Lt(e,{JSXElement(s){nd(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 fx(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=hx(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=He(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=px(r,{file:e.sourceFile,exportName:n.exportName}),i=[];for(let a of r){let c=zu({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!tt(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 px(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 mx(i,n))o=r(s)||o}return[...n.values()]}function mx(e,t){let n=[],r=gx(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=Ot(s.exported);for(let u of t.values())tt(u.file,i)&&n.push({file:e.file,namespace:ws(l,u.namespace),exportName:u.exportName});continue}if(!b.isExportSpecifier(s))continue;let a=Ot(s.local),c=[...t.values()].filter(l=>tt(l.file,i)&&Zt(l.namespace,a));if(c.length>0){let l=Ot(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:Ot(s.exported)})}continue}if(b.isExportNamedDeclaration(o)&&!o.source){for(let i of o.specifiers){if(!b.isExportSpecifier(i))continue;let s=Ot(i.local),a=r.get(s)??[];if(a.length>0){let c=Ot(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=Ot(s);for(let c of t.values())tt(c.file,i)&&n.push({file:e.file,namespace:ws(a,c.namespace),exportName:c.exportName});continue}for(let a of t.values())tt(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 Zt(e,t){return e===t||e?.startsWith(`${t}.`)===!0}function ar(e,t,n){return!Zt(e,t)||!e?null:e===t?n:`${n}${e.slice(t.length)}`}function gx(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=>tt(u.file,s)&&Zt(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=Ot(a.imported),l=[...t.values()].filter(d=>tt(d.file,s)&&Zt(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())tt(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 Ot(e){return b.isIdentifier(e)?e.name:e.value}function hx(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 zu(e){let t=yx(e),n=[],r=Yu(e.ast,t);return Lt(e.ast,{JSXElement(o){tt(e.file,e.sourceFile)&&Os(o)===e.sourceComponent||nd(o,t)&&n.push({file:e.file,path:o})}}),{callSites:n,hasUnsafeReference:r}}function Wu(){return{localBindings:new Set,namespaceMembers:new Map,hasUnsupportedAlias:!1}}function Hu(e,t){let n=Wu();return Lt(e,{Program(r){let o=r.scope.getBinding(t);o&&n.localBindings.add(o),r.stop()}}),n}function yx(e){let t=Wu();return tt(e.file,e.sourceFile)&&xx(t,Hu(e.ast,e.sourceComponent)),Lt(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=>tt(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=>Zt(u.namespace,"default"));if(l.length>0){let u=t.namespaceMembers.get(c)??new Set;for(let d of l){let p=Ou(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=>Zt(d.namespace,l));if(u.length>0){let d=t.namespaceMembers.get(c)??new Set;for(let p of u){let m=Ou(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)}}}}}),Gu(e.ast,t),t}function xx(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 Gu(e,t){Lt(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&&qu(n.node.id,o.namespaceMembers,t,n)}}}})}function Yu(e,t){if(t.hasUnsupportedAlias)return!0;let n=!1;return Lt(e,{ReferencedIdentifier(r){if(n){r.stop();return}Sx(r)||!r.isIdentifier()||!Zu(r,t)||bx(r,t)||Ex(r)||(n=!0,r.stop())}}),n}function Sx(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 Zu(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 bx(e,t){let n=e.findParent(c=>c.isVariableDeclarator());if(!n?.isVariableDeclarator())return!1;let r=n.get("init");if(!r?.isExpression()||!Mu(e,r))return!1;let o=Zu(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()&&Mu(e,a)&&!!Qt(a.node,t,a)}function Ex(e){let t=e.parentPath;return t?.isExportDefaultDeclaration()&&t.node.declaration===e.node?!0:!!(t?.isExportSpecifier()&&t.node.local===e.node)}function Mu(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 Ix(r,t,n);let o=td(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 Ix(e,t,n){let r=new Set,o=!1;for(let i of e.properties){if(!b.isObjectProperty(i))continue;let s=ed(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 qu(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=ed(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){qu(a,s.namespaceMembers,n,r);continue}n.hasUnsupportedAlias=!0}}function ed(e){return e.computed?b.isStringLiteral(e.key)||b.isNumericLiteral(e.key)?String(e.key.value):null:vx(e.key)}function vx(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 td(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?td(t):null;return n?[...n,e.property.name]:null}return null}function Ou(e,t){if(!Zt(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 nd(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=rd(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 rd(e){if(b.isJSXIdentifier(e))return[e.name];if(b.isJSXMemberExpression(e)){let t=rd(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 kx(e){let t=le(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||qt(a.path.node,t))return;let c=wx(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=Px(e.callSitePath,c.propName,e.source);if(!u.ok){o=u.reason;return}let d=Cx(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=Xu(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:Ax(e.source,t,[...n.values()])}}function Cx(e,t){if(t.length===0)return e;let n=od(e);if(!n)return null;let r=Ls(n)?`(${e})`:e;for(let o of t){if(o.kind==="property"){r=Rx(o.name)?`${r}.${o.name}`:`${r}[${JSON.stringify(o.name)}]`;continue}r=`${r}[${o.index}]`}return r}function Rx(e){return/^[$A-Z_a-z][$\w]*$/.test(e)}function wx(e,t,n){let r=Nx(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??le(e.node);return s?{propName:i.propName,remainingPath:i.remainingPath,hasDefault:i.hasDefault,range:s}:null}function Nx(e,t){let n=e.parentPath;if(!n||!n.isMemberExpression()&&!n.isOptionalMemberExpression()||n.node.object!==e.node||!qt(n.node,t)||n.node.computed||!b.isIdentifier(n.node.property))return null;let r=le(n.node);return r?{propertyName:n.node.property.name,range:r}:null}function Px(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 Ax(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 od(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 Tx(e){let t=le(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||qt(s.path.node,t))return;let a=Du(s,e.sourceFile,e.targetFile);if(a){let c=e.targetParentPath.scope.getBinding(a.localName);if(c){let u=Du(c,e.targetFile,e.targetFile);(!u||u.moduleFile!==a.moduleFile||!_x(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 _x(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 Du(e,t,n){let r=Fx(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 Fx(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(".")?bt.normalize(bt.join(bt.dirname(e),t)).replace(/\\/g,"/"):t}function tt(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 Mx(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 Ox(e,t){return{...e,callbackParams:t}}function Lu(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 id(e,t){return sd(e,t).length>0}function vs(e,t){let n=le(e.node),r=le(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()&&!Dx(o,n,r)))return!0;o=o.parentPath}return!1}function Dx(e,t,n){let r=le(e.node.consequent);if(r&&et(r,t)&&!et(r,n))return!1;let o=e.node.alternate?le(e.node.alternate):null;return!(o&&et(o,t)&&!et(o,n))}function sd(e,t){let n=le(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=le(o.node.consequent),a=le(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()&&ad(o.node.operator)){let s=le(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 Bu(e,t,n,r){let o=sd(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=Lx(a.conditionPath,c);if(s.push(a.conditionPath),a.kind==="logical"){i=`${l} ${a.operator} ${jx(i)}`;continue}i=a.branch==="consequent"?`${l} ? ${i} : null`:`${l} ? null : ${i}`}return{sourceJsx:i,conditionPaths:s}}function Lx(e,t){return Bx(e.node)?t:`(${t})`}function Bx(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 ad(e){return e==="&&"||e==="||"||e==="??"}function jx(e){return e.trim().startsWith("<")?e:`(${e})`}function cd(e,t){let n=le(e.node),r=le(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=ju(e),i=ju(t);if(!o||!i||!$x(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=Vx(s.node,n);if(a&&!et(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=le(s.node.right);if(a&&et(a,n)&&!et(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())&&Ux(s)){let a=le(s.node.body)??le(s.node);if(a&&!et(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 ju(e){let t=e;for(;t;){if(t.isReturnStatement())return t.node.argument?le(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 le(t.node.body);t=t.parentPath}return null}function $x(e,t){return e.start===t.start&&e.end===t.end}function Vx(e,t){let n=le(e.consequent);if(n&&et(n,t))return n;let r=le(e.alternate);return r&&et(r,t)?r:null}function Ux(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 Kx={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=Kx[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 Jx(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 Xx(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 $u(e){let t=new Set;return Lt(e,{Program(n){for(let r of Object.keys(n.scope.bindings))t.add(r);n.stop()}}),t}function Vu(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}${n}`);)n+=1;return`${e}${n}`}function zx(e,t){if(!e.component)return{localName:"Component"};let n=e.component,r=Fs(e),o=He(t);if(n.exportName!=="default"){let a=o?Xx(o,n.source,n.exportName):null;if(a)return{localName:a};let c=o?Vu(r,$u(o)):r;return{localName:c,importStep:ks(e,c)}}if(!o)return{localName:r,importStep:ks(e,r)};let i=Jx(o,n.source);if(i)return{localName:i};let s=Vu(r,$u(o));return{localName:s,importStep:ks(e,s)}}function Wx(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 Hx(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?Gx(e.props):void 0;return{kind:e.kind,component:{source:e.component.source,exportName:e.component.exportName},...t?{props:t}:{}}}function Gx(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 Yx(e,t){let n=He(e);if(!n||!t.tag||!t.importedFrom||!t.exportName)return Number.POSITIVE_INFINITY;let r=zu({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 Uu(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 Zx(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)?qx(e.locator,eS(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:ld(o,t)}function ld(e,t){let[n,...r]=e;if(!n)return t;if(n.kind!=="property")return;let o=ld(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 qx(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 eS(e,t){return t?.[e]??e}function Ku(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 tS(e,t){return nS(e.root,t.root)&&oS(e.path??[],t.path??[])}function nS(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&&rS(e.sourceRange,t.sourceRange)}}function rS(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 Lt(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 oS(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=Uu(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=qy(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=He(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(!tx(a.match.path))return{ok:!0,value:r};let c=nx(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=He(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=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||Yx(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=Iu(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"?zx(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:Wx(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:Hx(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"?Ku(0,a.collectionIndexMap):Ku(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=He(this.graph.getFileContent(t.file));if(!n)return t.isRepeatItemRoot===!0;let r=ie(n,fe(t)),o=r.ok&&r.match.path.isJSXElement()?r.match.path:Ts(n,t);if(!o)return t.isRepeatItemRoot===!0;let i=St(this.graph.getFileContent(t.file),o);return i?ox(o,i):t.isRepeatItemRoot===!0}isInsideMapCallback(t){let n=He(this.graph.getFileContent(t.file));if(!n)return!1;let r=ie(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=He(c);if(!l)return null;let u=Ft(l,r),d=Ft(l,o);if(!u||!d)return null;let p=St(c,u),m=St(c,d);if(!No(p,m))return null;if(a&&(s==="before"||s==="after")){let S=Ft(l,a),C=S?St(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=Pu(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=He(c);if(!l)return null;let u=Ft(l,r),d=Ft(l,o);if(!u||!d)return null;let p=St(c,u);if(!p)return null;let m=St(c,d);if(No(p,m))return null;if(m&&!ax(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=Au(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=Bu(c,u,d,g);for(let w of S.conditionPaths){let B=Fu(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=_u(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=cx(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=ux({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=Xu(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:Lu(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=He(c),d=He(l);if(!u||!d)return null;let p=fx({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=Ft(u,r),g=Ft(d,o);if(!m||!g)return null;let S=cd(p.callSitePath,g);if(!S.ok)return{ok:!1,errorCode:"unsupported-operation",reason:S.reason};let C=St(c,m);if(!C)return null;if(St(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")&&Au(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=Po(o,{kind:"native-tag",tag:r.tag});if(M)return{ok:!1,errorCode:"unsupported-operation",reason:M}}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=Bu(c,m,g,P);for(let M of w.conditionPaths){let D=Fu(M,g,C);if(!D.ok)return{ok:!1,errorCode:"unsupported-operation",reason:`Cannot move repeat-backed child because its condition depends on bindings outside the target scope: ${D.bindingNames.join(", ")}`}}let B=_u(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=Tx({sourceFile:r.file,targetFile:o.file,sourceContext:C,targetParentPath:g});if(!re.ok)return{ok:!1,errorCode:"unsupported-operation",reason:re.reason};let ne=Mx(C);if(!ne.ok)return{ok:!1,errorCode:"unsupported-operation",reason:ne.reason};let N=Ox(C,ne.callbackParams),X=[{order:0,file:r.file,type:"remove-node",locator:fe(r),removeWhitespace:!0}];for(let M of re.imports)X.push({order:X.length,file:o.file,type:"add-import",moduleSpecifier:M.moduleSpecifier,imports:M.imports});return X.push({order:X.length,file:o.file,type:"insert-jsx-expression-child",parentLocator:fe(o),expression:Lu(N,w.sourceJsx),placement:s,anchorLocator:a?fe(a):void 0,selectionContext:Mn(o)}),this.buildPlan(t,n,X,i)}async planMoveNode(t,n,r,o){if(!o.canMove)return{ok:!1,errorCode:"capability-denied",reason:"Cannot move this node"};let i=Uu(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(Zx(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&&tS(w.locator,B.locator)){let re=w.index,ne=B.index,N=l==="before"?ne-(re<ne?1:0):ne+(re<ne?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=Pu(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=vu(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:ue(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 bd from"@babel/parser";import js from"@babel/traverse";import*as E from"@babel/types";var Ed=typeof js=="function"?js:js.default;function Id(e){return new Map([...e].map(t=>[t.file,{source:t.source,ast:t.ast}]))}var ud=new WeakMap;function dd(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 vd(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 ot({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 _S({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 kd(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?Nd(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=cS(a),l=new Set,u=e.sourceInfo??await ot({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 zS({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 aS(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"?lS({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}):uS({file:t,source:n,ast:s,candidate:e.target.candidate,readFile:r,exists:o,graph:e.graph,fileCache:i,visited:a})}function Cd(e){try{return bd.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=Cd(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 iS(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let o of dr(e).expressions){if(!sS(o.node.loc,t))continue;let i=(o.node.end??0)-(o.node.start??0);i<=r&&(n=o,r=i)}return n}function Rd(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=ud.get(e);if(t)return t;let n={expressions:[],jsxElements:[]};return Ed(e,{Expression(r){n.expressions.push(r)},JSXElement(r){n.jsxElements.push(r)}}),ud.set(e,n),n}function sS(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=fd({line:e.start.line,column:e.start.column},{line:t.startLine,column:t.startColumn}),r=fd({line:e.end.line,column:e.end.column},{line:t.endLine,column:t.endColumn});return n>=0&&r<=0}function wd(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 fd(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 ot(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 jd(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 aS(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 cS(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=tb(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 Nd(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 lS(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 ot({expression:l.node,scope:l.scope,source:n,currentFile:t,readFile:i,exists:s,fileCache:a,visited:c}):null);if(!u){if(!l)return dS(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"?yd(t,p):Xs(t,fr(l.node,n),p):fS({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)?pS("unsupported-expression",Fd(m.path.node.init,e.functionCallContracts)):Be("unsupported-expression",`Unable to resolve provenance for expression "${u.expression}"`)}return d.kind==="external"?yd(t,d):Xs(t,u.expression,d)}async function uS(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 dS(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 fS(e){let t=await Ad(e);if(t.length===0)return Be("unsupported-expression",`Unsupported expression type: ${e.expression.type}`);if(mS(e.expression))return Pd(t);if(_d(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 pS(e,t){return Pd([{code:e,message:t}])}function Pd(e){return{finalSource:null,chain:[],confidence:"partial",editMode:"readonly",diagnostics:e}}function mS(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 Ad(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:Fd(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 it(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 _d(e)?pd("i18n helpers require a static message id string"):SS(e)?pd("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 Ad({...t,expression:o}));return r}function gS(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:[hS(e.sourceType)]}}async function na(e){for(let n of vS){if(!md(e.expressionPath,n.helperNames))continue;let r=await n.resolve(e);if(r)return hd(gd(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(!md(e.expressionPath,n.helperNames))continue;let r=await n.resolve(t);if(r)return hd(gd(r),e.externalAdapters)}return null}function hS(e){return{code:"missing-adapter",message:`No external adapter is registered for ${e}`}}function yS(e){return{code:"external-source-readonly",message:e}}function pd(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 md(e,t){if(!t||t.length===0)return!0;let n=ra(e.node);return n?t.includes(n):!1}function gd(e){return"match"in e?{match:e.match,editMode:e.editMode,diagnostics:ur(e.diagnostics??[])}:{match:e,diagnostics:[]}}function hd(e,t){let n=gS(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 xS(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 SS(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 Td(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 _d(e){return Td(e)===null}async function bS(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 ES(e){let t=Td(e.expressionPath.node);if(typeof t!="string"||t.length===0)return null;let n="en",r=await bS(e.currentFile,n,e.exists);return r?{sourceType:"i18n-message",sourceId:`${n}:${t}`,file:r,displayPath:t}:null}async function IS(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 it(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:[yS("API mapping transforms must stay readonly until a reversible mapping strategy is registered")]}:i}var vS=[{helperNames:["getCmsField"],resolve:({expressionPath:e})=>xS(e)},{helperNames:["apiField"],resolve:e=>IS(e)},{helperNames:["t","intl.formatMessage"],resolve:({currentFile:e,expressionPath:t,exists:n})=>ES({currentFile:e,expressionPath:t,exists:n})}];function yd(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=TS(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 kS=[{helperName:"formatPrice",purity:"pure",sourceArgIndex:0},{helperName:"formatDate",purity:"pure",sourceArgIndex:0},{helperName:"pickLabel",purity:"pure",sourceArgIndex:0}];function oa(e,t){let n=[...kS,...t??[]];for(let r=n.length-1;r>=0;r-=1){let o=n[r];if(o?.helperName===e)return o}return null}function Fd(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 Md({...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 ot({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 PS(e)}async function Md(e){let t=await nt({...e,allowComposed:!1});return t?.kind==="source"?t.provenance:null}async function nt(e){let t=CS(e.expressionPath),n=NS(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 ot({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 ot({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 nt({...e,expressionPath:r,allowComposed:!0}),a=await nt({...e,expressionPath:o,allowComposed:!1}),c=await nt({...e,expressionPath:i,allowComposed:!1});return Vs(s,a,c)}if(t.isCallExpression())return RS({...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 nt({...e,expressionPath:r,allowComposed:!0}),s=await nt({...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 nt({...e,expressionPath:r,allowComposed:!0}),s=await nt({...e,expressionPath:o,allowComposed:!0});return Vs(i,s)}if(t.isUnaryExpression()){let r=t.get("argument");return Array.isArray(r)||!r.isExpression()?null:nt({...e,expressionPath:r,allowComposed:!0})}return null}finally{n&&e.visited.delete(n)}}function CS(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 RS(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:nt({...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:nt({...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(!wS(t,n.provenance))return null}}return t?{kind:"source",provenance:t}:{kind:"none"}}function wS(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 NS(e,t){return t.start==null||t.end==null?null:`safe-derived:${e}:${t.start}:${t.end}`}async function PS(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 Od({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 Od(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 ot({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 AS(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 Od({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 TS(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 _S(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=Dd(e.expressionPath,t.base);if(n){let l=await Ld({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=MS(n.callPath,[...n.basePath,...t.path]);return nr(S)?dd(e.currentFile,S.sourceId,S.displayPath):null}let u=nb(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 rt(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 rt(p.value,m)===void 0?null:{kind:"value",file:p.file,root:p.root,path:m,sourceKind:"imported-binding",collectionIndexMap:p.collectionIndexMap}}let o=Ru(r);if(o){let l=o.expressionPath,u=await ot({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 Md({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 ZS({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 AS({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 dd(e.currentFile,s.sourceId,s.displayPath);let a=await tn({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:rt(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 Dd(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()||!FS(s,r)?null:{callPath:s,basePath:i}}function FS(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 Ld(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 MS(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 tn({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 Bd({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=wd(n.node);if(!a)return null;let c=await it(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 ot({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 OS({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=rb(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=rt(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 OS(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 Bt(t.file,e.readFile,e.fileCache);i=s.ast?Hs(s.ast).getBinding(t.root.name):void 0}return i?await tn({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 Bt(t.file,e.readFile,e.fileCache);if(!n.ast)return null;let r=iS(n.ast,t.root.sourceRange);if(!r)return null;let o=await it(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 Bd(e){return await DS(e)??await LS(e)??await BS(e)}async function DS(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=jS(s);if(!c)return null;let l=[],u=[],d=[];for(let[p,m]of i.value.entries()){let g=$S(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 LS(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=xd(s,0),l=xd(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 xd(e,t){return e?E.isNumericLiteral(e)&&Number.isInteger(e.value)?e.value:null:t}async function BS(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(Sd(s,a.name,c.name,d.value,p.value)===void 0)return null;return u.sort((d,p)=>{let m=Sd(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 Sd(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 rt(r,i);let s=Ws(e,n);return s?rt(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 jS(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 $S(e,t,n){let r=en(e,t,n);return typeof r=="boolean"?r:void 0}function en(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?rt(n,r):void 0}if(E.isUnaryExpression(e)&&e.operator==="!"){let r=en(e.argument,t,n);return r===void 0?void 0:!r}if(E.isLogicalExpression(e)){let r=en(e.left,t,n);if(r===void 0)return;if(e.operator==="&&")return r&&en(e.right,t,n);if(e.operator==="||")return r||en(e.right,t,n)}if(E.isBinaryExpression(e)){let r=E.isExpression(e.left)?en(e.left,t,n):void 0,o=E.isExpression(e.right)?en(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 tn(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 VS({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 eb({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 Bd({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 it(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 it(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 VS(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=US(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 it(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 US(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 KS(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 JS(e,t){let n=KS(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 XS(e,t,n,r){return e.importedFrom===t?r?e.exportName===r:!0:e.sourceFile===t&&e.tag===n}async function zS(e){let t=HS(e.expressionPath.node);if(!t||!GS(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 WS({...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 WS(e){let t=null,n,r=[];for(let i of e.segments){if(i.kind!=="dynamic")continue;let s=await ot({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=Dd(e.expressionPath,s.base);if(!a)return null;let c=await Ld({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=rt(c.value,[{kind:"index",index:d},...a.basePath,...s.path]);return YS(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 HS(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 GS(e){return e.some(t=>t.kind==="dynamic")}function YS(e){return typeof e=="string"?{kind:"property",name:e}:Number.isInteger(e)?{kind:"index",index:e}:null}async function ZS(e){let t=JS(e.binding,e.sourceInfo);if(!t||!e.graph)return null;let n=[...e.graph.elements.values()].filter(l=>XS(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 qS({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=Nu(e.binding,t.componentName,t.propName);if(!u||u.propName!==t.propName)return null;let d=await it(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&&rt(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 Bt(r.sourceFile,e.readFile,e.fileCache);if(!i.ast)return null;let s=Nd(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 Bt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=Rd(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=wd(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 qS(e){let t=await Bt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=Rd(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 ot({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 eb(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 Bt(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 Bt(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 Bt(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 tn({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 tn({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(Ed(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 it(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 it(e.expression,t,n,r,o,i,s);if(E.isIdentifier(e)){let a=t.getBinding(e.name);if(!a)return;let c=await tn({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 jd(e,t,n,r,o,i,s);if(!a)return;let c=t.getBinding(a.base);if(!c)return;let l=await tn({currentFile:n,binding:c,readFile:r,exists:o,fileCache:i,visited:s});return!l||l.kind!=="static"?void 0:rt(l.value,a.path)}}async function Ks(e,t,n,r,o,i,s){if(!E.isSpreadElement(e))return await it(e,t,n,r,o,i,s)}async function jd(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 it(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 tb(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 rt(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 nb(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 rb(e,t){let n=[],r=[];for(let o of t){let i=rt(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 Bt(e,t,n){let r=n.get(e);if(r)return r;let o=await t(e),i=Cd(o),s={source:o,ast:i};return n.set(e,s),s}import ua from"@babel/generator";import{parse as xb}from"@babel/parser";import da from"@babel/traverse";import*as k from"@babel/types";import*as pt from"@babel/types";import sa from"@babel/generator";import*as ce from"@babel/types";var ob=typeof sa=="function"?sa:sa.default,ib=/(?:token|secret|key|password|authorization|cookie|signature|credential)/i,sb=/^((?:https?:)?\/\/)[^/@\s]+@/i,ab=/(\/(?:token|secret|api[-_]?key|password|credential|signature)\/)[^/?#]+/gi;function Vd(e,t){let n=ft(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($d(r))return aa(e.arguments[0],r,t,["axios client contract"])}if(n.startsWith("ky.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if($d(r))return aa(e.arguments[0],r,t,["ky client contract"])}return null}function aa(e,t,n,r){if(!e||ce.isSpreadElement(e)||ce.isJSXNamespacedName(e))return db(t,n,r,"missing url argument");let o=mr(e);return{sourceKind:ub(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(ce.isStringLiteral(e))return Oo(e.value);if(ce.isTemplateLiteral(e))return Oo(cb(e));if(ce.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(ce.isMemberExpression(e)){let t=Ud(e);if(t)return`env:${t}`}if(!(ce.isCallExpression(e)&&ft(e.callee)==="new URL")){if(ce.isNewExpression(e)&&ce.isIdentifier(e.callee,{name:"URL"})){let[t,n]=e.arguments,r=t&&!ce.isSpreadElement(t)?mr(t):void 0,o=n&&!ce.isSpreadElement(n)?mr(n):void 0;return o&&r?Oo(`${o} + ${r}`):r??o}if(ce.isIdentifier(e))return`:${e.name}`}}function cb(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(ce.isIdentifier(e))return`:${e.name}`;if(ce.isMemberExpression(e)){let t=Ud(e);if(t)return`env:${t}`}return`:${lb(e)}`}function lb(e){return ob(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(sb,"$1<redacted>@").replace(ab,"$1<redacted>");if(!r)return o;let i=r.split("&").map(s=>{let[a]=s.split("=");return a?ib.test(a)?`${a}=<redacted>`:`${a}=:${a}`:""}).filter(Boolean).join("&");return i?`${o}?${i}`:o}function ub(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 db(e,t,n,r){return{sourceKind:"unknown-api",method:e,confidence:"partial",evidence:[{file:t.file,reason:[...n,r].join("; ")}]}}function $d(e){return["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(e)}function Ud(e){return!ce.isMemberExpression(e.object)||!ce.isIdentifier(e.object.object,{name:"process"})||!fb(e.object.property,"env")?null:ce.isIdentifier(e.property)?e.property.name:ce.isStringLiteral(e.property)?e.property.value:null}function fb(e,t){return ce.isIdentifier(e)&&e.name===t}function ft(e){if(ce.isIdentifier(e))return e.name;if(ce.isMemberExpression(e)){let t=ft(e.object),n=ce.isIdentifier(e.property)?e.property.name:ce.isStringLiteral(e.property)?e.property.value:null;if(t&&n)return`${t}.${n}`}return null}var pb=new Set(["list","listStrict","get","getStrict","getByUrl","getByUrlStrict","schema","categories"]),mb=new Set(["getConfig","submit"]);function Kd(e,t){let n=gb(ft(e.callee),t);if(!n)return null;let r="cms.collections.";if(n.startsWith(r)){let i=n.slice(r.length);if(!pb.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(!mb.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)??hb(e,0,"path")??"/cms/:path",s=yb(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 gb(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 Jd(e,t){let n=ft(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 Xd(e){let t=ft(e.callee);return typeof t=="string"&&t.startsWith("cms.field.")}function la(e,t){let n=e.arguments[t];return pt.isStringLiteral(n)?n.value:null}function hb(e,t,n){let r=e.arguments[t];if(!pt.isObjectExpression(r))return null;for(let o of r.properties)if(pt.isObjectProperty(o)&&!o.computed&&(pt.isIdentifier(o.key)&&o.key.name===n||pt.isStringLiteral(o.key)&&o.key.value===n)&&pt.isStringLiteral(o.value))return o.value.value;return null}function yb(e){return/^\/collections\/([^/]+)(?:\/|$)/.exec(e)?.[1]??null}var pa=typeof da=="function"?da:da.default,BN=typeof ua=="function"?ua:ua.default,Sb={maxFunctionDepth:8,maxImportDepth:6},bb=new Set(["src","href","alt","poster","content","title","aria-label"]);async function Zd(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:{...Sb,...e.options},variableCache:new Map,functionDepth:0,importDepth:0,paramSources:new Map,resolvingVariables:new Set,resolvingComponentProps:new Set,scopeVariables:ff(n,e.element.componentName)};await Qd(e.element.componentName,e.graph,r);let o=[];o.push(...await Cb(e.element,e.graph,r),...await Rb(e.element,e.graph,r));for(let s of e.element.textSegments){let a=await wb(s,e.element,e.graph,r);a&&o.push(Bo(a,"text","children"))}for(let s of e.element.attributes??[]){let a=kb(s,e.element);if(!a)continue;let c=await tf(s.source,e.element,e.graph,r);c&&o.push(Bo(c,a,s.name))}let i=Ub(o).sort(uf);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 qd(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 ef(l.sourceFile,n);if(!d)continue;let p=$o(d,n,{importDepth:n.importDepth+1});p.paramSources.clear(),p.scopeVariables=ff(d,l.componentName),await Qd(l.componentName,t,p);let m=await Eb(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=cf(u);d.length===1&&c.set(l,d[0])}vb(o,c,n)}async function qd(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 ef(e,r))?.imports.get(t);if(!s||!lt(s.source))return!1;let a=await gf(e,s.source,r.exists);return a?a===n?!0:qd(a,s.importedName,n,r,o):!1}async function Eb(e,t){let n=new Map;pa(t.analysis.ast,{JSXElement(o){if(Ib(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 Ib(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 ef(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 vb(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 kb(e,t){return e.name==="dangerouslySetInnerHTML"?"richtext":bb.has(e.name)?"attribute":t.importedFrom||/^[A-Z]/.test(t.tag)?"component-prop":null}async function Cb(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(nn(s),"repeat-region",i.collectionExpression))}return r}async function Rb(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(nn(s),"conditional-region",i.conditionExpression))}return r}async function wb(e,t,n,r){return tf(e.source,t,n,r)}async function tf(e,t,n,r){let o=await Nb(e,t,n,r);return o||jo(e,r)}async function Nb(e,t,n,r){if(!e)return null;let o=Pb(e.base,t,n);if(!o)return null;let i=await jo(o.collectionSource,r);return i?xr(i,e.path,!0):null}function Pb(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 nf(e.base,t);return n?xr(n,e.path,!1):null}async function nf(e,t){let n=t.paramSources.get(e);if(n)return Ne(n);if(t.variableCache.has(e))return Kb(t.variableCache.get(e)??null);if(t.resolvingVariables.has(e))return null;t.resolvingVariables.add(e);let r=await Ab(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 pf(i,t);if(s){let a=$o(s,t,{importDepth:t.importDepth+1}),c=mf(i,s);if(c){let d=(await rn(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 Ab(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 nf(e.name,t);if(k.isMemberExpression(e)||k.isOptionalMemberExpression(e)){let n=k.isMemberExpression(e)?Jd(e,{file:t.file}):null;if(n)return af(n);let r=await Tb(e,t);if(!r)return null;let o=$b(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 rf(e,t);if(k.isObjectExpression(e)){let n=await of(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(Wd(n,r))}if(k.isLogicalExpression(e)){let n=await Ce(e.left,t),r=await Ce(e.right,t);return yr(Wd(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 Tb(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 rf(e,t){let n=Kd(e,{file:t.file,imports:t.analysis.imports});if(n)return af(n);if(Xd(e)){let d=e.arguments[0];if(d&&k.isExpression(d))return yr(await Ce(d,t))}let r=await _b(e,t);if(r)return r;let o=Vd(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 Ob(e,t);if(i)return i;let s=await Db(e,t);if(s)return s;let a=await Lb(e,t);if(a)return a;let c=await Bb(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=cf(l);return u.length===1?yr(u[0]):null}async function _b(e,t){let n=ft(e.callee);if(n!=="useQuery"&&n!=="useSuspenseQuery"&&n!=="useInfiniteQuery"&&n!=="useSWR")return null;if(n==="useSWR"){let i=Mb(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 rn(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=Fb(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 rn(i.node,[],i.context)).returnSource:Do(t.file,`${n} queryFn unresolved`)}return k.isArrowFunctionExpression(o)||k.isFunctionExpression(o)?(await rn(o,[],t)).returnSource:k.isCallExpression(o)?rf(o,t):null}function Fb(e,t){for(let n of e.properties){if(!k.isObjectProperty(n)||!k.isExpression(n.value))continue;if(sf(n)===t)return n.value}return null}function Mb(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 Ob(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 nn(r);let o=e.arguments[0];if(k.isIdentifier(o)){let i=await hr(o.name,t);if(!i)return nn(r);let s=await rn(i.node,[r],i.context);return{...nn(r),...s.objectReturnMap??s.returnSource?.fieldMap?{fieldMap:s.objectReturnMap??s.returnSource.fieldMap}:{}}}if(k.isArrowFunctionExpression(o)||k.isFunctionExpression(o)){let i=await rn(o,[r],t);return{...nn(r),...i.objectReturnMap??i.returnSource?.fieldMap?{fieldMap:i.objectReturnMap??i.returnSource.fieldMap}:{}}}return nn(r)}async function Db(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 Lb(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 Bb(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 rn(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 pf(r,t);if(!o)return null;let i=$o(o,t,{importDepth:t.importDepth+1}),s=mf(r,o);return s?{node:s,context:i}:hr(r.importedName,i)}async function rn(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,Vb(u),r)});let o=jb(e),i=null,s,a=!1;for(let c of o){if(k.isObjectExpression(c)){s={...s??{},...await of(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 jb(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 of(e,t){let n={};for(let r of e.properties){if(!k.isObjectProperty(r))continue;let o=sf(r);if(!o||!k.isExpression(r.value))continue;let i=await Ce(r.value,t);i&&(n[o]=i)}return n}function sf(e){return k.isIdentifier(e.key)&&!e.computed?e.key.name:k.isStringLiteral(e.key)?e.key.value:null}function $b(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,zd(t)),o)}return o.valuePath=gr(o.valuePath,zd(t)),o}function zd(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 af(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 nn(e){let t=Ne(e);return t.sourceType==="cms-field"&&!t.valuePath&&(t.valuePath="items[]"),t}function Vb(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 Wd(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=df(e.confidence,t.confidence)<=0?e.confidence:t.confidence;return{...e,confidence:n,evidence:[...e.evidence,...t.evidence]}}function cf(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 lf(e){let t=[...e].sort(uf),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 Ub(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 uf(e,t){return Hd(e.targetKind)-Hd(t.targetKind)||df(e.confidence,t.confidence)||Gd(e.sourceKind)-Gd(t.sourceKind)||e.targetName.localeCompare(t.targetName)}function Hd(e){return{"repeat-region":0,"conditional-region":1,text:2,richtext:3,attribute:4,"component-prop":5}[e]}function Gd(e){return e.startsWith("vcp-cms-")?0:e==="site-api-route"?1:e==="external-api"?2:3}function df(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=xb(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)&&ft(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)&&Yd(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)&&Yd(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 Yd(e){return k.isFunctionExpression(e)||k.isArrowFunctionExpression(e)}function ff(e,t){let n=e.functions.get(t)??e.functions.get("default");return n?e.functionVariables.get(n):void 0}async function pf(e,t){let n=await gf(t.file,e.source,t.exists);if(!n)return null;let r=await t.readFile(n);return ha(n,r,t.fileCache)}function mf(e,t){return e.isDefault?t.functions.get("default")??t.functions.get(e.localName)??null:t.functions.get(e.importedName)??null}async function gf(e,t,n){return lt(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 Kb(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 Jb=50,Xb=8*1024*1024;function Sf(e,t={}){let n=[],r=[],o=t.externalAdapters??[],i=Math.max(0,t.maxUndoEntries??Jb),s=Math.max(0,t.maxUndoBytes??Xb);return{prepareRewritePlan:a,execute:c,executeFilePlan:l,undo:u,redo:d};async function a(N){let X=[...N.steps].sort((H,q)=>H.order-q.order),M=X.filter(H=>H.type!=="invoke-external-adapter");if(M.length!==X.length)return{ok:!1,errorCode:"unsupported-operation",reason:"External adapter writes require a transactional prepare/commit/rollback contract."};let D=new Set(M.map(H=>H.file)),Z=await P(D),te=new Map(Z.map(H=>[H.file,H.exists===!1?"":H.content])),he;for(let H of M){let q=xf(H,te.get(H.file)??"");if(!q.ok)return{ok:!1,errorCode:q.errorCode,reason:q.reason};te.set(H.file,q.source),he=q.selectionRef??he}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:Z.find(xe=>xe.file===H)?.sha256??null}))},...he?{selectionRef:he}:{}}}async function c(N){let X=[...N.steps].sort((xe,It)=>xe.order-It.order),M=X.filter(xe=>xe.type!=="invoke-external-adapter"),D=X.filter(xe=>xe.type==="invoke-external-adapter"),Z=new Set(M.map(xe=>xe.file));if(M.length>0&&D.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,D);let te=await P(Z),he=new Map;for(let xe of te)he.set(xe.file,xe.exists===!1?"":xe.content);let H;for(let xe of M){let It=he.get(xe.file)??"",vt=xf(xe,It);if(!vt.ok)return{ok:!1,operationId:N.operationId,errorCode:vt.errorCode,reason:vt.reason,rolledBack:!1};he.set(xe.file,vt.source),vt.selectionRef&&(H=vt.selectionRef)}let q=await B([...he].map(([xe,It])=>({file:xe,content:It,exists:!0,version:0,sha256:ue(It)})),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(xe=>xe.version)),affectedFiles:[...Z],...H?{selectionRef:H}:{}})}async function l(N){let X=new Set(N.edits.map(q=>q.file)),M=await P(X),D=v(N,M);if(D)return{ok:!1,operationId:N.operationId,errorCode:"stale-version",reason:D.reason,affectedFiles:[D.file],rolledBack:!1};let Z=new Map(M.map(q=>[q.file,q])),te=N.edits.find(q=>q.operation==="create-only"&&Z.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 he=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:ue(q.content)}),H=await B(he,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:[...X]})}async function u(){let N=n.at(-1);if(!N)return{ok:!1,operationId:"",errorCode:"unknown",reason:"Nothing to undo"};let X=await B(N.preSnapshots,N.postSnapshots);return X.ok===!1?{ok:!1,operationId:N.operationId,errorCode:X.rolledBack?"writeback-failed":"rollback-failed",reason:X.reason,rolledBack:X.rolledBack}:(n.pop(),r.push(N),{ok:!0,operationId:N.operationId,kind:N.plan.kind,target:N.plan.target,resultVersion:Math.max(...X.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 X=await B(N.postSnapshots,N.preSnapshots);return X.ok===!1?{ok:!1,operationId:N.operationId,errorCode:X.rolledBack?"writeback-failed":"rollback-failed",reason:X.reason,rolledBack:X.rolledBack}:(r.pop(),n.push(N),p(),{ok:!0,operationId:N.operationId,kind:N.plan.kind,target:N.plan.target,resultVersion:Math.max(...X.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,X)=>N+g(X),0)}function g(N){return S(N.preSnapshots)+S(N.postSnapshots)}function S(N){return N.reduce((X,M)=>X+M.file.length+M.content.length,0)}async function C(N,X){let M=[];for(let D of X){let Z=D.capability??"write-text",te=o.find(H=>H.sourceType===D.sourceType&&(D.adapterId===void 0||H.adapterId===D.adapterId)&&(H.capabilities===void 0||H.capabilities.includes(Z)));if(!te)return{ok:!1,operationId:N.operationId,errorCode:"unsupported-operation",reason:`No external adapter registered for ${D.sourceType}`,rolledBack:!1};let he=await te.execute(D);if(!he.ok)return{ok:!1,operationId:N.operationId,errorCode:"writeback-failed",reason:he.reason??`External adapter failed for ${D.sourceType}`,rolledBack:!1};M.push(D.file)}return{ok:!0,operationId:N.operationId,kind:N.kind,target:N.target,resultVersion:0,affectedFiles:M}}function v(N,X){if(N.conflictPolicy!=="compare-and-swap")return null;let M=new Map(X.map(D=>[D.file,D]));for(let D of N.edits){if(D.operation==="create-only")continue;if(D.baseContentHash===void 0)return{file:D.file,reason:`Source file ${D.file} is missing baseContentHash. Reopen the file before saving.`};let Z=M.get(D.file),te=D.baseContentHash;if(te===null){if(Z?.exists!==!1)return{file:D.file,reason:`Source file ${D.file} was created or changed before save.`};continue}if(!te)return{file:D.file,reason:`Source file ${D.file} is missing baseContentHash. Reopen the file before saving.`};if(Z?.exists===!1||Z?.sha256!==te)return{file:D.file,reason:`Source file ${D.file} changed before save. Reload or explicitly overwrite the newer version.`}}return null}async function P(N){let X=[];for(let M of N)X.push(await w(M));return X}async function w(N){if(!await e.exists(N))return{file:N,content:"",version:0,exists:!1};let M=Math.max(1,e.getVersion(N)),D=await e.readFile(N);return{file:N,content:D,version:M,exists:!0,sha256:ue(D)}}async function B(N,X,M=new Set){let D=[];try{for(let Z of N){if(M.has(Z.file)){if(!e.createExclusive)throw new Error("Create-only write requires atomic exclusive-create support.");await e.createExclusive(Z.file,Z.content)}else await re(Z);let te=e.bumpVersion(Z.file);D.push(Z.file),Z.version=te}}catch(Z){let te=await ne(X.filter(H=>D.includes(H.file)));if(te.ok===!1)return{ok:!1,reason:`Writeback failed, then rollback failed for ${te.failedFiles.join(", ")}: ${yf(Z)}`,rolledBack:!1,instanceConflict:hf(Z)};let he=hf(Z);return{ok:!1,reason:`${he?"MATERIALIZATION_INSTANCE_CONFLICT: ":""}Writeback failed and committed files were restored: ${yf(Z)}`,rolledBack:!0,instanceConflict:he}}return{ok:!0,snapshots:N.map(zb)}}async function re(N){if(N.exists===!1){await e.deleteFile(N.file);return}await e.writeFile(N.file,N.content)}async function ne(N){let X=[];for(let M of N)try{await re(M),e.bumpVersion(M.file)}catch{X.push(M.file)}return X.length===0?{ok:!0}:{ok:!1,failedFiles:X}}}function hf(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="EEXIST"}function zb(e){let t=e.exists!==!1;return{file:e.file,content:t?e.content:"",version:e.version,exists:t,...t?{sha256:ue(e.content)}:{}}}function yf(e){return e instanceof Error?e.message:String(e)}function xf(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 Wb(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 Wb(e,t){let{request:n}=e;if(n.newAttrRaw!==null&&!gu(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!==ue(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:mu({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 bf(){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 Hb}from"node:crypto";import Vo from"node:fs/promises";import ya from"node:path";import{setTimeout as Gb}from"node:timers/promises";var Yb={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)}},Zb=new Set(["EACCES","EBUSY","EPERM"]),Qb=[10,20,40,80,160];async function qb(e,t,n){for(let r of Qb)try{await e.rename(t,n);return}catch(o){if(!eE(o))throw o;await Gb(r)}await e.rename(t,n)}function eE(e){return e instanceof Error&&"code"in e&&typeof e.code=="string"&&Zb.has(e.code)}async function Uo(e,t,n=Yb){let r=ya.dirname(e),o=ya.basename(e),i=ya.join(r,`.${o}.${process.pid}.${Hb()}.tmp`),s=!1;try{await n.mkdir(r,{recursive:!0}),await n.writeFile(i,t,"utf8"),await qb(n,i,e),s=!0}finally{if(!s)try{await n.rm(i,{force:!0})}catch{}}}import{randomBytes as gE}from"node:crypto";import Et from"node:path";import{parse as hE}from"@babel/parser";import yE from"@babel/traverse";import{COMPONENT_I18N_FILE_SUFFIX as Jo,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as kf,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as xE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as SE,SiteEditMaterializationSchema as bE,parseComponentI18nResourcesJson as EE}from"@vcp-dev/contracts";var If=/#[0-9a-fA-F]{3,8}\b|\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\s*\(/i,vf=/\b(?:bg-black|bg-white|text-white|text-black)(?:\b|\/)/g,tE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke)-\[#(?:[0-9a-fA-F]{3,8})\](?:\/\d+)?/g,nE=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*#[0-9a-fA-F]{3,8}[^'"]*['"]/g,rE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*rgba?\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,oE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,iE=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,sE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*(?:oklch|lab|lch|hsla?)\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,aE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*(?:oklch|lab|lch|hsla?)\([^)]+\)[^'"]*['"]/gi,cE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*color-mix\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,lE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*color-mix\([^'"]*['"]/gi,uE=/\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,dE=/var\(\s*--(?:_|private-|vcp-)[^)]+\)/gi,fE=/#[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([...Ge(e,tE),...Ge(e,nE),...Ge(e,rE),...Ge(e,t.includeRgbBackgroundImage?oE:iE),...t.includeExtendedColorFunctions?[...Ge(e,sE),...Ge(e,aE)]:[]]),r=Ko([...Ge(e,cE),...Ge(e,lE)]).filter(o=>t.colorMixPolicy==="always"||If.test(o));return n.push(...r.filter(o=>!n.includes(o))),t.rejectTailwindPalette&&n.push(...Ge(e,uE).filter(o=>!n.includes(o))),t.rejectAnyRawColorLiteral&&n.push(...Ge(e,fE).filter(o=>!n.includes(o))),{hardCodedSurfaceHits:Ko(Ge(e,vf)),hardCodedSurfaceOccurrences:mE(e),rawColorHits:n,privateTokenHits:t.rejectPrivateTokens?Ko(Ge(e,dE)):[]}}function Ge(e,t){return e.match(new RegExp(t.source,t.flags))??[]}var Ef=160,pE=/((?:[a-z][a-z0-9-]*(?:\[[^\]]*\])?:)+)$/;function mE(e){let t=new RegExp(vf.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=pE.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>Ef?`${m.slice(0,Ef-1)}\u2026`:m})}return o}function Ko(e){return[...new Set(e)]}var ba="components/site/generated",Cf="{{$INSTANCE}}",Xo=5,IE=/^[a-z][a-z0-9-]{0,48}$/,vE=/^[a-f0-9]{8}$/,Rf=/\.tsx?$/,kE=/\.json$/,CE=/\.(?:tsx?|json)$/,RE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,wE=["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=yE,NE=typeof Sa=="function"?Sa:Sa.default;function PE(e){let t=Array.isArray(e.manifest.files)?e.manifest.files:[];if(t.length>kf)return{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab file count exceeds the reusable limit."}};let n=$E(t);if(n)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Static prefab resolves duplicate target path: ${n}`,path:n}};let r=bE.safeParse(e.manifest);if(!r.success)return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab manifest failed schema validation."}};let o=LE(e.generatedRoot);if(!o)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Generated root must be ${ba}.`,path:e.generatedRoot}};if(!_f(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=Pf(r.data.files),s=Pf(e.controlledFiles);if(!VE(i,s))return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Controlled file list must exactly match the manifest file templates."}};if(i.size>kf)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>xE)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>SE?{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 AE(e){let t=PE(e);if(!t.ok)return t;let n=t.data.generatedRoot,r=_f(e.manifest.instanceBaseName),o=Math.max(1,Math.min(Xo,e.maxAttempts??Xo));for(let i=0;i<o;i+=1){let s=BE(e.instanceNameGenerator?.()??gE(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=Mf(n,a),l=TE({manifest:e.manifest,generatedRoot:n,instanceName:a,instanceRoot:c,allowedExternalImports:e.allowedExternalImports??wE});if(!l.ok)return l;if(!await _E(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 Tf(e){let t=Math.max(1,Math.min(Xo,e.maxAttempts??Xo));for(let n=0;n<t;n+=1){let r=await AE({...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 TE(e){let t=[],n=new Set;for(let i of e.manifest.files){let s=wf({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=wf({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=FE(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 _E(e,t,n){if(await e(t))return!0;for(let r of n)if(await e(r.path))return!0;return!1}function wf(e){if(e.pathTemplate.split(Cf).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(Cf,e.instanceName),n=jE(t);return n?Mf(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||!CE.test(n)||RE.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 FE(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(kE.test(d.path)){if(d.path.endsWith(Jo)){let g=EE(d.content);if(!g.success)return on("MATERIALIZATION_DATA_UNSUPPORTED",g.error.message,d.path);c.set(d.path,new Set)}else try{JSON.parse(d.content)}catch{return on("MATERIALIZATION_DATA_UNSUPPORTED","Static prefab JSON file must contain valid JSON.",d.path)}continue}let p;try{p=hE(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(!Rf.test(d.path))continue;let p=s.get(d.path),m=null;if(NE(p,{ImportDeclaration(g){let S=Nf({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=ME({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=Nf({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=Af(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=Af(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(!Rf.test(n))return on("MATERIALIZATION_ENTRY_INVALID","Static prefab entry must be a .ts/.tsx source module.",n);let l=s.get(n);if(!l)return on("MATERIALIZATION_ENTRY_INVALID","Static prefab entry must resolve to a controlled source file.",n);if(!OE(l,r))return on("MATERIALIZATION_EXPORT_MISSING","Static prefab entry does not declare the manifest export.",n);for(let[d,p]of c)if(p.size!==1)return on("MATERIALIZATION_IMPORT_FORBIDDEN","Each component .i18n.json file must have exactly one same-name Client Component static importer.",d);return DE(n,a).size!==e.length?on("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 Nf(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=Et.posix.normalize(Et.posix.join(Et.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 ME(e){let t=Et.posix.dirname(e.importer),n=Et.posix.dirname(e.imported),r=Et.posix.basename(e.importer).replace(/\.tsx?$/,""),o=Et.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 OE(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 DE(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 on(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{file:n}:{}}}}function LE(e){let t=Ff(e);return t===ba?t:null}function BE(e){let t=e.trim().toLowerCase();return vE.test(t)?t:null}function _f(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 IE.test(t)?t:null}function Ff(e){if(!e||e.startsWith("/")||e.includes("\\"))return null;let t=Et.posix.normalize(e);return t==="."||t.startsWith("../")||t.includes("/../")||t.includes("//")?null:t}function jE(e){let t=Ff(e);return!t||t!==e?null:t}function Mf(...e){return Et.posix.join(...e)}function Pf(e){return new Set(e.map(t=>t.pathTemplate))}function $E(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 VE(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function Af(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 UE}from"node:crypto";import zo from"node:path";import{parse as Ca}from"@babel/parser";import KE from"@babel/traverse";import*as $f from"@babel/types";import{COMPONENT_I18N_FILE_SUFFIX as Ia,PageResourceArtifactSchema as JE,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as XE,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as zE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as WE,parseComponentI18nResourcesJson as HE}from"@vcp-dev/contracts";var va="{{$INSTANCE}}",GE=/\{\{\$PAGE_ROUTE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,YE=/\{\{\$PAGE_TITLE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,ka="components/site/generated",ZE=/\.(?:tsx?|json)$/,QE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,qE=["react","react/","next","next/","lucide-react","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],eI=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),Ea=KE,tI=typeof Ea=="function"?Ea:Ea.default;async function Ra(e){let t=JE.safeParse(e.artifact);if(!t.success)return se("Page resource artifact failed contract validation.");let n=t.data,r=e.randomHex??(()=>UE(4).toString("hex")),o=Math.max(1,Math.min(e.maxAttempts??5,5)),i=fI(r());if(!i)return se("Random instance suffix must be 8 lowercase hex chars.");let s=`${pI(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=Of({materialization:w.materialization,packageInstanceId:s,routeByPage:a,titleByPage:c});if(!B.ok)return B;for(let re of B.files){let ne=Lf(re,d,u);if(ne)return ne}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],ne=Of({materialization:B.materialization,packageInstanceId:s,routeByPage:a,titleByPage:c,pageEntryTarget:re.route_file_path,pageTitle:re.title});if(!ne.ok)return ne;for(let M of ne.files){let D=Lf(M,d,u);if(D)return D}p.add(ne.entry),g.set(ne.entry,ne.entryExport),S.push({entry:ne.entry,declaredComponentIds:new Set(B.components.map(M=>M.component_id))});let N=u.find(M=>M.file===re.route_file_path);if(!N)return se("Page materialization entry did not resolve to its final route file.",re.route_file_path);if(sI(N.content,re.route_file_path)!==re.final_route)return se(`Page ${B.template_page_id} requires a static PAGE_SEO.path equal to ${re.final_route}.`,re.route_file_path)}let v=rI(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=oI(u);return P||(u.sort((w,B)=>w.file.localeCompare(B.file)),{ok:!0,packageInstanceId:s,pages:l,files:u})}function Of(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:Df(o.pathTemplate,e.packageInstanceId);if(!s)return se("Materialization path cannot be mapped into the package namespace.",o.pathTemplate);let a=nI(o.content,e.packageInstanceId,e.routeByPage,e.titleByPage);if(!a.ok)return a;let c=i&&e.pageTitle!==void 0?aI(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??Df(t,e.packageInstanceId);return!r||!n.some(o=>o.file===r)?se("Materialization entry must match one controlled source file.",t):{ok:!0,files:n,entry:r,entryExport:e.materialization.entry.export}}function nI(e,t,n,r){let o,i=e.replace(GE,(c,l)=>{let u=n.get(l);return u||(o=l,c)});if(o)return se(`Page route placeholder references unknown template page: ${o}`);let s=i.replace(YE,(c,l)=>{let u=r.get(l);return u?JSON.stringify(u):(o=l,c)});if(o)return se(`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}}")?se("Materialization contains an unresolved placeholder."):{ok:!0,data:a}}function Df(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}/`)||!ZE.test(a)||QE.test(a)?null:a}function Lf(e,t,n){return t.has(e.file)?se(`Page resource materializations resolve duplicate target: ${e.file}`,e.file):(t.add(e.file),n.push(e),null)}function rI(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 se("Materialization JSON file must contain valid JSON.",m.file)}if(m.file.endsWith(Ia)&&!HE(m.content).success)return se("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=uI(m.file,P,s,a);if(!w.allowed)return se(`Materialization import is outside the controlled package: ${P}`,m.file);w.internalPath&&c.get(m.file).add(w.internalPath)}let C;if(tI(S,{Identifier(v){v.isReferencedIdentifier()&&eI.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 se(`Materialization source uses forbidden capability: ${C}`,m.file)}catch{return se("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 se("Materialization source violates the public theme token policy.",m.file)}if([...t].some(m=>!s.has(m)))return se("Materialization entry is outside the controlled package.");for(let m of t)if(m.endsWith(".json"))return se("Materialization JSON files cannot be package entries.");for(let[m,g]of i){let S=l.get(m);if(!S||!iI(S,g))return se("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=jf(m.entry,c);for(let S of m.declaredComponentIds){let C=r.get(S);if(!C||!g.has(C))return se(`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 se(`Page entry imports undeclared component: ${C}`,m.entry)}}let d=new Set;for(let m of t)for(let g of jf(m,c))d.add(g);if(d.size!==e.length)return se("Every materialization file must be reachable from a package entry.");let p=dI(e,l,c);return p||{ok:!0}}function oI(e){if(e.length>XE)return se("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>zE)return se("Page resource file exceeds the content byte limit.",n.file);t+=r}return t>WE?se("Page resource exceeds the aggregate content byte limit."):null}function iI(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 sI(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||!cI(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 aI(e,t,n){let r;try{r=Ca(e,{sourceType:"module",sourceFilename:n,plugins:["jsx","typescript"]})}catch{return se("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 se("Page materialization PAGE_SEO must be a static object.",n);let c=a.properties.find(u=>u.type==="ObjectProperty"&&!u.computed&&lI(u.key));if(!c||c.type!=="ObjectProperty")return se("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"?se("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 se("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&&$f.isExpression(t)?t:null}function cI(e){return e.type==="Identifier"&&e.name==="path"||e.type==="StringLiteral"&&e.value==="path"}function lI(e){return e.type==="Identifier"&&e.name==="title"||e.type==="StringLiteral"&&e.value==="title"}function uI(e,t,n,r){if(t.startsWith(`@/${r}/`)){let s=t.slice(2),a=Bf(s,n);return a?{allowed:!0,internalPath:a}:{allowed:!1}}if(!t.startsWith("."))return{allowed:qE.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=Bf(o,n);return i&&(i.startsWith(`${r}/`)||i.startsWith("app/"))?{allowed:!0,internalPath:i}:{allowed:!1}}function Bf(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 dI(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 se("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 se("Component i18n resources must have exactly one same-name Client Component static importer.",s)}return null}function jf(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 fI(e){return/^[a-f0-9]{8}$/.test(e)?e:null}function pI(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"page-resource"}function se(e,t){return{ok:!1,code:"MATERIALIZATION_REJECTED",message:e,...t?{path:t}:{}}}import{COMPONENT_I18N_FILE_SUFFIX as mI,parseComponentI18nResourcesJson as gI,resolveSiteTextDirection as hI,SiteLocaleSchema as yI}from"@vcp-dev/contracts";var xI=["i18next","react-i18next"],SI="components/ui/site-locale-provider.tsx",bI="components/ui/component-i18n-provider.tsx",Vf="app/layout.tsx";async function Na(e){let t=e.files.filter(p=>p.path.endsWith(mI));if(t.length===0)return{ok:!0};for(let p of["package.json",Vf,SI,bI])if(!await e.exists(p))return sn(`Target snapshot is missing required i18n host file: ${p}`);let n;try{n=JSON.parse(await e.readFile("package.json"))}catch{return sn("Target snapshot package.json is invalid.")}let r=Uf(n)&&Uf(n.dependencies)?n.dependencies:{},o=xI.filter(p=>typeof r[p]!="string"||r[p].trim().length===0);if(o.length>0)return sn(`Target snapshot must already declare: ${o.join(", ")}.`);let i=await e.readFile(Vf),s=wa(i,"html","lang"),a=wa(i,"html","dir"),c=wa(i,"SiteLocaleProvider","locale"),l=yI.safeParse(s);if(!l.success||!a||!c||s!==c||a!==hI(l.data))return sn("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 sn("Target snapshot root layout is not wired to SiteLocaleProvider.");let u=l.data,d=u.split("-")[0];for(let p of t){let m=gI(p.content);if(!m.success)return sn(`Component i18n resource is invalid: ${p.path}.`);if(!Object.hasOwn(m.data,u)&&!Object.hasOwn(m.data,d))return sn(`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 Uf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function sn(e){return{ok:!1,message:e}}import{HOME_PAGE_URL_PATH as KI}from"@vcp-dev/contracts";import{parse as WP}from"@babel/parser";import{parse as mP}from"@babel/parser";import{FormBlockIdSchema as hP,FormSpecV1Schema as yP}from"@vcp-dev/contracts";var br="components/site/generated/forms",xP=`${br}/vcp-form-runtime.tsx`,Ho="[A-Za-z0-9][A-Za-z0-9_-]{0,127}",SP=new RegExp(`^${br}/form-(${Ho})\\.spec\\.ts$`),bP=new RegExp(`^${br}/form-(${Ho})\\.tsx$`),EP=new RegExp(`^@/${br}/form-(${Ho})$`),IP=new RegExp(`(?:^|/)${br}/form-(${Ho})(?:\\.tsx?)?$`);var vP=Symbol("invalid-literal");import{createHash as RP}from"node:crypto";import{posix as NP}from"node:path";import{parse as AP}from"@babel/parser";import{FormSpecV1Schema as _P}from"@vcp-dev/contracts";var FP=Symbol("dynamic");import{parse as EI}from"@babel/parser";function Go(e){return Array.isArray(e)?e.filter(t=>!!t&&typeof t=="object"&&typeof t.type=="string"):[]}var II=/^(?:src\/)?app\/(.*)page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function vI(e){let t=II.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 kI(e){let t=e;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function Kf(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function CI(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=Kf(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=vI(t);if(r===null)return{found:!1,seo:null,diagnostics:n};let o;try{o=EI(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=CI(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=Kf(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=kI(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 RI}from"@babel/parser";var Jf=["page","anchor","external","email","phone","group","file"],wI=["link","cta"],zf=["description","badge","iconKey"],Ta=["label","targetType","href","role","openInNewTab","nofollow","children",...zf],NI=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 PI(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function Xf(e){let t=e;return t?.type==="BooleanLiteral"&&typeof t.value=="boolean"?t.value:void 0}function _a(e){let t=[],n;try{n=RI(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=Wf(i,`NAV_ITEMS[${s}]`,t);a&&o.push(a)}),{items:o,diagnostics:t}}function Wf(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=PI(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||!Jf.includes(i))return n.push({severity:"fatal",path:`${t}.targetType`,message:`targetType must be one of ${Jf.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 zf){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))NI.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=Wf(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&&(wI.includes(c)?s.role=c:n.push({severity:"warning",path:`${t}.role`,message:"role ignored: not link/cta"})),r.openInNewTab!==void 0){let l=Xf(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=Xf(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 AI}from"@babel/parser";function vr(e){return Array.isArray(e)?e:[]}function Hf(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=Gf(t);if(!n)return{status:"unsupported",source:e};let r;try{r=AI(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=Hf(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(_I(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=TI(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 TI(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 Hf(t.value)}}function Gf(e){let t=e.trim();return t.startsWith("/")?t==="/"?t:t.replace(/\/+$/,""):null}function _I(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"&&Gf(n??"")===t}import nA from"node:fs";import oA from"node:path";var FI=/^page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function kr(e){let t=e.map(r=>UI(r.path)),n=MI(t);return n?t.filter(r=>DI(n,r)).map(r=>({routeId:LI(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=VI(t),s=i&&(o===i||o.startsWith(`${i}/`))?o.slice(i.length)||"/":o,a=s.startsWith("/")?s:`/${s}`;return a==="/"?"/":a.replace(/\/+$/,"")}function MI(e){return e.some(r=>r.startsWith("app/")&&!OI(r))?"app":e.some(r=>r.startsWith("src/app/"))?"src/app":null}function OI(e){return e.startsWith("app/_vcp/")||e.startsWith("src/app/_vcp/")}function DI(e,t){if(!t.startsWith(`${e}/`))return!1;let n=t.slice(t.lastIndexOf("/")+1);return FI.test(n)?t.slice(e.length+1,-n.length-1).split("/").filter(Boolean).every(r=>!r.startsWith("_")):!1}function LI(e,t){let n=t.slice(e.length+1).split("/").slice(0,-1).map(jI).filter(r=>!!r);return n.length===0?"/":`/${n.join("/")}`}function BI(e){return e.startsWith("(")&&e.endsWith(")")}function jI(e){return!e||e.startsWith("@")||e.startsWith("_")||BI(e)?null:$I(e)}function $I(e){return e.replace(/^\((?:\.|\.\.|\.\.\.)\)/,"")}function VI(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function UI(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}var JI="components/site/generated/",Cr=[".tsx",".ts",".jsx",".js"];function Yf(e){if(e.expectedUrlPath===KI)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=XI(e.files);if(!o.ok)return o.error;let i=o.graph,s=GI(r,i),a=YI(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 XI(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")||!zI(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(WI(c))continue;let l=_i(r,c),u=HI(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 zI(e){let t=e.toLowerCase();return Cr.some(n=>t.endsWith(n))}function WI(e){return!!(/\.([a-z0-9]+)$/i.exec(e)&&!Cr.some(n=>e.endsWith(n)))}function HI(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 GI(e,t){let n=new Set,r=[...t.get(e)??[]];for(;r.length>0;){let o=r.pop();!o.startsWith(JI)||n.has(o)||(n.add(o),r.push(...t.get(o)??[]))}return n}function YI(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 ZI}from"@vcp-dev/contracts";var QI={affectedCompositions:[]};function np(e){let t=null,n=new WeakMap;async function r(){return t??=qI(e),t}return{async prepareAppend(o){let i=await e.readIndex(),s=await e.stageAppend(ep(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);Zf(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(Zf(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(ep(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 Zf(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 qI(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=ev(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 qf(e,n,r.preSnapshots),postSnapshots:await qf(e,n,r.postSnapshots)}}async function qf(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(rv(r,o.blobName))).toString("utf8"):"";return{file:o.file,content:i,version:o.version,exists:o.exists,...o.sha256?{sha256:o.sha256}:{}}}))}function ep(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=tv(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 ev(e){if(!op(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:rp(t.provenance)}:{},preSnapshots:tp(t.preSnapshots,"preSnapshots"),postSnapshots:tp(t.postSnapshots,"postSnapshots")}}function tv(e){if(e.provenance!==void 0)return rp(e.provenance);if(e.composition)return{initiatingComposition:e.composition,affectedCompositions:[]}}function rp(e){let t=ZI.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 tp(e,t){return e.map((n,r)=>{if(!op(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&&!nv(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 nv(e){return/^sha256:[0-9a-f]{64}$/.test(e)}function rv(e,t){let n=e.get(t);if(!n)throw new Error(`durable history blob is missing: ${t}`);return n}function op(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import ip 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 ap(e,t,n){let r=[],o=new Set;for(let i of e.intents){let s=av(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=()=>ov(e);return e.mutex?e.mutex.runExclusive(t):t()}async function ov(e){let t=await ap(e.plan,e.overlay,e.exists);if(!t.ok)return{ok:!1,stage:"precheck",reason:t.reason,error:t,recoveryRequired:!1};let n=iv(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 sp("swap",l,"Live state swap failed after durable publish.")}try{await e.finalizeCandidate?.(c)}catch(l){return sp("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 iv(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:sv(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 sp(e,t,n){return{ok:!1,stage:e,reason:n,error:t,recoveryRequired:!0}}function sv(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 av(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)||ip.isAbsolute(e))return{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`};let t=ip.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 cp(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 lp(e){return{path:e.path,code:e.code,message:e.message,...e.details?{details:JSON.parse(JSON.stringify(e.details))}:{}}}function cv(e){return e.map(t=>`${t.code} (${t.path}): ${t.message}`).join("; ")}var Rr=class extends Error{constructor(t){let n=t.map(lp);super(cv(n)),this.name="RouteBuildDiagnosticsError",this.diagnostics=n}};function up(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(lp)}:{routeId:e,message:n}}function Ba(e){return e.map(({routeId:t,message:n})=>`${t}: ${n}`).join("; ")}function dp(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 lv,SiteEditCompositionSelectorSchema as uv}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 fp(e,t){throw new Pe("INVALID_COMPOSITION",e,{value:t})}function qo(e){let t=lv.safeParse(e);return t.success?t.data:fp("Invalid SiteEditCompositionContext.",e)}function pp(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=uv.safeParse(l);if(!u.success)return fp("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 xv=/^(?:src\/)?app\/.*\/?page\.[cm]?[jt]sx?$/,Sv=["layout.tsx","layout.ts","layout.jsx","layout.js","layout.mjs","layout.cjs"],mp=32,gp=256;function bv(e){return{expectedIndexDigest:e.digest,publishedIndexDigest:e.digest,publishedCursor:e.cursor,publishedCurrentId:e.currentId}}var hp={maxEntries:50,maxBytes:8*1024*1024};function Ev(){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 Iv(){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>hp.maxEntries||vv(e)>hp.maxBytes;)e.shift()}}function vv(e){return e.reduce((t,n)=>t+kv(n),0)}function kv(e){return yp(e.preSnapshots)+yp(e.postSnapshots)+Cv(e.provenance)}function Cv(e){return e?new TextEncoder().encode(JSON.stringify(e)).byteLength:0}function yp(e){return e.reduce((t,n)=>t+n.file.length+n.content.length,0)}function xp(e,t){return{key:dv(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 Rv(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}},an=class extends Error{constructor(t){super(Ba(t)),this.failedRoutes=t}};function Sp(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 wv=/\.(?:[cm]?[jt]sx?)$/i,Nv=/\.json$/i,Pv=/\.(?:css|scss|sass)$/i,Av=/\.mdx$/i,Tv=/\.ya?ml$/i;function _v(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 Fv(e){return{kind:e.isProxy?"component-proxy":"jsx-node",file:e.file,componentName:e.componentName,isProxy:e.isProxy}}function Mv(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=Cp(await e.listFiles(r)),i=new Map(o.files.map(a=>[a.path,a]));for(let[a,c]of n)if(Ov(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 Ov(e,t){return t.length===0?!0:t.some(n=>e===n||e.startsWith(`${n}/`))}function Cp(e){return Array.isArray(e)?{files:e}:e}function Dv(e){if(!mv(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!==hv||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=pv(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(wv.test(e.path)){let t=ct({source:e.content,profile:Jt({filePath:e.path,source:e.content})});if(!t.ok)return{ok:!1,errorCode:"ast-error",message:t.diagnostic.message,details:{path:e.path}}}if(Nv.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(Pv.test(e.path)){let t=bp({content:e.content,path:e.path,profile:"css"});if(!t.ok)return t}if(Av.test(e.path)){let t=bp({content:e.content,path:e.path,profile:"mdx"});if(!t.ok)return t}if(Tv.test(e.path))try{yv(e.content)}catch(t){return{ok:!1,errorCode:"ast-error",message:`YAML parse failed: ${Fe(t)}`,details:{path:e.path}}}return{ok:!0}}function bp({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 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(`
7
7
  `,d);if(g===-1){l=!0;break}d=g,l=!0;continue}if(c){l=p===`
8
8
  `||p==="\r";continue}if(s){p==="*"&&m==="/"&&(s=!1,d+=1),l=p===`
9
9
  `||p==="\r";continue}if(a){p===`
10
10
  `||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
11
  `||p==="\r"))return jn(t,`Unterminated string literal in ${t}.`);l=p===`
12
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??Ev(),r=bf(),o=pp({compositions:e.compositions,initialDocumentVersions:e.initialDocumentVersions}),i=new Map,s=new Map,a=new Set,c=null,l=e.history??(e.historyStore?np(e.historyStore):Iv()),u=Sf(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 A=>await n.exists(A.path)?ue(await n.readFile(A.path)):null));if(dp({journal:y,index:h,observedFileDigests:I})!=="ambiguous"){await f.clearTransactionJournal(y.transactionId);let A=await f.readStatus();A.recoveryRequired||(await f.cleanupTmp(),A=await f.readStatus()),g=A.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=xp(f.context,f.entryFile);i.set(f.key,y),ne(y,y.dependencyFiles)}function ne(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 X(f){let y=new Set;for(let h of f)for(let I of s.get(h)??[])y.add(I);return y}function M(f){for(let y of f)if(!s.has(y))return!1;return!0}async function D(f,y,h,I,R){let A=new Map,F=Id(R.values()),L=new Map,T=typeof n.exists=="function"?$=>n.exists($):async()=>!1;for(let[$,K]of f.elements){let me=y.nodes.get($);if(!me)continue;let Q=h.get(K.sourceFile)??I.get(K.sourceFile),Ie=new Map,Y=new Map,ge=new Map,_=[];for(let pe of K.textSegments){if(!Q){Ie.set(pe.index,null);continue}let Kn=await vd({file:K.sourceFile,source:Q,segment:pe,readFile:Ze=>n.readFile(Ze),exists:T,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Ze,adapterId:Ci,capabilities:Ri})=>({sourceType:Ze,adapterId:Ci,capabilities:Ri})),functionCallContracts:e.functionCallContracts,fileCache:F}),we=await Ys({file:K.sourceFile,source:Q,target:{kind:"text-segment",segment:pe},readFile:Ze=>n.readFile(Ze),exists:T,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Ze,adapterId:Ci,capabilities:Ri})=>({sourceType:Ze,adapterId:Ci,capabilities:Ri})),functionCallContracts:e.functionCallContracts,fileCache:F}),gn=_v(Kn);Ie.set(pe.index,gn),Y.set(pe.index,Kn),ge.set(pe.index,we),_.push({editable:pe.editable,source:gn})}let j=new Map;if(Q)for(let pe of K.attributes??[]){let Kn=await kd({file:K.sourceFile,source:Q,sourceRange:pe.sourceRange,expression:pe.source?.expression??pe.value,sourceInfo:pe.source,readFile:we=>n.readFile(we),exists:T,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:we,adapterId:gn,capabilities:Ze})=>({sourceType:we,adapterId:gn,capabilities:Ze})),functionCallContracts:e.functionCallContracts,fileCache:F});j.set(pe.name,Kn)}let z=ql(Fv(me.writeTarget),_),oe=ou({key:$,element:K,graph:f,provenances:ge}),Se=cu(K),Je=lu(K),pn=uu(K),mn=Q?await Zd({element:K,graph:f,file:K.sourceFile,source:Q,readFile:pe=>n.readFile(pe),exists:T,fileCache:L}):void 0,Vt=f.regions.find(pe=>pe.kind==="conditional-region"&&pe.childKeys.includes($)),Te,Un=Vt?.sourceCandidates?.[0];if(Q&&Vt&&Un?.kind==="conditional-branch"){let pe=await Ys({file:K.sourceFile,source:Q,target:{kind:"conditional-branch",candidate:Un},readFile:we=>n.readFile(we),exists:T,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:we,adapterId:gn,capabilities:Ze})=>({sourceType:we,adapterId:gn,capabilities:Ze})),functionCallContracts:e.functionCallContracts,fileCache:F});Te={currentBranch:Vt.childKeys.indexOf($)<=0?"then":"else",availableBranches:Vt.childKeys.length>1?["then","else"]:["then"],conditionExpression:Un.conditionExpression,provenance:{finalSource:pe.finalSource?{kind:pe.finalSource.kind,file:pe.finalSource.file,displayPath:pe.finalSource.displayPath}:null,chain:pe.chain.map(we=>({kind:we.kind,file:we.file,displayName:we.displayName,canEditHere:we.canEditHere})),confidence:pe.confidence,editMode:pe.editMode,diagnostics:pe.diagnostics.map(we=>({code:we.code,message:we.message}))}}}A.set($,{textSources:Ie,textTargets:Y,elementPropertyTargets:j,provenances:ge,writeTarget:z,componentSemantic:oe,contentModel:Se,mediaModel:Je,styleSource:pn,conditional:Te,dynamicData:mn})}return A}function Z(f){return typeof n.getVersion=="function"?n.getVersion(f):0}function te(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 he(f){return i.get(f)?.graph?.version??o.initialVersions.get(f)??0}function H(f){try{return he(o.resolveSelector(f.composition).key)}catch{return 0}}async function q(f,y,h={}){let I=i.get(f);if(!I)return null;let R=h.sourceCache??Da(d,[]),A=await xe(I.entryFile),{graph:F,allSources:L,diagnostics:T,parsedModules:$,entryModule:K}=await Gc(I.entryFile,y,Te=>n.readFile(Te),typeof n.exists=="function"?Te=>n.exists(Te):async()=>!1,{additionalEntries:A,version:I.graph?.version??1});if(T.length>0)throw new Rr(T);let me=new Map;for(let Te of L.keys())me.set(Te,Z(Te));let Q=Math.max(te(I,me),h.minimumVersion??0);h.changed&&Q<=(I.graph?.version??0)&&(Q=(I.graph?.version??0)+1),F.version=Q;for(let[Te,Un]of L)La(R,Te,Un,gp);let Ie=await It(I.composition,I.entryFile,L,R);F.routeId=I.routeId,F.composition=I.composition;let Y=Yc(F),ge=Qc(Y,F),_=await D(F,Y,L,R,$),j=dm(F,ge,_),z=um(_),oe=Hv(Hl(F,Y,ge,{canUpdateTextByKey:j,dynamicDataSummaryByKey:z}),F,_),Se=$l({route:I.routeId,composition:I.composition,entryFile:I.entryFile,version:Q,source:y,ast:K?.ast}),Je=Vl(Se);Se.ok&&Bv(oe,F,Se.projection);let pn={...oe,composition:I.composition,...Ie?{styleContext:Ie}:{},pageComposition:Je},mn=new Set([I.entryFile,...L.keys()]);if(Ie){mn.add(Ie.entryCss.path);for(let Te of Ie.stylesheets)mn.add(Te.path)}let Vt={...I,dependencyFiles:mn,graph:F,topology:Y,capabilities:ge,document:pn,pageComposition:Je,pageCompositionProjection:Se.projection,pagePlacementByKey:Se.ok?Se.projection.placementByKey:null,pagePlacementUnitByKey:Se.ok?Se.projection.placementUnitByKey:null,pageUnitByKey:Se.ok?Se.projection.unitByKey:null,pagePlacementsByUnitKey:Se.ok?Se.projection.placementsByUnitKey:null,documentIndex:Rv(pn),detailProjections:_,fileVersions:me,styleContext:Ie};if(h.publish===!1)return Vt;Bn(d,R);for(let Te of R.keys())p.delete(Te);return ne(I,mn),Object.assign(I,Vt),I}async function xe(f){let y=[];for(let h of Uv(f))typeof n.exists=="function"&&await n.exists(h)&&y.push({file:h,source:await n.readFile(h)});return y}async function It(f,y,h,I){let R=[];for(let[$,K]of h){if($a($)){R.push($);continue}for(let me of Jv(K)){let Q=vp($,me);Q&&R.push(Q)}}if(!R.length){for(let $ of Kv(y))if(await xc($)){R.push($);break}}let A=new Map,F=Np(R).slice(0,mp);for(;F.length>0&&A.size<mp;){let $=F.shift();if(A.has($)||!$a($))continue;let K=await vt($,I);if(K!==null){A.set($,{path:$,content:K});for(let me of Xv(K)){let Q=vp($,me);Q&&!A.has(Q)&&!F.includes(Q)&&F.push(Q)}}}let L=[...A.values()].map($=>({...$,hash:ue($.content)})),T=L[0];return T?{composition:f,revision:ue(JSON.stringify(L.map(({path:$,hash:K})=>({path:$,hash:K})))),entryCss:T,stylesheets:L.slice(1)}:null}async function vt(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,gp),I}async function xc(f){return typeof n.exists=="function"?n.exists(f):!1}function um(f){let y=new Map;for(let[h,I]of f)I.dynamicData?.bindings.length&&y.set(h,lf(I.dynamicData.bindings));return y}function dm(f,y,h){let I=new Map;for(let[R,A]of f.elements){if(!y.get(R)?.canUpdateText){I.set(R,!1);continue}let L=h.get(R),T=A.textSegments.some($=>{if(!$.editable)return!1;let K=L?.provenances.get($.index)??null;return!K||fm(K)});I.set(R,T)}return I}function fm(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):X(h);if(!I&&(R.size===0||!M(h)))for(let T of i.values())Sc(T,h)&&R.add(T.key);let A=!I&&R.size===0&&h.some(Ip),F=y.publish===!1?Da(d,h):void 0,L={rebuiltRoutes:[],failedRoutes:[],...y.publish===!1?{candidateRouteStates:[],candidateSourceCache:F}:{}};for(let T of i.values())if(!(y.excludedCompositionKeys?.has(T.key)||!(R.has(T.key)||A)))try{let K=!!T.graph,me=await n.readFile(T.entryFile),Q=await q(T.key,me,{...y,...F?{sourceCache:F}:{}});Q?.graph&&(L.rebuiltRoutes.push({documentChanged:K,composition:T.composition,routeId:T.routeId,version:Q.graph.version}),L.candidateRouteStates?.push({composition:T.composition,key:T.key,routeId:T.routeId,state:Q}))}catch(K){L.failedRoutes.push({...up(T.routeId,K),composition:T.composition})}return L}function un(f){let y=[...new Set(f)],h=X(y);if(h.size>0&&M(y))return[...h];for(let I of i.values())Sc(I,y)&&h.add(I.key);return[...h]}function pm(f){let y=new Set(un(f));return o.entries.filter(h=>y.has(h.key)).map(h=>h.context)}function mm(f){return[...new Set(un(f))].sort((h,I)=>h<I?-1:h>I?1:0).map(h=>o.getByKey(h)?.context).filter(h=>h!==void 0)}function gm(f,y){let h=new Set(un(y)),I=f.provenance?.affectedCompositions??[];if(I.length===0)return h;if([...new Set(I.map(A=>o.resolveContext(A).key))].some(A=>!h.has(A)))throw new Error("History provenance does not match the affected composition index.");return h}function hm(f,y){let h=f.composition??f.provenance?.initiatingComposition;if(h){let A=o.resolveContext(h);return{context:A.context,key:A.key}}let I=[...new Set(un(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 ym();let h=[...a];a.clear();let I=await Ec(h);if(I.length===0)continue;let R=un(I);for(let L of R){let T=i.get(L)?.composition;T&&r.emit({type:"graph-invalidated",composition:T})}let{rebuiltRoutes:A,failedRoutes:F}=await Br(I,{changed:!0});for(let{documentChanged:L,composition:T,version:$}of A)r.emit({type:"graph-ready",composition:T,version:$}),L&&r.emit({type:"document-changed",composition:T,version:$});for(let{composition:L,message:T}of F)y=!0,r.emit({type:"graph-error",composition:L,message:T})}}finally{c=null,t!=="disposed"&&(t=!y&&[...i.values()].some(h=>h.graph)?"ready":"idle"),a.size>0&&bc([])}})())}async function ym(){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(!Lv(R))try{if(await n.exists(h))continue}catch{continue}p.add(h),y.push(h)}}return y}function Ic(f){cp(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=un(y);for(let A of h){let F=i.get(A)?.composition;F&&r.emit({type:"graph-invalidated",composition:F})}let{rebuiltRoutes:I,failedRoutes:R}=await Br(y,{changed:!0});for(let{documentChanged:A,composition:F,version:L}of I)r.emit({type:"graph-ready",composition:F,version:L}),A&&r.emit({type:"document-changed",composition:F,version:L});for(let{composition:A,message:F}of R)r.emit({type:"graph-error",composition:A,message:F})}async function xm(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 Sm(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=Dv(y);if(!h.ok)return Ei(f,h.errorCode,h.message,h.details)}m+=1;try{let y=await Cm(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 fn({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:O.INTERNAL_ERROR,message:Fe(y)}}}finally{m-=1}}async function bm(f){if(f.target.kind!=="project"||f.params.kind!=="insert-page-resource")return ee(f,O.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 ee(f,O.MATERIALIZATION_REJECTED,y.message);let h=await Ra({artifact:f.params.artifact,exists:I=>n.exists(I)});return h.ok?await fn({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"}):ee(f,h.code==="MATERIALIZATION_CONFLICT"?O.MATERIALIZATION_CONFLICT:O.MATERIALIZATION_REJECTED,h.message,h.path?{path:h.path}:void 0)}catch(y){return ee(f,O.INTERNAL_ERROR,Fe(y))}finally{m-=1}}async function Em(f){if(f.target.kind!=="project"||f.params.kind!=="delete-page-source")return ee(f,O.INVALID_PARAMS,"delete-page-source requires project target and matching params.");if(!n.listFiles)return ee(f,O.PLAN_FAILED,"Complete project file listing is required for page deletion.");m+=1;try{let y=Cp(await n.listFiles({maxFiles:5e4,maxDepth:64}));if(y.truncated)return ee(f,O.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)),I=Object.fromEntries(await Promise.all(h.map(async({path:F})=>[F,await n.readFile(F)]))),R=Yf({expectedUrlPath:f.params.expectedUrlPath,files:I});if(!R.ok)return ee(f,R.code==="HOME_PAGE_LOCKED"?O.HOME_PAGE_LOCKED:R.code==="ROUTE_NOT_FOUND"?O.ROUTE_NOT_FOUND:O.PLAN_FAILED,R.message);let A=await Promise.all(R.edits.map(async F=>({...F,baseContentHash:ue(await n.readFile(F.file))})));return fn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:f.target,documentVersion:f.documentVersion,conflictPolicy:"compare-and-swap",edits:A},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 ee(f,O.INTERNAL_ERROR,Fe(y))}finally{m-=1}}async function Im(f,y){if(f.kind!=="insert-child"||f.params.kind!=="insert-child")return ee(f,O.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 ee(f,O.INVALID_PARAMS,"Page-unit insert-child requires a page-composition placement.");if(f.params.position.documentVersion!==f.documentVersion)return ee(f,O.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 ee(f,O.UNSUPPORTED_OPERATION,"The current route has no supported page composition.");if(f.documentVersion!==h.version||I.documentVersion!==h.version)return ee(f,O.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 ee(f,O.UNSUPPORTED_OPERATION,"Page-unit insertion currently requires a static materialization manifest.");let A=f.params.position,F=await Na({files:R.files.map(T=>({path:T.pathTemplate,content:T.content})),exists:T=>n.exists(T),readFile:T=>n.readFile(T)});if(!F.ok)return ee(f,O.MATERIALIZATION_REJECTED,F.message);let L=await Tf({manifest:R,generatedRoot:"components/site/generated",controlledFiles:R.files.map(T=>({pathTemplate:T.pathTemplate})),exists:T=>n.exists(T),commit:async T=>{let $=await n.readFile(y.entryFile),K=y.document,me=y.pageCompositionProjection;if(!K||K.pageComposition?.status!=="supported"||K.version!==f.documentVersion||!me||me.status!=="supported"||me.documentVersion!==K.version)return{ok:!0,data:ee(f,O.VERSION_STALE,"The route changed before the page-unit insertion could commit.")};let Q=T.entry.path,Ie=_m(T.instanceName),Y=is({routeId:y.routeId,entryFile:y.entryFile,currentDocumentVersion:K.version,expectedDocumentVersion:f.documentVersion,source:$,projection:me,placementKey:A.placementKey,component:{source:Q,exportName:T.entry.export.kind==="default"?"default":T.entry.export.name,localName:Ie}});if(!Y.ok)return{ok:!0,data:ee(f,Mc(Y.error.code),Y.error.message,{diagnostics:Y.error.diagnostics})};let ge=Y.plan.returnStep?Ol({source:$,jsx:Y.plan.returnStep.node.jsx,placement:Y.plan.returnStep.placement,...Y.plan.returnStep.replaceOriginal?{replaceOriginal:!0}:{}}):Y.plan.insertStep?.parentLocator?Rn({source:$,locator:Y.plan.insertStep.parentLocator,node:Y.plan.insertStep.node,placement:Y.plan.insertStep.placement,...Y.plan.insertStep.anchorLocator?{anchorLocator:Y.plan.insertStep.anchorLocator}:{}}):{ok:!1,source:$,diagnostic:{code:"unsupported-syntax",message:"Route composition rewrite has no insertion step."}};if(!ge.ok)return{ok:!0,data:ee(f,O.AST_PARSE_ERROR,ge.diagnostic.message)};let _=Pn({source:ge.source,moduleSpecifier:Y.plan.importStep.moduleSpecifier,imports:Y.plan.importStep.imports});if(!_.ok)return{ok:!0,data:ee(f,O.AST_PARSE_ERROR,_.diagnostic.message)};let j=T.files.map(oe=>({operation:"create-only",file:oe.path,content:oe.content})),z=[{operation:"upsert",file:y.entryFile,content:_.source,baseContentHash:ue($)},...j];m+=1;try{let oe=await fn({request:f,filePlan:{operationId:f.id,kind:"source-edit",target:{kind:"source-file",path:y.entryFile},documentVersion:f.documentVersion,conflictPolicy:"compare-and-swap",edits:z}});return!oe.ok&&oe.error?.message.includes("MATERIALIZATION_INSTANCE_CONFLICT")?{ok:!1,error:{code:"MATERIALIZATION_INSTANCE_CONFLICT",message:oe.error?.message??"Static prefab instance conflicted during commit."}}:{ok:!0,data:oe}}finally{m-=1}}});return L.ok?L.data:ee(f,O.VERSION_STALE,L.error.message,{materializationCode:L.error.code})}async function vm(f,y){if(f.kind!=="move-node"&&f.kind!=="remove-node")return ee(f,O.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 ee(f,O.UNSUPPORTED_OPERATION,"The current route has no supported page composition.");if(f.documentVersion!==h.version||I.documentVersion!==h.version)return ee(f,O.VERSION_STALE,`Document version ${f.documentVersion} is stale (current: ${h.version}).`);let R=await n.readFile(y.entryFile),A=Dl({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(!A.ok)return ee(f,Mc(A.error.code),A.error.message,{diagnostics:A.error.diagnostics});let F=A.plan.rewriteStep.kind==="move-node"?Nn({source:R,locator:A.plan.rewriteStep.locator,targetParentLocator:A.plan.rewriteStep.targetParentLocator,placement:A.plan.rewriteStep.placement,...A.plan.rewriteStep.anchorLocator?{anchorLocator:A.plan.rewriteStep.anchorLocator}:{}}):kn({source:R,locator:A.plan.rewriteStep.locator});if(!F.ok)return ee(f,O.AST_PARSE_ERROR,F.diagnostic.message);let L=F.source,T=[];if(f.kind==="remove-node"){let K=await km({routeState:y,placementUnitKey:f.target.placementUnitKey,source:R,mutatedSource:L});L=K.source,T=await Promise.all(K.files.map(async me=>({operation:"delete",file:me,baseContentHash:ue(await n.readFile(me))})))}let $=[{operation:"upsert",file:y.entryFile,content:L,baseContentHash:ue(R)},...T];m+=1;try{return await fn({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 km(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 A=I.placementUnitByKey.get(f.placementUnitKey)?.sourceRange;if(!A)return y;let F=[...h.elements.values()].find(j=>j.sourceFile===f.routeState.entryFile&&j.importedFrom&&w(j.sourceRange,A));if(!F?.importedFrom||!F.exportName)return y;let L=v(F.importedFrom),T="components/site/generated/";if(!L.startsWith(T))return y;let $=L.slice(T.length).split("/")[0];if(!$||!/-[0-9a-f]{8}$/i.test($))return y;let K=`${T}${$}`;if([...h.elements.values()].filter(j=>j.sourceFile===f.routeState.entryFile&&v(j.importedFrom??"")===L).length!==1)return y;let Q=await n.listFiles({maxFiles:5e3,maxDepth:32}),Ie=Array.isArray(Q)?Q:Q.files;if(!Array.isArray(Q)&&Q.truncated)return y;let Y=Ie.map(({path:j})=>j).filter(j=>j===K||j.startsWith(`${K}/`));if(Y.length===0||!Y.includes(L))return y;for(let{path:j}of Ie)if(!(j===f.routeState.entryFile||j===K||j.startsWith(`${K}/`)))try{if((await n.readFile(j)).includes($))return y}catch{return y}let ge=P(f.routeState.entryFile,L),_=An({source:f.mutatedSource,moduleSpecifier:ge,imports:F.exportName==="default"?[{kind:"default"}]:[{kind:"named",imported:F.exportName}]});return _.ok?{source:_.source,files:Y.sort((j,z)=>j.localeCompare(z))}:y}async function Cm(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=Rm(f);if(y.length===0)return{ok:!0};let h=Mv(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 A=i.get(R)?.composition;if(!A)continue;let F={routeId:A.routeId,...A.effectiveTemplateId!==void 0?{templateId:A.effectiveTemplateId}:{}};await I.initializeComposition(F),I.getDocument(F)}}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 Rm(f){return f.map(h=>h.path).some(Ip)?[...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:H(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 wm(h));return y}async function wm(f){if(!(typeof n.exists=="function"?await n.exists(f):!0))return{file:f,content:"",version:Math.max(0,Z(f)),exists:!1};let h=await n.readFile(f);return{file:f,content:h,version:Math.max(1,Z(f)),exists:!0,sha256:ue(h)}}async function Rc(f,y,h,I){if(!e.historyStore)return null;let R=new Map(y.map(L=>[L.file,L])),A=new Map(h.map(L=>[L.file,L])),F=[...new Set([...R.keys(),...A.keys()])].sort().map(L=>{let T=R.get(L),$=A.get(L);return{path:L,preDigest:T?.exists===!1||!T?null:ue(T.content),postDigest:$?.exists===!1||!$?null:ue($.content)}});return{schemaVersion:2,transactionId:`${f}:${I.expectedIndexDigest}`,operationId:f,phase:"prepared",historyTransition:I,files:F}}async function wc(f){return!f||!e.historyStore||await e.historyStore.writeTransactionJournal(f),f}async function dn(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 Nm(y.filter(A=>h.includes(A.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(Pm)}}async function Nc(f){if(f.exists===!1){await n.deleteFile(f.file);return}await n.writeFile(f.file,f.content)}async function Nm(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 Pm(f){let y=f.exists!==!1;return{file:f.file,content:y?f.content:"",version:f.version,exists:y,...y?{sha256:ue(f.content)}:{}}}async function fn(f){return S.runExclusive(()=>Am(f))}async function Am(f){let y=f.filePlan.edits.map(_=>_.file),h=o.resolveSelector(f.request.composition).context,I=f.historyPolicy==="none"?void 0:{initiatingComposition:h,affectedCompositions:mm(y)},R=await Ii(y),A=new Map(R.filter(_=>_.exists!==!1).map(_=>[_.file,_.content])),F=Ac(),L=new Map(d),T=new Set(p),$=new Set([...i.values()].filter(_=>f.filePlan.edits.some(j=>j.operation==="delete"&&j.file===_.entryFile)).map(_=>_.key)),K=f.filePlan.edits.map(_=>_.operation==="delete"?{file:_.file,content:"",version:0,exists:!1}:{file:_.file,content:_.content,version:0,exists:!0,sha256:ue(_.content)}),me={operationId:f.filePlan.operationId,intents:f.filePlan.edits.map(_=>_.operation==="delete"?{kind:"delete",path:_.file}:{kind:_.operation==="create-only"?"create-only":"upsert",path:_.file,content:_.content})},Q=null,Ie=!1,Y=await Zo({overlay:A,exists:_=>n.exists(_),plan:me,buildCandidate:async({plan:_})=>({plan:_}),prepareHistory:async()=>{let _=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:R,postSnapshots:K,...f.selectionRef?{selectionRef:f.selectionRef}:{},...f.output?{output:f.output}:{},...I?{provenance:I}:{}}),j=_?.historyTransition?_.historyTransition:e.historyStore?bv(await e.historyStore.readIndex()):null;if(e.historyStore&&!j)throw new Error("Durable history did not provide an exact index transition.");return Q=await Rc(f.request.id,R,K,j),Q=await wc(Q),{history:_,historyTransition:j}},reverify:async()=>{},writeCandidate:async()=>{let _=await u.executeFilePlan(f.filePlan);if(!_.ok)throw new ni(_);return{postSnapshots:await Ii(_.affectedFiles),affectedFiles:_.affectedFiles,internalResultVersion:_.resultVersion}},validateCandidate:async({candidate:_,receipt:j})=>{let z=await Br(j.affectedFiles,{changed:!0,minimumVersion:j.internalResultVersion,publish:!1,excludedCompositionKeys:$});if(z.failedRoutes.length>0)throw new an(z.failedRoutes);let oe=Tc(F,z.candidateRouteStates??[]),Se=Math.max(j.internalResultVersion,...z.rebuiltRoutes.map(Je=>Je.version));return{..._,rebuild:z,routeSnapshots:oe,resultVersion:Se,...Sp(f.selectionRef,oe.map(Je=>Je.state.document))?{selectionRef:Sp(f.selectionRef,oe.map(Je=>Je.state.document))}:{}}},publishCandidate:async({candidate:_,history:j,receipt:z})=>{j?.history&&(await l.publishPrepared(j.history),Ie=!0);let oe=_.resultVersion??z.internalResultVersion;return{composition:o.resolveSelector(f.request.composition).context,requestId:f.request.id,kind:f.request.kind,target:f.request.target,ok:!0,resultVersion:oe,affectedFiles:z.affectedFiles,...f.output?{output:f.output}:{},..._.selectionRef?{selectionRef:_.selectionRef}:{}}},swapCandidate:({candidate:_,receipt:j})=>{_.routeSnapshots&&jr(_.routeSnapshots),_.rebuild?.candidateSourceCache&&Bn(d,_.rebuild.candidateSourceCache),Ic(j.postSnapshots)},finalizeCandidate:async()=>{await dn(Q);for(let _ of $)i.delete(_)},emitCommitted:({candidate:_,published:j})=>{bi(j,_.rebuild??{rebuiltRoutes:[],failedRoutes:[]})},rollbackCandidate:async({history:_,receipt:j})=>{if(Ie)throw new Error("history was published before transaction finalization failed");if(j){let z=await vi(R,j.postSnapshots);if(!z.ok)throw new Error(z.reason)}jr(F),Bn(d,L),vc(T),_?.history&&await l.discardPrepared?.(_.history),await dn(Q)}});if(Y.ok)return Y.published;if(Y.stage==="precheck"||Y.stage==="build")try{await dn(Q)}catch(_){let j=await $r(Fe(_));return ee(f.request,j,"Unable to clear an uncommitted transaction journal.")}if(Y.recoveryRequired){let _=await $r(Y.reason);return ee(f.request,_===O.RECOVERY_PERSIST_FAILED?_:O.ROLLBACK_FAILED,Y.reason)}let ge=Y.error;return ge instanceof ni?{...ee(f.request,wr(ge.result.errorCode),ge.result.reason),...ge.result.affectedFiles?{affectedFiles:ge.result.affectedFiles}:{}}:ge instanceof an?ee(f.request,O.ROUTE_REBUILD_FAILED,`Route rebuild failed and source was rolled back: ${Ba(ge.failedRoutes)}`,{failedRoutes:ge.failedRoutes}):ee(f.request,Fc(Y.stage),Fe(ge))}async function Pc(f){return S.runExclusive(async()=>{let y=f==="undo"?await l.prepareUndo():await l.prepareRedo();return y?Tm(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:O.INTERNAL_ERROR,message:f==="undo"?"Nothing to undo":"Nothing to redo"}}})}async function Tm(f,y){let h=y.entry,I=f==="undo"?h.preSnapshots:h.postSnapshots,R=f==="undo"?h.postSnapshots:h.preSnapshots,A=I.map(z=>z.file),{context:F,key:L}=hm(h,A),T=await Ii(A),$=new Map(T.filter(z=>z.exists!==!1).map(z=>[z.file,z.content])),K=he(L),me=Ac(),Q=new Map(d),Ie=new Set(p),Y=null,ge=!1,_,j=await Zo({overlay:$,plan:{operationId:`${f}:${h.operationId}`,intents:I.map(z=>z.exists===!1?{kind:"delete",path:z.file}:{kind:"upsert",path:z.file,content:z.content})},buildCandidate:async()=>({}),prepareHistory:async()=>(Y=await Rc(`${f}:${h.operationId}`,T,I,y.historyTransition),Y=await wc(Y),y),reverify:async()=>{},writeCandidate:async()=>{let z=await vi(I,R);if(!z.ok)throw new Error(z.reason);return{snapshots:z.snapshots}},validateCandidate:async({candidate:z})=>{_=gm(h,A);let oe=await Br(A,{changed:!0,minimumVersion:K+1,publish:!1,affectedCompositionKeys:_});if(oe.failedRoutes.length>0)throw new an(oe.failedRoutes);let Se=Tc(me,oe.candidateRouteStates??[]),Je=Math.max(K+1,...oe.rebuiltRoutes.map(pn=>pn.version));return{...z,rebuild:oe,routeSnapshots:Se,resultVersion:Je}},publishCandidate:async({candidate:z,history:oe})=>{if(!oe)throw new Error("history cursor intent is missing");await l.publishPrepared(oe),ge=!0;let Se=z.resultVersion??K+1;return{composition:F,requestId:f,kind:h.kind,target:h.target,ok:!0,resultVersion:Se,affectedFiles:A,...h.output?{output:h.output}:{}}},swapCandidate:({candidate:z,receipt:oe})=>{z.routeSnapshots&&jr(z.routeSnapshots),z.rebuild?.candidateSourceCache&&Bn(d,z.rebuild.candidateSourceCache),Ic(oe.snapshots)},finalizeCandidate:async()=>{await dn(Y)},emitCommitted:({candidate:z,published:oe})=>bi(oe,z.rebuild??{rebuiltRoutes:[],failedRoutes:[]}),rollbackCandidate:async({history:z,receipt:oe})=>{if(ge)throw new Error("history cursor was published before transaction finalization failed");if(oe){let Se=await vi(R,oe.snapshots);if(!Se.ok)throw new Error(Se.reason)}jr(me),Bn(d,Q),vc(Ie),z&&await l.discardPrepared?.(z),await dn(Y)}});if(j.ok)return j.published;if(j.stage==="precheck"||j.stage==="build")try{await dn(Y)}catch(z){let oe=await $r(Fe(z));return{composition:F,requestId:f,kind:h.kind,target:h.target,ok:!1,resultVersion:K,error:{code:oe,message:"Unable to clear an uncommitted transaction journal."}}}if(j.recoveryRequired){let z=await $r(j.reason);return{composition:F,requestId:f,kind:h.kind,target:h.target,ok:!1,resultVersion:K,affectedFiles:A,error:{code:z===O.RECOVERY_PERSIST_FAILED?z:O.ROLLBACK_FAILED,message:j.reason}}}return{composition:F,requestId:f,kind:h.kind,target:h.target,ok:!1,resultVersion:K,affectedFiles:A,error:{code:j.error instanceof an?O.ROUTE_REBUILD_FAILED:Fc(j.stage),message:Fe(j.error),...j.error instanceof an?{details:{failedRoutes:j.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){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),ne(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 q(f,h)}function Vn(f,y){let h=i.get(o.resolveSelector(y).key)??null;return!h||!_c(h,f)?null:h}function _c(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 ee(f,y,h,I){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,...I?{details:I}:{}}}}function Fc(f){return f==="validate"?O.ROUTE_REBUILD_FAILED:f==="publish"?O.HISTORY_COMMIT_FAILED:O.WRITE_IO_ERROR}async function $r(f){if(g=!0,!l.markRecoveryRequired)return O.RECOVERY_REQUIRED;try{return await l.markRecoveryRequired(f),O.RECOVERY_REQUIRED}catch{return O.RECOVERY_PERSIST_FAILED}}function _m(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 Mc(f){return f==="VERSION_STALE"?O.VERSION_STALE:f==="CROSS_PAGE_MOVE_UNSUPPORTED"?O.CROSS_PAGE_MOVE_UNSUPPORTED:O.UNSUPPORTED_OPERATION}async function Oc(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):ee(f,O.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):ee(f,O.ROUTE_NOT_FOUND,"Composition not found for page-unit target.")}if(f.target.kind!=="node")return ee(f,O.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),_c(y,f.target.key)?y:ee(f,O.NODE_NOT_FOUND,`Target key not found: ${f.target.key}`)):ee(f,O.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=xp(h.context,y);i.set(h.key,R),ne(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 q(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 A=Yl(I,h.graph,h.topology,h.capabilities,R.textSources,R.provenances,R.dynamicData);return f===I?A:ek(A,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 A=Gl(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?A:qv(A,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 A=d.get(R.sourceFile);if(A===void 0)throw new Error(`Source not loaded: ${R.sourceFile}`);return pu({key:I,route:{composition:h.composition,routeId:h.routeId,graph:h.graph,source:A}})},refreshSourceForKey:xm,async execute(f){if(await C,g)return ee(f,O.RECOVERY_REQUIRED,"The edit engine requires explicit recovery before accepting mutations.");if(f.kind==="source-edit")return Sm(f);if(f.kind==="insert-page-resource")return bm(f);if(f.kind==="delete-page-source")return Em(f);let y=await Oc(f);if("ok"in y)return y;await Cc(f);let h=await Oc(f);if("ok"in h)return h;let I=h;if(f.target.kind==="page-unit"){let L=f;return f.kind==="insert-child"?Im(L,I):f.kind==="move-node"||f.kind==="remove-node"?vm(L,I):ee(f,O.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:H(f),error:{code:f.target.kind==="route"?O.ROUTE_NOT_FOUND:O.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=$v(I,I.graph,I.capabilities,d,i),A=await new _o(R).plan(f);if(!A.ok)return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:H(f),error:{code:wr(A.errorCode),message:A.reason}};let F=A.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:O.PLAN_FAILED,message:"Planner could not generate a valid execution plan"}};m+=1;try{if(F.steps.some(T=>T.type==="invoke-external-adapter")){let T=await u.execute(F);if(!T.ok)return ee(f,wr(T.errorCode),T.reason);let $={composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!0,resultVersion:Math.max(H(f),T.resultVersion),affectedFiles:T.affectedFiles,...T.selectionRef?{selectionRef:T.selectionRef}:{}};return bi($,{rebuiltRoutes:[],failedRoutes:[]}),$}let L=await u.prepareRewritePlan(F);return L.ok?await fn({request:f,filePlan:L.filePlan,...L.selectionRef?{selectionRef:L.selectionRef}:{}}):ee(f,wr(L.errorCode),L.reason)}catch(L){return{composition:o.resolveSelector(f.composition).context,requestId:f.id,kind:f.kind,target:f.target,ok:!1,resultVersion:H(f),error:{code:O.INTERNAL_ERROR,message:Fe(L)}}}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:he(o.entries[0].key),error:{code:O.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:he(o.entries[0].key),error:{code:O.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 pm(f)},subscribe(f){return r.subscribe(f)}}}function Lv(e){return e instanceof Error&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR")}function Bv(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)||jv(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 jv(e,t){return Ep(e.startLine,e.startColumn,t.startLine,t.startColumn)<=0&&Ep(e.endLine,e.endColumn,t.endLine,t.endColumn)>=0}function Ep(e,t,n,r){return e!==n?e-n:t-r}function $v(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 kp(e.detailProjections?.get(p.baseKey)?.textTargets.get(d)??null,p.repeatIndex)},async getElementPropertyWriteTarget(u,d){let p=c(u);return kp(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=gv(u);return d?{baseKey:d.baseKey,repeatIndex:Yv(e.document??null,u,d.baseKey,e.documentIndex)??Gv(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 Vv={"stale-version":O.VERSION_STALE,"capability-denied":O.CAPABILITY_REJECTED,"invalid-params":O.INVALID_PARAMS,"locator-miss":O.LOCATOR_FAILED,"route-not-found":O.ROUTE_NOT_FOUND,"unsupported-operation":O.UNSUPPORTED_OPERATION,"invalid-target":O.INVALID_TARGET,"ast-error":O.AST_PARSE_ERROR,"writeback-failed":O.WRITE_IO_ERROR,"rollback-failed":O.RECOVERY_REQUIRED,unknown:O.INTERNAL_ERROR};function wr(e){return Vv[e]}function Fe(e){return e instanceof Error&&e.message?e.message:String(e)}function Ip(e){return/\.(?:[cm]?[jt]sx?|css|scss|sass|mdx|json)$/i.test(e)}function Uv(e){let t=cn(e);if(!xv.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=>Sv.map(a=>`${s}/${a}`))}function Kv(e){let n=cn(e).startsWith("src/app/")?"src/app":"app";return[`${n}/globals.css`,`${n}/global.css`]}function Jv(e){return Rp(e,/\bimport\s+(?:[^'";]+?\s+from\s+)?["']([^"']+\.css(?:\?[^"']*)?)["']/g)}function Xv(e){return Rp(e,/@import\s+(?:url\(\s*)?["']([^"']+)["']/g)}function Rp(e,t){let n=[];for(let r of e.matchAll(t)){let o=wp(r[1]??"");o&&n.push(o)}return n}function vp(e,t){let n=wp(t);return!n||n.startsWith("tailwindcss")||n.startsWith("http:")||n.startsWith("https:")?null:n.startsWith("@/")?cn(`src/${n.slice(2)}`):n.startsWith("./")||n.startsWith("../")?cn(`${zv(e)}/${n}`):n.startsWith("/")?cn(n.slice(1)):$a(n)?cn(n):null}function wp(e){return e.split(/[?#]/,1)[0]?.trim()??""}function $a(e){return/\.css$/i.test(e)}function zv(e){let t=cn(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}function Np(e){return Array.from(new Set(e))}function cn(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 Wv(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 kp(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 Hv(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)=>fv(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=Np([...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 Zv(P))w.length<=g.length||Qv(w,g)&&S.add(w[g.length])}}return S.size>0?S.size:Wv(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 Gv(e){let t=e.parts.at(-1);return typeof t?.repeatIndex=="number"?t.repeatIndex:null}function Yv(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 Zv(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 qv(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 ek(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 tk}from"node:util";import{SITE_EDIT_SOURCE_ALLOWED_APP_FILES as Ap,SITE_EDIT_SOURCE_ALLOWED_DIRS as Tp,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as _p,SiteEditCompositionContextSchema as nk,SiteEditSourceFileResponseSchema as Va,SiteEditSourceLocationSchema as rk,SiteEditSourcePathSchema as ri,SiteEditSourceTreeResponseSchema as ok,isSiteEditTextSourcePath as ik}from"@vcp-dev/contracts";var sk=[..._p,...Ap,...Tp];function za(e){if(!e.composition)throw new Error("Composition unavailable for source access policy.");return nk.parse(e.composition)}var Ua=2e3,Ka=12,Ja=24*1024*1024,Pp=512*1024,ak=new Set(["image/avif","image/gif","image/jpeg","image/png","image/webp","image/x-icon"]),ck={".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"},lk={".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"},uk=new tk("utf-8",{fatal:!0});async function oi(e,t={}){let n=za(t),{files:r,truncated:o}=await xk(e,t),i=Ek(r.map(s=>s.metadata));return ok.parse({composition:n,nodes:i,defaultPath:Ik(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 pk(e,o,n);if(!i)throw new Error(`Source file not found: ${o}`);if(Wa(o)){let a=Op(o),c=await gk(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 dk(e,o);return s.ok?Va.parse({composition:r,path:o,kind:"text",language:Dp(o),sizeBytes:s.sizeBytes,contentHash:ue(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 dk(e,t){if(e.readFileBytes){let o=await e.readFileBytes(t),i=fk(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 fk(e){if(e.includes(0))return null;try{return uk.decode(e)}catch{return null}}async function pk(e,t,n){if(!hk(t,n))return null;let r=await mk(e,t);return r?{path:t,sizeBytes:r.sizeBytes}:null}async function mk(e,t){if(e.getFileInfo)return e.getFileInfo(t);if(e.listFiles){let o=Fp(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 gk(e,t){if(!ak.has(t.mimeType))return{previewUnavailableReason:"unsupported-mime"};if(t.sizeBytes>Pp)return{previewUnavailableReason:"too-large"};if(!e.readFileBytes)return{previewUnavailableReason:"bytes-unavailable"};let n=await e.readFileBytes(t.path);return n.byteLength>Pp?{previewUnavailableReason:"too-large"}:{contentBase64:Buffer.from(n).toString("base64")}}function hk(e,t){return _p.some(n=>n===e)||Ap.some(n=>n===e)||Tp.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 rk.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 Fp(e){return Array.isArray(e)?{files:e}:e}function yk(e){return["max-files","max-depth","max-total-bytes"].filter(n=>e.includes(n))}async function xk(e,t){if(!e.listFiles)throw new Error("Source file listing is unavailable.");let n=Fp(await e.listFiles({roots:Sk(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:bk(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:yk([...o]),maxFiles:Ua,maxDepth:Ka,maxTotalBytes:Ja}}:{}}}function Sk(e){let t=new Set(sk);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 bk(e,t,n){return Wa(e)?{composition:n,path:e,kind:"binary",language:null,sizeBytes:t,mimeType:Op(e),readonly:!0}:{composition:n,path:e,kind:"text",language:Dp(e),sizeBytes:t,readonly:!1}}function Ek(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 Mp(t)}function Mp(e){return e.map(t=>t.kind==="directory"?{...t,children:Mp(t.children)}:t).sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}function Ik(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!ik(e)}function Op(e){let t=Xa.posix.extname(e).toLowerCase();return!t&&Xa.posix.basename(e).toLowerCase()==="favicon"?"image/x-icon":ck[t]??"application/octet-stream"}function Dp(e){let t=Xa.posix.extname(e).toLowerCase();return lk[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=kk.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:Ut(i)},a=r.getChangedFiles();if(a.length===0)return{result:s};let c=Ck.parse({siteId:t.siteId,baseSnapshotId:t.baseSnapshotId,operationId:t.id,reason:`site-edit:${t.kind}`,patches:a.map(l=>Rk(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 Rk(e,t){return e.after===void 0?{path:e.path,operation:"delete",...t||e.before===void 0?{}:{expectedHash:ue(e.before)}}:{path:e.path,operation:e.before===void 0?"create":"update",...t||e.before===void 0?{}:{expectedHash:ue(e.before)},fullContent:e.after}}function wk(e){return new ai(e)}import{SiteEditOperationRequestSchema as Ak}from"@vcp-dev/contracts";import st from"node:fs/promises";import Me from"node:path";import{SITE_EDIT_SOURCE_ALLOWED_DIRS as Nk,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as Pk}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 st.readFile(Me.join(n,r),"utf8")},async readFileBytes(r){return st.readFile(Me.join(n,r))},async getFileInfo(r){let o=Me.join(n,...r.split("/"));try{let i=await st.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 st.mkdir(Me.dirname(i),{recursive:!0});let s=await st.open(i,"wx");try{await s.writeFile(o,"utf8")}catch(a){throw await s.close(),await st.rm(i,{force:!0}),a}await s.close()},async deleteFile(r){await st.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 st.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 st.access(Me.join(n,r)),!0}catch{return!1}},async listFiles(r={}){let o=r.roots??[...Pk,...Nk],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 st.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 st.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=Ak.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:Ut(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:Ut(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:Ut(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 Tk(e){return new li(e)}import{createHash as _k,randomUUID as sc}from"node:crypto";import ye from"node:fs/promises";import be from"node:path";var Ye=1,Ya=1,Fk=2,Mk="index.json",Ok="recovery.json",Dk="transaction-journal.json",Lk="document-version.json",di={maxEntries:100,maxSessionBytes:512*1024*1024,maxEntryBytes:128*1024*1024},J={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 zp(e,t={}){let n=Zk(e),r=eC(t.limits),o=Ga(n),i=Qk(n),s=await Le(i),a=await Le(o)||s;a||(await Kk(n),await Jk(n)),a||await tC(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 W(J.RECOVERY_PENDING,"history store requires explicit recovery before accepting writes")};return{rootDir:n,recoveryRequired:a,async readDocumentVersion(){return Jp(n)},async writeDocumentVersion(d){if(await u(),!Number.isInteger(d)||d<0)throw new W(J.INVALID_SCHEMA,"document version must be a non-negative integer");let p=await Jp(n);await Ar(qp(n),{schemaVersion:1,version:Math.max(p,d)})},async stageAppend(d,p={}){await u();let m=await Bp(d,r),g={schemaVersion:Ya,stageId:sc(),entryId:m.entryId,blobIds:m.blobs.map(S=>S.digest)};try{await jp(n,m),await $k(n,g,p.durableManifest!==!1)}catch(S){try{await Vp(n,g)}catch(C){throw new W(J.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 Vp(n,p)},async previewStagedAppend(d,p){return await u(),(await Lp(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),Wp(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 W(J.INVALID_SCHEMA,"history stage does not match the published entry")}let g=await Lp(n,r,d,p);return Kp({rootDir:n,previousDigest:g.current.digest,entryIds:g.entryIds,cursor:g.cursor,afterWrite:async()=>{m?await pi(n,m):await Uk(n,d),await Pr(n,g.entryIds)}})},async append(d){await u();let p=await Ve(n),m=await Bp(d,r),g=[...p.entryIds];p.cursor<g.length-1&&g.splice(p.cursor+1),g.push(m.entryId);try{await jp(n,m);let S=await Hp(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 jt(p,J.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),Kp({rootDir:n,previousDigest:m.digest,entryIds:m.entryIds,cursor:d})},async markRecoveryRequired(d){await Le(o)||await Ar(Ga(n),{schemaVersion:Ye,reason:qk(d),createdAt:new Date().toISOString()})},async clearRecoveryRequired(){await ye.rm(Ga(n),{force:!0})},async readTransactionJournal(){return await Le(i)?ui(i):null},async writeTransactionJournal(d){await u(),em(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 W(J.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 W(J.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 W(J.INVALID_SCHEMA,"transaction journal changed concurrently");try{await ye.rm(i,{force:!0})}catch(m){if(!await Le(i))return;throw m}if(await Le(i))throw new W(J.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 Xk(n);let d=await Ve(n);await Pr(n,d.entryIds)}}}async function Lp(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 Hp(e,s,t);return{current:o,entryIds:a.entryIds,cursor:a.cursor,transition:Wp(o,a.entryIds,a.cursor)}}function Wp(e,t,n){return Za(n,t.length),{expectedIndexDigest:e.digest,publishedIndexDigest:Bk(t,n),publishedCursor:n,publishedCurrentId:t[n]??null}}function Bk(e,t){return $t(Ue({schemaVersion:Ye,entryIds:e,cursor:t}))}function Za(e,t){if(!Number.isInteger(e)||e<-1||e>=t)throw new W(J.INVALID_SCHEMA,`history cursor is out of bounds: ${e}`)}function jk(e){if(!at(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 Bp(e,t){if(!e.kind.trim())throw new W(J.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(J.INVALID_JSON,"history blob name must not be empty");let l=Yk(c.data),u=$t(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:Ye,kind:e.kind,manifest:e.manifest,blobs:r},i=Ue({...o}),s=$t(i),a=i.byteLength+n.reduce((c,l)=>c+l.sizeBytes,0);if(a>t.maxEntryBytes)throw new W(J.CAPACITY_EXCEEDED,`history entry exceeds maxEntryBytes (${a} > ${t.maxEntryBytes})`);return{entryBody:o,entryId:s,blobs:n}}async function jp(e,t){let n=fc(e,t.entryId),r={id:t.entryId,...t.entryBody},o=[...t.blobs.map(a=>$p(pc(e,a.digest),a.bytes,{kind:"blob",digest:a.digest},gc(e,a.digest))),$p(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 $p(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 W(n.kind==="blob"?J.BLOB_CORRUPT:J.ENTRY_CORRUPT,`${n.kind} content mismatch for ${n.digest}`);return}await Zp(e,t)}async function Hp(e,t,n){let r=[...t],o=r.length-1;for(;;){if((await Yp(e,r)).totalBytes<=n.maxSessionBytes&&r.length<=n.maxEntries)return{entryIds:r,cursor:o};if(o<=0||r.length===0)throw new W(J.CAPACITY_EXCEEDED,"history store exceeds capacity limits and the current entry cannot be trimmed");r.shift(),o-=1}}async function $k(e,t,n){ac(t);let r=dc(e,t.stageId);if(n){await Ar(r,t);return}await Gk(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 W(J.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 Vp(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 Up(fc(e,t.entryId),mc(e,t.entryId));for(let s of t.blobIds)i.has(s)||await Up(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 Vk(e)}async function Vk(e){try{await ye.rmdir(uc(e))}catch(t){if(Dr(t)||at(t)&&t.code==="ENOTEMPTY")return;throw t}}async function Uk(e,t){for(let n of await hi(e))n.entryId===t&&await pi(e,n.stageId)}async function qa(e){if(await ye.rm(e,{force:!0}),await Le(e))throw new W(J.INDEX_CORRUPT,`unable to remove staged history object: ${e}`)}async function Up(e,t){await qa(e),await qa(t)}function ac(e){if(!at(e)||e.schemaVersion!==Ya||typeof e.stageId!="string"||!Gp(e.stageId)||!Ke(e.entryId))throw new W(J.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(!Gp(e))throw new W(J.INVALID_PATH,"history stageId must be a UUID")}function Gp(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=Xp(c.slice(0,-5));l&&!n.has(l)&&await mi(be.join(o,c))}let s=Or(e),a=await gi(s);for(let c of a){let l=Xp(c);l&&!r.has(l)&&await mi(be.join(s,c))}}async function Ve(e){let t=yi(e),n=await jt(t,J.NOT_FOUND,"index"),r=Fr(Buffer.from(n).toString("utf8"),"index"),o=zk(r),i=[...o.entryIds],{totalBytes:s}=await Yp(e,i),a=i.slice(0,o.cursor+1).reverse(),c=i.slice(o.cursor+1);return{schemaVersion:Ye,digest:o.digest,entryIds:i,cursor:o.cursor,currentId:i[o.cursor]??null,undoIds:a,redoIds:c,totalBytes:s}}async function Yp(e,t){let n=0,r=new Set,o=yi(e),i=await jt(o,J.NOT_FOUND,"index");n+=i.byteLength;for(let s of t){let a=await _r(e,s),c=await tm(e,s),l=await jt(c,J.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 jt(d,J.NOT_FOUND,"blob");lc(p,u.digest,d),n+=p.byteLength}}return{totalBytes:n}}async function _r(e,t){let n=await tm(e,t),r=await jt(n,J.NOT_FOUND,"entry"),o=Fr(Buffer.from(r).toString("utf8"),`entry ${t}`),i=Wk(o);if(i.id!==t)throw new W(J.ENTRY_CORRUPT,`entry id mismatch for ${t}`);if($t(Ue({schemaVersion:i.schemaVersion,kind:i.kind,manifest:i.manifest,blobs:i.blobs}))!==t)throw new W(J.ENTRY_CORRUPT,`entry hash mismatch for ${t}`);for(let a of i.blobs){let c=await hc(e,a.digest),l=await jt(c,J.NOT_FOUND,"blob");lc(l,a.digest,c)}return i}async function cc(e,t,n){let r={schemaVersion:Ye,digest:$t(Ue({schemaVersion:Ye,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 W(J.INVALID_SCHEMA,`history index changed concurrently (expected ${t}, current ${e.digest})`)}async function Kp(e){let t=$t(Ue({schemaVersion:Ye,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 W(J.INDEX_CORRUPT,"history index publish outcome is ambiguous",{cause:n})}}async function Kk(e){await ye.mkdir(e,{recursive:!0}),await ye.mkdir(Mr(e),{recursive:!0}),await ye.mkdir(Or(e),{recursive:!0}),await ye.mkdir(Tr(e),{recursive:!0})}async function Jk(e){await ye.rm(Tr(e),{recursive:!0,force:!0}),await ye.mkdir(Tr(e),{recursive:!0})}async function Xk(e){let t=Tr(e);await ye.mkdir(t,{recursive:!0});for(let n of await gi(t))n!=="stages"&&await ye.rm(be.join(t,n),{recursive:!0,force:!0})}function zk(e){if(!at(e))throw new W(J.INDEX_CORRUPT,"index.json must be an object");if(e.schemaVersion!==Ye)throw new W(J.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 W(J.INDEX_CORRUPT,"index cursor is out of bounds");let r=n,o=e.digest;if(!Ke(o))throw new W(J.INDEX_CORRUPT,"index digest is invalid");let i=$t(Ue({schemaVersion:Ye,entryIds:t,cursor:r}));if(o!==i)throw new W(J.INDEX_CORRUPT,"index digest mismatch");return{schemaVersion:Ye,digest:o,entryIds:t,cursor:r}}function Wk(e){if(!at(e))throw new W(J.ENTRY_CORRUPT,"entry must be an object");if(e.schemaVersion!==Ye)throw new W(J.INVALID_SCHEMA,`unsupported entry schemaVersion: ${String(e.schemaVersion)}`);let t=e.id;if(!Ke(t))throw new W(J.ENTRY_CORRUPT,"entry id is invalid");let n=e.kind;if(typeof n!="string"||n.trim().length===0)throw new W(J.ENTRY_CORRUPT,"entry kind is invalid");let r=rc(e.manifest,"entry.manifest"),o=Hk(e.blobs);return{id:t,schemaVersion:Ye,kind:n,manifest:r,blobs:o}}function Hk(e){if(!Array.isArray(e))throw new W(J.ENTRY_CORRUPT,"entry blobs must be an array");return e.map((t,n)=>{if(!at(t))throw new W(J.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(J.ENTRY_CORRUPT,`entry blob ref ${n} name is invalid`);let o=t.digest;if(!Ke(o))throw new W(J.ENTRY_CORRUPT,`entry blob ref ${n} digest is invalid`);let i=t.sizeBytes;if(!Number.isInteger(i)||i<0)throw new W(J.ENTRY_CORRUPT,`entry blob ref ${n} sizeBytes is invalid`);return{name:r,digest:o,sizeBytes:i}})}async function Ar(e,t){await Zp(e,Ue(t))}async function Gk(e,t){let n=be.dirname(e),r=be.basename(e),o=be.join(n,`.${r}.${process.pid}.${sc()}.tmp`);await ye.mkdir(n,{recursive:!0});try{await ye.writeFile(o,Ue(t),{flag:"wx"}),await ye.rename(o,e)}finally{await mi(o)}}async function Zp(e,t){let n=be.dirname(e),r=be.basename(e),o=be.join(n,`.${r}.${process.pid}.${sc()}.tmp`);await ye.mkdir(n,{recursive:!0});try{let i=await ye.open(o,"wx");try{await i.writeFile(t),await i.sync()}finally{await i.close()}await ye.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(at(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 W(J.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(at(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=rc(o,t);return n}break}throw new W(J.INVALID_JSON,`${t} must be JSON-serializable`)}function Qp(e,t){if(!Array.isArray(e))throw new W(J.INDEX_CORRUPT,`${t} must be an array`);return e.map((n,r)=>{if(!Ke(n))throw new W(J.INDEX_CORRUPT,`${t}[${r}] is invalid`);return n})}function fi(e,t){if(!Ke(e))throw new W(J.INVALID_PATH,`${t} must be a sha256 digest`)}function Ke(e){return typeof e=="string"&&/^sha256:[a-f0-9]{64}$/u.test(e)}function $t(e){return`sha256:${_k("sha256").update(e).digest("hex")}`}function Yk(e){return typeof e=="string"?Buffer.from(e,"utf8"):Buffer.from(e)}async function jt(e,t,n){try{return await ye.readFile(e)}catch(r){throw new W(t,`${n} not found: ${e}`,{cause:r})}}async function oc(e){try{return await ye.readFile(e)}catch(t){if(Dr(t))return null;throw t}}function lc(e,t,n){if($t(e)!==t)throw new W(J.BLOB_CORRUPT,`blob hash mismatch for ${n}`)}async function Le(e){try{return await ye.access(e),!0}catch(t){if(Dr(t))return!1;throw t}}async function mi(e){try{await ye.rm(e,{force:!0,recursive:!0})}catch{}}async function ic(e){try{let t=await ye.open(e,"r");try{await t.sync()}finally{await t.close()}}catch{}}async function gi(e){try{return await ye.readdir(e)}catch(t){if(Dr(t))return[];throw t}}function Zk(e){if(typeof e!="string"||e.trim().length===0)throw new W(J.INVALID_ROOT,"history store rootDir must be a non-empty string");return be.resolve(e)}function yi(e){return be.join(e,Mk)}function Ga(e){return be.join(e,Ok)}function Qk(e){return be.join(e,Dk)}function qp(e){return be.join(e,Lk)}async function Jp(e){try{let t=await ye.readFile(qp(e),"utf8"),n=Fr(t,"document version");if(!at(n)||n.schemaVersion!==1||!Number.isInteger(n.version)||n.version<0)throw new W(J.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 jt(e,J.RECOVERY_PENDING,"transaction journal"),n=Fr(Buffer.from(t).toString("utf8"),"transaction journal");return em(n),n}function em(e){if(!at(e)||e.schemaVersion!==Fk||typeof e.transactionId!="string"||e.transactionId.length===0||typeof e.operationId!="string"||e.operationId.length===0||!["prepared","files-written","history-published"].includes(e.phase)||!jk(e.historyTransition)||!Array.isArray(e.files))throw new W(J.INVALID_SCHEMA,"transaction journal schema is invalid");for(let t of e.files)if(!at(t)||typeof t.path!="string"||t.path.length===0||t.preDigest!==null&&!Ke(t.preDigest)||t.postDigest!==null&&!Ke(t.postDigest))throw new W(J.INVALID_SCHEMA,"transaction journal file digest is invalid")}function qk(e){return e.replace(/[\r\n]+/g," ").slice(0,512)}function Mr(e){return be.join(e,"entries")}function Or(e){return be.join(e,"blobs")}function Tr(e){return be.join(e,"tmp")}function uc(e){return be.join(Tr(e),"stages")}function dc(e,t){return be.join(uc(e),`${t}.json`)}function fc(e,t){return be.join(Mr(e),`${rm(t)}.json`)}function pc(e,t){return be.join(Or(e),rm(t))}function mc(e,t){return be.join(Mr(e),`${t}.json`)}function gc(e,t){return be.join(Or(e),t)}async function tm(e,t){return nm(fc(e,t),mc(e,t))}async function hc(e,t){return nm(pc(e,t),gc(e,t))}async function nm(e,t){return await Le(e)?e:await Le(t)?t:e}function rm(e){return e.slice(7)}function Xp(e){let t=e.startsWith("sha256:")?e:`sha256:${e}`;return Ke(t)?t:null}function at(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 eC(e){return{maxEntries:e?.maxEntries??di.maxEntries,maxSessionBytes:e?.maxSessionBytes??di.maxSessionBytes,maxEntryBytes:e?.maxEntryBytes??di.maxEntryBytes}}async function tC(e){let t=yi(e);await Le(t)||await cc(e,[],-1)}import{createHash as nC}from"node:crypto";import{computeSiteEditCompositionKey as im,ManagedPageTemplateRouteManifestV1Schema as rC}from"@vcp-dev/contracts";var oC="app/_vcp/page-templates/runtime.tsx",sm=".vcp/page-templates/routes/",iC="app/_vcp/page-templates/routes/";function am(e){return e.startsWith(sm)&&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 nC("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=`${iC}${n}`,o=Si(t);return{routeRoot:r,manifestFile:`${sm}${n}.json`,runtimeFile:oC,registryFile:`${r}/registry.ts`,templateEntryFile:`${r}/templates/${o}/page.tsx`}}function cm(e){let t=dC(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=lm(e.files),r=Lr(t,""),o=n.get(r.manifestFile);if(o===void 0)return null;let i=lC(t,r.manifestFile,o);return uC({routeId:t,manifest:i,files:n}),i}function sC(e){let t=Yo(e.selector.routeId),n=ln(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(ln(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:ln(i.entry_file)};return{...a,mode:"delegated",effectiveEntryFile:a.entryFile}}function aC(e){let t=lm(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(am(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(cC(d,l.entryFile));continue}for(let d of[...u.templates].sort(fC)){let p={routeId:l.routeId,effectiveTemplateId:d.template_id},m={context:p,entryFile:ln(d.entry_file)};a.push({key:im(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)=>pC(l.composition,u.composition)||xi(l.key,u.key)).map(({composition:l})=>l)}function cC(e,t){return{key:im(e),composition:{context:e,entryFile:t}}}function lm(e){let t=new Map;if(gC(e)){for(let n of e)om(t,n.path,n.content);return t}for(let[n,r]of e)om(t,n,r);return t}function om(e,t,n){let r=ln(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 lC(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=rC.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 uC(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&&mt(t,"route-id-mismatch",o.manifestFile),n.route_key!==$n(t)&&mt(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=ln(n.canonical_entry_file);(s!==i[0].entryFile||!r.has(s))&&mt(t,"canonical-entry-mismatch",s),n.default_template_id!==`vcp-default:${$n(t)}`&&mt(t,"default-template-id-mismatch",o.manifestFile),cm(n.templates);let a=new Set,c=new Set;for(let l of n.templates){let u=Lr(t,l.template_id),d=ln(l.entry_file),p=Si(l.template_id);l.safe_name!==p&&mt(t,"safe-name-mismatch",o.manifestFile,{templateId:l.template_id}),a.has(l.safe_name)&&mt(t,"duplicate-safe-name",o.manifestFile,{templateId:l.template_id}),a.add(l.safe_name),c.has(d)&&mt(t,"duplicate-entry-file",o.manifestFile,{templateId:l.template_id}),c.add(d),mC(d,u.routeRoot)||mt(t,"entry-outside-route-root",d,{templateId:l.template_id}),d!==u.templateEntryFile&&mt(t,"entry-path-mismatch",d,{templateId:l.template_id}),r.has(d)||mt(t,"template-entry-missing",d,{templateId:l.template_id})}}function mt(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 dC(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 fC(e,t){return+(t.kind==="default")-+(e.kind==="default")||xi(e.template_id,t.template_id)}function pC(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 mC(e,t){return e.startsWith(`${t}/`)}function ln(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function gC(e){return Array.isArray(e)}export{W as FileHistoryStoreError,Ae as PageTemplateManagedSourceError,li as PreviewFileSystemSiteEditEngineRuntime,If as SITE_EDIT_RAW_COLOR_LITERAL_RE,ai as SnapshotSiteEditEngineRuntime,cm as assertNoPageTemplateSafeNameCollision,Lr as computeManagedPageTemplatePaths,$n as computePageTemplateRouteKey,Si as computePageTemplateSafeName,Tk as createPreviewSiteEditEngineRuntime,wk as createSiteEditEngineRuntime,am as isManagedPageTemplateManifestPath,zp as openFileHistoryStore,yc as parseManagedPageTemplateManifest,sC as resolveManagedPageTemplateComposition,aC as scanSiteEditCompositionsFromFiles,Sr as scanSiteEditThemeStyleViolations};
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};