@vcp-dev/site-edit-engine 0.9.2 → 0.9.3

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 vk,SiteEditPatchPlanSchema as kk}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:_m(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 _m(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 uv,composeSiteEditRepeatInstanceKey as dv,getSiteEditSourceDeleteProtectionReason as fv,isSiteEditTextSourcePath as pv,parseSiteEditRepeatInstanceKey as mv,SITE_EDIT_SOURCE_DELETE_CAPABILITY as gv,stripSiteEditRepeatInstanceKeys as $e}from"@vcp-dev/contracts";import{parse as hv}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 Bm}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 Fm={"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:Fm[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 Mm from"@babel/parser";import*as hn from"@babel/types";import*as kt from"node:path";var Ai=[".tsx",".ts",".jsx",".js"],Om=Ai.map(e=>`/index${e}`);function Bc(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 Dm(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 Om){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(!Lm(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 Dm(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 Lm(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:${Bm("sha256").update(t).digest("hex")}`,ast:n.ast,imports:Bc(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(`${jm(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 jm(e){let t=Fi(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}var $m=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 Vm(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 Vc(e){return x.isJSXIdentifier(e.name)?e.name.name:x.isJSXMemberExpression(e.name)?Uc(e.name):x.isJSXNamespacedName(e.name)?`${e.name.namespace.name}:${e.name.name.name}`:"unknown"}function Uc(e){return x.isJSXIdentifier(e.object)?`${e.object.name}.${e.property.name}`:x.isJSXMemberExpression(e.object)?`${Uc(e.object)}.${e.property.name}`:e.property.name}function Um(e){return e.split(".")[0]??e}function Km(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 Jm(){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 Xm(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 zm(e,t,n){e.set(t,{resolved:!0,value:n})}function $i(e,t){e.set(t,{resolved:!1})}function Kc(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=Kc(r.value,n.path);return o.kind==="resolved"?o.value:void 0}if(x.isCallExpression(e))return Xc(e,t)??void 0}function Jc(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"?Kc(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:Jm(),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&&zm(n,o.id.name,i)}}function Wm(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 Hm(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=Jc(i.expression,t,n);s&&r.push({index:o++,value:s.value,sourceRange:_e(i),editable:!0,source:s.source})}return r}function Gm(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?Xc(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=Jc(o.value.expression,t,n);if(i!==void 0&&typeof i!="string"&&typeof i!="number"){r.push({name:o.name.name,value:jc(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:jc(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 Xc(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=Zm(r.key);if(!o)return null;n.push(o)}return n}if(x.isCallExpression(e)){let n=Ym(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 Ym(e){return x.isIdentifier(e)?e.name:x.isMemberExpression(e)&&x.isIdentifier(e.property)?e.property.name:null}function Zm(e){return x.isIdentifier(e)?e.name:x.isStringLiteral(e)?e.value:null}function Qm(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 qm(e,t){for(let n of t){let r=Qm(e,n);if(r)return r}return null}function eg(e){return x.isJSXIdentifier(e.name)?e.name.name:null}function jc(e){return e===null?"null":typeof e=="boolean"?e?"true":"false":JSON.stringify(e)}function tg(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 ng(e){return e==="render"||e==="itemRender"||e==="rowRender"||e==="children"}function rg(e){return e==="empty"||e==="emptyRender"||e==="loading"||e==="loadingRender"||e==="error"||e==="errorRender"||e==="fallback"||e==="headerRender"||e==="footerRender"}function $c(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 zc(e.body.body,t,n)}finally{t.valueScopes.pop()}}finally{t.valueScopes.pop()}}function zc(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 zc(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 og(e,t,n,r){let o=qm(e.openingElement,["items","dataSource","data"]),i={key:t,tag:Vc(e.openingElement)};n.parentStack.push(i);try{for(let s of e.openingElement.attributes){if(!x.isJSXAttribute(s))continue;let a=eg(s);if(!a||!x.isJSXExpressionContainer(s.value))continue;let c=s.value.expression;if(!x.isJSXEmptyExpression(c)){if(ng(a)&&Di(c)){let l=Gr(c,n,r),u=$c(o,c,r,n);Yr(n,"repeat-region",t,s,l,u?[u]:void 0);continue}if(rg(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=$c(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=Vc(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=Vm(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=Hm(e.children,t,n),g=Gm(e.openingElement,t,n),S,C,v=!1;if(s){let w=t.importMap.get(r)??t.importMap.get(Um(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),og(e,u,t,n),(!s||e.children.length>0)&&(t.parentStack.push({key:u,tag:r}),ig(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 ig(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 sg(e){return e==="&&"||e==="||"||e==="??"}function eo(e,t,n){if(x.isJSXEmptyExpression(e))return[];let r=tg(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)&&sg(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 ag(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=ag(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 Wc(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=Xm(r);$m(r,{"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression"(d){let p=Km(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(Wm(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 Hc(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}=Wc(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(cg(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=lg(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 cg(e){return/\.(?:css|scss|sass|less)(?:\?.*)?$/i.test(e)}function lg(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 Gc(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}),Yc(i,r,o,t,e)}}return{nodes:t,rootKeys:[...e.rootKeys]}}function Yc(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}),Yc(s,t,n,r,o))}}import{isSiteEditRuntimeContainerTag as ug,isSiteEditRuntimeVoidElementTag as dg}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 fg(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&&dg(u),m=d||ug(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 Zc(e,t){let n=new Map;for(let r of e.nodes.keys())n.set(r,fg(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 Bh}from"node:crypto";import Al 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"?nl(e,t):t.kind==="jsx-attribute"?xg(e,t):t.kind==="value"?Sg(e,t):t.kind==="expression"?bg(e,t):t.kind==="directive"?Eg(e,t):t.kind==="export"?Ig(e,t):{ok:!1,diagnostic:Kt("unsupported-syntax",`Unsupported locator kind: ${t.kind}`)}}function nl(e,t){return t.strategy==="source-range"?pg(e,t):mg(e,t)}function pg(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&&!Fg(r.path,t.expectedIdentity)?ve("jsx-node","locator-miss","JSX node failed expected identity validation"):{ok:!0,match:r}}function mg(e,t){if(t.structuralPath===""){let r=hg(e,t.component);if(r){let o=yg(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=gg(e,t.component,t.expectedRange)),n?{ok:!0,match:n}:ve("jsx-node","locator-miss","JSX node not found for structural-path locator")}function gg(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 hg(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 yg(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 xg(e,t){let n=nl(e,t.element);if(!n.ok)return n;let s=n.match.path.get("openingElement").get("attributes").find(c=>Mg(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 Sg(e,t){let n=vg(e,t);if(!n.ok)return n;let r=kg(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 bg(e,t){let n=null;return wt(e,{Identifier(r){if(!Pg(r))return;let o=el(r);if(!o||!tl(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=el(r);if(!o||!tl(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 Eg(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 Ig(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 '${_g(t)}' not found`)}function vg(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 kg(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=>Og(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=rl(n.node.openingElement);o&&(/^[A-Z]/.test(o)?t.unshift(`component:${o}#${qc(n,o)}`):t.unshift(`${o}#${qc(n,o)}`))}}else n.isJSXFragment()&&n.node===r&&t.unshift("fragment");if(!n.parentPath||Ng(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 qc(e,t){let n=Cg(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(rl(s.node.openingElement)===t){if(i.set(s.node,o),s.node===e.node)return o;o++}return i.get(e.node)??0}function Cg(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()&&Rg(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 Rg(e){return e==="&&"||e==="||"||e==="??"}function rl(e){return e.name.type==="JSXIdentifier"?e.name.name:e.name.type==="JSXMemberExpression"?wg(e.name):null}function wg(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 Ng(e){return!!(e.isFunctionDeclaration()||e.isFunctionExpression()||e.isArrowFunctionExpression())}function Pg(e){return!(!e.isExpression()||e.parentPath?.isMemberExpression({property:e.node}))}function el(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 tl(e,t){return e.base===t.base&&Ag(e.path,t.path??[])}function Ag(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 Tg(e){return e.key.type==="Identifier"?e.key.name:e.key.type==="StringLiteral"?e.key.value:null}function _g(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 Fg(e,t){return Gn(e)!==t.component?!1:Xi(e)===t.structuralPath}function Mg(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 Og(e,t){return e.isObjectProperty()?Tg(e.node)===t:!1}import Wi from"@babel/generator";var Dg=typeof Wi=="function"?Wi:Wi.default;function Lg(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 Bg(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 jg(e,t){return e.split(`
3
- `).map(r=>Bg(r,t)).join(`
4
- `)}function oo(e){let{ast:t,source:n}=e;try{let r=Lg(n),i=Dg(t,{comments:!0,jsescOption:{minimal:!0,quotes:"single"}},n).code;return r!=="2"&&(i=jg(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 il from"@babel/parser";import{arrayExpression as $g,booleanLiteral as Vg,identifier as Ug,jsxAttribute as Kg,jsxExpressionContainer as Jg,jsxIdentifier as Xg,nullLiteral as zg,numericLiteral as Wg,objectExpression as Hg,objectProperty as Gg,stringLiteral as sl}from"@babel/types";function ol(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:ol(e),afterSourceHash:ol(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 Yg(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 al(e,t,n){let r=Yg(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 cl(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"?sl(e):typeof e=="number"?Wg(e):typeof e=="boolean"?Vg(e):e===null?zg():Array.isArray(e)?$g(e.map(t=>vn(t))):Hg(Object.entries(e).map(([t,n])=>Gg(Ug(t),vn(n))))}function Zg(e){return typeof e=="string"?sl(e):Jg(vn(e))}function so(e,t){return Kg(Xg(e),Zg(t))}function ll(e,t){try{let r=il.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=qg(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=eh(r.get("expression"));o.length>0&&t.push(...o)}}return t}function qg(e,t){let n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"";return`${n}${t.trim()}${r}`}function eh(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?(th(o.match.path),de(r.ast,t,{kind:"remove-node",target:"jsx-node",inverse:"insert-child"})):{ok:!1,source:t,diagnostic:o.diagnostic}}function th(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 fh}from"@babel/types";import Gi from"@babel/traverse";import*as U from"@babel/types";var nh=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=rh(t,o,r);return i?{...e,selectionRef:i}:e}function rh(e,t,n){let r=oh(e,t);if(!r)return;let o=n.sourceLocator?ul(n.sourceLocator):void 0,i=n.targetParentLocator?ul(n.targetParentLocator):void 0,s=n.file??i?.file??o?.file,a=n.component??sh(r)??i?.component??o?.component;if(!(!s||!a))return{key:Jn(s,a,ah(r))}}function ul(e){return e.strategy==="structural-path"?{file:e.file,component:e.component,structuralPath:e.structuralPath}:e.expectedIdentity}function oh(e,t){let n=null;return nh(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)?dl(e.children):e;if(U.isJSXFragment(e))return dl(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 hl(e)?ih(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 dl(e){for(let t of e){let n=Xe(t);if(n)return n}return null}function ih(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=fl(t.consequent);if(n)return n;let r=t.alternate?fl(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 fl(e){return U.isBlockStatement(e)?Zn(e.body):Zn([e])}function sh(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 pl=new WeakMap,ml=new WeakMap,Yi=new WeakMap;function ah(e){let t=pl.get(e.node);if(t!==void 0)return t;let n=[],r=e;for(;r;){if(r.isJSXElement()){let i=ch(r);i&&n.unshift(i)}r=r.parentPath}let o=n.join("/");return pl.set(e.node,o),o}function ch(e){let t=Zi(e.node.openingElement.name);return!t||Cn(e.node)?null:/^[A-Z]/.test(t)?`component:${t}#${gl(e,t)}`:`${t}#${gl(e,t)}`}function gl(e,t){let n=lh(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 lh(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=ml.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 ml.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())&&hl(e.node)){let t=e.get("arguments"),n=Array.isArray(t)?t[0]:void 0;return n?uh(n):[]}return[]}function uh(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 hl(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)?yl(e):U.isJSXNamespacedName(e)?`${e.namespace.name}:${e.name.name}`:null}function yl(e){return`${U.isJSXIdentifier(e.object)?e.object.name:yl(e.object)}.${e.property.name}`}function Nt(e,t){if(t.parentPath===e&&t.listKey==="children"&&xl(e))return e;if(!t.parentPath||t.listKey!=="children")return null;let n=t.parentPath;if(!xl(n))return null;let r=n;for(;r&&r!==e;){if(!dh(r)||r.listKey!=="children")return null;r=r.parentPath}return r===e?n:null}function xl(e){return e.isJSXElement()||e.isJSXFragment()}function dh(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=ll(t,r.jsx);if(!u.ok)return u.result;let d=fh(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 Sl from"@babel/parser";import{cloneNode as ph}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=mh(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=ph(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 mh(e,t){try{let r=Sl.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 gh,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=gh(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");hh(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 hh(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 bl from"@babel/parser";import{cloneNode as yh,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=xh(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=yh(l.node,!0);Sh(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 xh(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","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 Sh(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=al(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=cl(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 bh,identifier as Qn,importDeclaration as Eh,importDefaultSpecifier as Ih,importNamespaceSpecifier as vh,importSpecifier as kh,isImportDefaultSpecifier as El,isImportNamespaceSpecifier as Il,isImportSpecifier as vl,stringLiteral as Ch}from"@babel/types";function Pn(e){let{source:t,moduleSpecifier:n,imports:r}=e,o=r.findIndex(C=>!Mh(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=Th(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=Oh(C,v);return P?[P]:[]}))),d=i.imports.filter(C=>!u.has(Pl(C)));if(d.length===0)return Yn(t,t,{kind:"add-import",target:"import",inverse:"remove-import"});let p=_h(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=Ah(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(!wl(Cl(C)))return V(t,"unsupported-syntax","Unsupported import specifier combination");let v=l.find(P=>Rh(P,C));if(v)wh(v,C);else{let P=Eh(kl(C),Ch(n));Fh(c.body,P),l.push(P)}}return de(a,t,{kind:"add-import",target:"import",inverse:"remove-import"})}function Rh(e,t){return e.importKind==="type"?!1:wl(Ph(Nh(e),Cl(t)))}function wh(e,t){let n=!1,r=new Set(e.specifiers.map(o=>ts(o)));for(let o of kl(t)){let i=ts(o);r.has(i)||(e.specifiers.push(o),r.add(i),n=!0)}return Nl(e.specifiers),{changed:n}}function kl(e){let t=e.map(n=>{switch(n.kind){case"named":return kh(n.local?Qn(n.local):Qn(n.imported),Qn(n.imported));case"default":return Ih(Qn(n.local));case"namespace":return vh(Qn(n.local));default:return n}});return Nl(t),t}function Cl(e){let t=Rl();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 Nh(e){let t=Rl();for(let n of e.specifiers)El(n)?t.defaultLocals.add(n.local.name):Il(n)?t.namespaceLocals.add(n.local.name):t.hasNamed=!0;return t}function Rl(){return{defaultLocals:new Set,hasNamed:!1,namespaceLocals:new Set}}function Ph(e,t){return{defaultLocals:new Set([...e.defaultLocals,...t.defaultLocals]),hasNamed:e.hasNamed||t.hasNamed,namespaceLocals:new Set([...e.namespaceLocals,...t.namespaceLocals])}}function wl(e){return e.defaultLocals.size>1||e.namespaceLocals.size>1?!1:!(e.hasNamed&&e.namespaceLocals.size>0)}function Nl(e){let t=[...e.filter(n=>El(n)),...e.filter(n=>Il(n)),...e.filter(n=>vl(n))];e.splice(0,e.length,...t)}function Ah(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 Th(e){let t=new Map,n=new Map;for(let r of e){let o=Pl(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 _h(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(bh(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 Fh(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 Mh(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 Pl(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 Oh(e,t){return e.importKind==="type"||vl(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=>!Lh(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=>Dh(u,d))),l.specifiers.length===0&&a.body.splice(c,1),de(s,t,{kind:"remove-import",target:"import",inverse:"add-import"}))}function Dh(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 Lh(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 jh=typeof ns=="function"?ns:ns.default;function is(e){let t=Dl(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:Tl(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(Jh(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=Tl(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 Tl(e){let t=Kh(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 Ml(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=$h(i,s);if(a){if(a.isArrowFunctionExpression()&&!a.get("body").isBlockStatement()){let c=a.get("body");c.replaceWith(_l(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(_l(l.node,n,e.placement,e.replaceOriginal===!0)),r=!0,c.stop())}}),r&&i.stop()}}}),r?{ok:!0,source:jh(t,{}).code}:{ok:!1,source:e.source,diagnostic:{message:"Route default return boundary could not be resolved."}}}function $h(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 _l(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 Ol(e){let t=Dl(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=Ll(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||!Uh(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 Fl("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?Fl("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 Fl(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 Dl(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&&!Vh(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 Vh(e,t){return e.routeId===t.routeId&&e.effectiveTemplateId===t.effectiveTemplateId}function Uh(e,t){return e.routeId===t.routeId&&e.templateId===t.effectiveTemplateId}function Kh(e,t){let n=Al.posix.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=Al.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:${Bh("sha256").update(e.slice(t,n)).digest("hex")}`}function Jh(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 Xh=typeof as=="function"?as:as.default;function jl(e){if(!e.ast)return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","SourceGraph entry AST is required",{reason:"parsed-ast-required"})]);let t=qh(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=ty(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=ny(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 Bl(e,t,"virtual-route-root");if(ry(r,t))return ut(e,[Oe("INDIRECT_RETURN_ONLY","Route default export only returns through an indirect function boundary")]);if(oy(r,t)||iy(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(ay(e.source,r,s))return Bl(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(sy(r))return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let o=ly({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 Ll(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 $l(e){return e.ok?zh(e.projection):Wh(e.projection)}function zh(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)=>Vl(e,u,S,C,e.container.placementKey)),p=d.filter(({member:S})=>S.isBusinessMember).map(({sourceMember:S})=>Gh(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:Hh(e,a),sourceMembers:i,businessMembers:s,placementUnits:n,placements:c}}function Wh(e){let t=e.diagnostics.map(Yh);return{status:"unsupported",version:e.version,composition:e.composition,reason:Zh(e.diagnostics),diagnostics:t}}function Hh(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 Vl(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)=>Vl(e,t,a,c,i))]}function Gh(e,t,n){return{key:`business:${e}:${t.key}`,sourceMemberKey:t.key,containerKey:e,label:t.label,isIndependent:n}}function Yh(e){return{code:Qh(e),message:e.message}}function Zh(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 qh(e){let t=null;return Xh(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=ey(o.path);i&&(t=i,n.stop())}}),t}function ey(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 ty(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 ny(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 ry(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 oy(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 iy(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 sy(e){return e.isJSXSpreadChild()}function ay(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()&&Ul(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)&&!Ul(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:Kl(n),parentSourceRange:Qe(e.parentPath?.node.loc),children:n,isBusinessMember:r,label:cy(e)}}function Ul(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 cy(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 Kl(e){return e.reduce((t,n)=>t+n.businessMemberCount,0)}function Eo(e){return e.length===0?0:Math.max(1,Kl(e))}function cs(e){let t=Qe(e.containerPath.node.loc),n=Xl(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 ly(e){let t=Qe(e.expression.node.loc),n=Xl(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=uy(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:zl(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 uy(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 Bl(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:zl(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 Jl([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 Jl(["member",e,String(t??-1),String(n??-1)])}function Jl(e){return`pc_${ps("sha256").update(e.join("\0")).digest("hex").slice(0,24)}`}function Xl(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 zl(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 fy(e){return e==="api-field"||e==="cms-field"||e==="i18n-message"||e==="config-entry"}var py=160;function Wl(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 Hl(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=ql(g.textSegments,s),P=eu(e,t,g,C,v),w=v?hy(v):void 0,B=yy(i,v),re=g.textSegments.map(M=>({index:M.index,value:M.value,editable:tu(M,C,s?.get(M.index)??null),source:o.get(M.index)??null})),ne=Zl(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:Yl(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 Gl(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=ql(c.textSegments,i);return{composition:a,key:e,tag:c.tag,componentName:c.componentName,sourceFile:c.sourceFile,sourceLocator:Yl(c),label:c.tag,capabilities:eu(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:tu(p,u,i?.get(p.index)??null),source:m?{kind:m.kind}:null}}),boundaryKind:c.boundaryKind,isOpaque:c.isOpaque,ancestors:Zl(c,t)}}function Yl(e){return{sourceFile:e.sourceFile,componentName:e.componentName,openingElementRange:my(e.sourceRange),structuralPath:e.identity.structuralPath,...gy(e.textSegments)}}function Zl(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 my(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}function gy(e){let t=e.map(n=>n.value.trim()).filter(Boolean).join(" ").replace(/\s+/g," ").trim();return t?{textPreview:t.slice(0,py)}:{}}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 ql(e,t){if(!t)return null;for(let n of e){let r=t.get(n.index);if(r)return r}return null}function eu(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&&nu(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 tu(e,t,n){return!e.editable||!t.canUpdateText?!1:n?nu(n.editMode):!0}function nu(e){return e==="direct"||e==="proxy"||e==="upstream"}function hy(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 yy(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}:fy(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 ru(e){let{key:t,element:n,graph:r,provenances:o}=e,i=Sy(t,n,r),s=i?.tag??(Gt(n.tag)?n.tag:n.componentName),a=i?.identity.key??ou(n,r)??t,c=Iy(i),l=vy(t,n,r,o,i),u=xy(t,n,r,o,a);return{componentName:s,instanceKey:a,templateOwner:Ey(i??n,s),...c.length>0?{variantKeys:c}:{},...l.length>0?{slotKeys:l}:{},editableStrategy:u,impactScope:ky(u),alternativeStrategies:Cy(u)}}function xy(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 ou(e,t){if(Gt(e.tag))return e.identity.key;let n=[...t.elements.values()].filter(r=>r.importedFrom===e.sourceFile&&by(r,e.componentName));return n.length!==1?null:n[0].identity.key}function Sy(e,t,n){if(Gt(t.tag))return t;let r=ms(e,n);if(r)return r;let o=ou(t,n);return o?n.elements.get(o)??null:null}function by(e,t){return e.exportName===t||e.tag===t||e.exportName==="default"}function Ey(e,t){return Gt(e.tag)&&e.importedFrom?`${e.importedFrom}#${t}`:`${e.sourceFile}#${t}`}function Iy(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 vy(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 ky(e){switch(e){case"template":return"component-template";case"upstream":return"upstream-source";default:return"current-instance"}}function Cy(e){switch(e){case"template":return["instance"];case"upstream":return["template"];default:return["template"]}}var Ry=new Set(["markdown","body","content","value","document"]),iu=[];function au(e){if(!(!Py(e.tag)||!e.attributes))for(let t of e.attributes){if(!Ry.has(t.name))continue;if(Ny(t))return{kind:"markdown",field:t.name,schema:"markdown",valuePath:t.source?.expression,operationBoundary:iu};let n=wy(t.resolvedValue);if(n==="prosemirror-doc"||n==="node-array")return{kind:"rich-text-json",field:t.name,valuePath:t.source?.expression,schema:n,operationBoundary:iu};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 wy(e){if(e){if(Array.isArray(e)&&e.every(t=>su(t)))return"node-array";if(su(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 su(e){return!Array.isArray(e)&&typeof e=="object"&&e!==null}function Ny(e){return e.name==="markdown"}function Py(e){return/^[A-Z]/.test(e)}var Ay=["src","alt","poster","caption","width","height"];function cu(e){let t=e.attributes?.filter(i=>Ay.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=_y(t.map(i=>i.value));return{kind:Ty(e.tag,n),sourceType:o,fields:n,editableFields:[],operationBoundary:[],...Object.keys(r).length>0?{valuePaths:r}:{}}}function Ty(e,t){return e==="img"?"image":e==="video"||t.includes("poster")?"video":"media"}function _y(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 lu(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 Fy}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:${Fy("sha256").update(e).digest("hex")}`}function fu(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=My(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:du(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:uu(e.route.source,o),valueRaw:s?uu(e.route.source,s):null,attrRange:du(o),diagnostics:[]}}function pu(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 My(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:Oy(t.sourceRange)});return!r.ok||r.match.node.type!=="JSXElement"?null:r.match.node}function mu(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 uu(e,t){return t.start==null||t.end==null?"":e.slice(t.start,t.end)}function du(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 Oy(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 Su 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=Vy(e.node),r=Dy(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(Ky(e.node),t,"awaited or fetched expression"):null}function Dy(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=Ly(e,t);if(n)return n;let r=By(e,t);if(r)return r;let o=jy(e,t);return o||null}function nr(e){return e?.kind==="api-source"}function Ly(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)&&yu(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=$y(e);if(!n||yu(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 By(e,t){if(e.path.isVariableDeclarator()&&G.isArrayPattern(e.path.node.id)){let a=e.path.get("init");if(!a?.isCallExpression()||!hu(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:gu(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()||!hu(o.node)||n.node.elements.findIndex(a=>a===e.path.node)!==0)return null;let s=n.node.elements[1];return G.isIdentifier(s)&&gu(e,s.name)?_t(e.identifier.name,t,"state setter is updated by API data"):null}function jy(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 $y(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 gu(e,t){let n=!1,r=!1;return e.scope.path.traverse({CallExpression(i){ys(i.node)&&(n=!0),(Uy(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 hu(e){return Co(e.callee)==="useState"}function ys(e){return vo(e,t=>G.isCallExpression(t)&&Co(t.callee)==="fetch")}function Vy(e){let t=e;for(;G.isMemberExpression(t);)t=t.object;return G.isIdentifier(t)?t.name:null}function yu(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 Uy(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 Ky(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:Jy(e,t),reason:n}}function Jy(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}var bu=typeof xs=="function"?xs:xs.default;function Eu(e,t){let n=vu(e);if(!n)return{allowed:!0};let r=!1;return bu(n,{CallExpression(o){if(!ku(o.node,t.sourceRange)||!Xy(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 Iu(e,t){let n=vu(e);if(!n)return{allowed:!0};let r=!1;return bu(n,{JSXExpressionContainer(o){ku(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 vu(e){try{return Su.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Xy(e){let t=e.callee;return _n.isMemberExpression(t)&&_n.isIdentifier(t.property)&&t.property.name==="map"}function ku(e,t){let n=e.loc;return n?xu({line:n.start.line,column:n.start.column},{line:t.startLine,column:t.startColumn})>=0&&xu({line:n.end.line,column:n.end.column},{line:t.endLine,column:t.endColumn})<=0:!1}function xu(e,t){return e.line!==t.line?e.line<t.line?-1:1:e.column!==t.column?e.column<t.column?-1:1:0}import*as ae from"@babel/types";function Cu(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(Wy(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=Ru(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=Yy(e);if(n){let r=zy(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=Hy(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 zy(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=Ru(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 Ru(e){if(e.isIdentifier())return{initBinding:e.scope.getBinding(e.node.name),initPathPrefix:[]};if(!e.isMemberExpression())return null;let t=Zy(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 Wy(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentPath}return!1}function Hy(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 wu(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=Gy(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 Gy(e){if(!e.path.isIdentifier())return null;let t=e.path.parentPath;return t?.isAssignmentPattern()&&t.node.left===e.path.node?t:null}function Yy(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 Zy(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 qy(e){return"kind"in e}function wo(e){return!qy(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 ex(e){if(e.isNumericLiteral())return!0;if(!e.isUnaryExpression({operator:"-"}))return!1;let t=e.get("argument");return!Array.isArray(t)&&t.isNumericLiteral()}function tx(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 Ku(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 nx(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=Ku(i.node.name);s&&o(s,i)}}),[...r].sort()}function Nu(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(od(o.match.path,i.match.path))return{ok:!1,bindingNames:[],reason:"Cannot move node out of its conditional branch"};let s=nx(o.match.path,i.match.path);return s.length>0?{ok:!1,bindingNames:s}:{ok:!0}}function Pu(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 rx(e,t){let n=le(e.node);return n?ox(t).some(r=>{let o=le(r);return r===e.node||!!(o&&o.start===n.start&&o.end===n.end)}):!1}function ox(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)?ix(e)?Au(e.children):[e]:b.isJSXFragment(e)?Au(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)&&sd(e.operator)?Dt(e.right):[]}function Au(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 ix(e){let t=e.openingElement.name;return b.isJSXIdentifier(t)?t.name==="Fragment":b.isJSXMemberExpression(t)&&t.property.name==="Fragment"}function sx(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 Tu(e,t,n,r={}){if(!r.preserveConditionalBoundary&&od(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=Ku(c.node.name);l&&a(l,c)}}),s.size>0?{ok:!1,bindingNames:[...s].sort()}:{ok:!0}}function _u(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 ax(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=cx(l);u&&o(u,c)}}});return r.size>0?{ok:!1,bindingNames:[...r].sort()}:{ok:!0}}function cx(e){let t=e;for(;b.isTSQualifiedName(t);)t=t.left;return b.isIdentifier(t)?t.name:null}function Ju(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 lx(e){let t=ux(e.ast,e.sourceNode.component,e.targetParent.component);if(!t.ok)return{ok:!1,reason:t.reason};let n=ad(t.path,e.targetParentPath);if(!n.ok)return{ok:!1,reason:n.reason};let r=vx({source:e.source,sourceContext:e.sourceContext,callSitePath:t.path,targetParentPath:e.targetParentPath});if(!r.ok)return r;let o=rd(r.collectionExpression);return{ok:!0,context:{...e.sourceContext,collectionExpression:r.collectionExpression,collectionNeedsParens:o?Ls(o):!0}}}function ux(e,t,n){let r=Wu(e,t);if(Hu(e,r),Gu(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){td(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 dx(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=gx(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=fx(r,{file:e.sourceFile,exportName:n.exportName}),i=[];for(let a of r){let c=Xu({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 fx(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 px(i,n))o=r(s)||o}return[...n.values()]}function px(e,t){let n=[],r=mx(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 mx(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 gx(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 Xu(e){let t=hx(e),n=[],r=Gu(e.ast,t);return Lt(e.ast,{JSXElement(o){tt(e.file,e.sourceFile)&&Os(o)===e.sourceComponent||td(o,t)&&n.push({file:e.file,path:o})}}),{callSites:n,hasUnsafeReference:r}}function zu(){return{localBindings:new Set,namespaceMembers:new Map,hasUnsupportedAlias:!1}}function Wu(e,t){let n=zu();return Lt(e,{Program(r){let o=r.scope.getBinding(t);o&&n.localBindings.add(o),r.stop()}}),n}function hx(e){let t=zu();return tt(e.file,e.sourceFile)&&yx(t,Wu(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=Mu(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=Mu(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)}}}}}),Hu(e.ast,t),t}function yx(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 Hu(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 Gu(e,t){if(t.hasUnsupportedAlias)return!0;let n=!1;return Lt(e,{ReferencedIdentifier(r){if(n){r.stop();return}xx(r)||!r.isIdentifier()||!Yu(r,t)||Sx(r,t)||bx(r)||(n=!0,r.stop())}}),n}function xx(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 Yu(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 Sx(e,t){let n=e.findParent(c=>c.isVariableDeclarator());if(!n?.isVariableDeclarator())return!1;let r=n.get("init");if(!r?.isExpression()||!Fu(e,r))return!1;let o=Yu(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()&&Fu(e,a)&&!!Qt(a.node,t,a)}function bx(e){let t=e.parentPath;return t?.isExportDefaultDeclaration()&&t.node.declaration===e.node?!0:!!(t?.isExportSpecifier()&&t.node.local===e.node)}function Fu(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 Ex(r,t,n);let o=ed(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?Zu(s,o.slice(1).join(".")):null}function Ex(e,t,n){let r=new Set,o=!1;for(let i of e.properties){if(!b.isObjectProperty(i))continue;let s=qu(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 Zu(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=qu(o);if(!i){n.hasUnsupportedAlias=!0;continue}let s=Zu(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 qu(e){return e.computed?b.isStringLiteral(e.key)||b.isNumericLiteral(e.key)?String(e.key.value):null:Ix(e.key)}function Ix(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 ed(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?ed(t):null;return n?[...n,e.property.name]:null}return null}function Mu(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 td(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=nd(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 nd(e){if(b.isJSXIdentifier(e))return[e.name];if(b.isJSXMemberExpression(e)){let t=nd(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 vx(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=Rx(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=Nx(e.callSitePath,c.propName,e.source);if(!u.ok){o=u.reason;return}let d=kx(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=Ju(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:Px(e.source,t,[...n.values()])}}function kx(e,t){if(t.length===0)return e;let n=rd(e);if(!n)return null;let r=Ls(n)?`(${e})`:e;for(let o of t){if(o.kind==="property"){r=Cx(o.name)?`${r}.${o.name}`:`${r}[${JSON.stringify(o.name)}]`;continue}r=`${r}[${o.index}]`}return r}function Cx(e){return/^[$A-Z_a-z][$\w]*$/.test(e)}function Rx(e,t,n){let r=wx(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 wx(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 Nx(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 Px(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 rd(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 Ax(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=Ou(s,e.sourceFile,e.targetFile);if(a){let c=e.targetParentPath.scope.getBinding(a.localName);if(c){let u=Ou(c,e.targetFile,e.targetFile);(!u||u.moduleFile!==a.moduleFile||!Tx(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 Tx(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 Ou(e,t,n){let r=_x(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 _x(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 Fx(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 Mx(e,t){return{...e,callbackParams:t}}function Du(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 od(e,t){return id(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()&&!Ox(o,n,r)))return!0;o=o.parentPath}return!1}function Ox(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 id(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()&&sd(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 Lu(e,t,n,r){let o=id(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=Dx(a.conditionPath,c);if(s.push(a.conditionPath),a.kind==="logical"){i=`${l} ${a.operator} ${Bx(i)}`;continue}i=a.branch==="consequent"?`${l} ? ${i} : null`:`${l} ? null : ${i}`}return{sourceJsx:i,conditionPaths:s}}function Dx(e,t){return Lx(e.node)?t:`(${t})`}function Lx(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 sd(e){return e==="&&"||e==="||"||e==="??"}function Bx(e){return e.trim().startsWith("<")?e:`(${e})`}function ad(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=Bu(e),i=Bu(t);if(!o||!i||!jx(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=$x(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())&&Vx(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 Bu(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 jx(e,t){return e.start===t.start&&e.end===t.end}function $x(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 Vx(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 Ux={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=Ux[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 Kx(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 Jx(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 ju(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 $u(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}${n}`);)n+=1;return`${e}${n}`}function Xx(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?Jx(o,n.source,n.exportName):null;if(a)return{localName:a};let c=o?$u(r,ju(o)):r;return{localName:c,importStep:ks(e,c)}}if(!o)return{localName:r,importStep:ks(e,r)};let i=Kx(o,n.source);if(i)return{localName:i};let s=$u(r,ju(o));return{localName:s,importStep:ks(e,s)}}function zx(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 Wx(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?Hx(e.props):void 0;return{kind:e.kind,component:{source:e.component.source,exportName:e.component.exportName},...t?{props:t}:{}}}function Hx(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 Gx(e,t){let n=He(e);if(!n||!t.tag||!t.importedFrom||!t.exportName)return Number.POSITIVE_INFINITY;let r=Xu({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 Vu(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 Yx(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,qx(t,e.collectionIndexMap)):null:null}function Zx(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:cd(o,t)}function cd(e,t){let[n,...r]=e;if(!n)return t;if(n.kind!=="property")return;let o=cd(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 qx(e,t){return t?.[e]??e}function Uu(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 eS(e,t){return tS(e.root,t.root)&&rS(e.path??[],t.path??[])}function tS(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&&nS(e.sourceRange,t.sourceRange)}}function nS(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 rS(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=Vu(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(!ex(a.match.path))return{ok:!0,value:r};let c=tx(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||Gx(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=Eu(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"?Xx(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:zx(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:Wx(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=Zx(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"?Uu(0,a.collectionIndexMap):Uu(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?rx(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=Nu(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&&!sx(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=Pu(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=Lu(c,u,d,g);for(let w of S.conditionPaths){let B=_u(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=Tu(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=ax(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=lx({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=Ju(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:Du(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=dx({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=ad(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")&&Pu(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=Lu(c,m,g,P);for(let M of w.conditionPaths){let D=_u(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=Tu(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=Ax({sourceFile:r.file,targetFile:o.file,sourceContext:C,targetParentPath:g});if(!re.ok)return{ok:!1,errorCode:"unsupported-operation",reason:re.reason};let ne=Fx(C);if(!ne.ok)return{ok:!1,errorCode:"unsupported-operation",reason:ne.reason};let N=Mx(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:Du(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=Vu(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(Yx(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&&eS(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=Nu(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=Iu(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 Sd from"@babel/parser";import js from"@babel/traverse";import*as E from"@babel/types";var bd=typeof js=="function"?js:js.default;function Ed(e){return new Map([...e].map(t=>[t.file,{source:t.source,ast:t.ast}]))}var ld=new WeakMap;function ud(e,t,n){return{kind:"external",file:e,sourceType:"api-field",sourceId:t,displayPath:n,editMode:"readonly",diagnostics:[{code:"external-source-readonly",message:"Dynamic API data is read-only for content edits"}]}}async function Id(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 TS({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 vd(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?wd(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=aS(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 XS({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 sS(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"?cS({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}):lS({file:t,source:n,ast:s,candidate:e.target.candidate,readFile:r,exists:o,graph:e.graph,fileCache:i,visited:a})}function kd(e){try{return Sd.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=kd(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 oS(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let o of dr(e).expressions){if(!iS(o.node.loc,t))continue;let i=(o.node.end??0)-(o.node.start??0);i<=r&&(n=o,r=i)}return n}function Cd(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=ld.get(e);if(t)return t;let n={expressions:[],jsxElements:[]};return bd(e,{Expression(r){n.expressions.push(r)},JSXElement(r){n.jsxElements.push(r)}}),ld.set(e,n),n}function iS(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=dd({line:e.start.line,column:e.start.column},{line:t.startLine,column:t.startColumn}),r=dd({line:e.end.line,column:e.end.column},{line:t.endLine,column:t.endColumn});return n>=0&&r<=0}function Rd(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 dd(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 Bd(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 sS(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 aS(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=eb(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 wd(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 cS(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 uS(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"?hd(t,p):Xs(t,fr(l.node,n),p):dS({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)?fS("unsupported-expression",_d(m.path.node.init,e.functionCallContracts)):Be("unsupported-expression",`Unable to resolve provenance for expression "${u.expression}"`)}return d.kind==="external"?hd(t,d):Xs(t,u.expression,d)}async function lS(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 uS(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 dS(e){let t=await Pd(e);if(t.length===0)return Be("unsupported-expression",`Unsupported expression type: ${e.expression.type}`);if(pS(e.expression))return Nd(t);if(Td(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 fS(e,t){return Nd([{code:e,message:t}])}function Nd(e){return{finalSource:null,chain:[],confidence:"partial",editMode:"readonly",diagnostics:e}}function pS(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 Pd(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:_d(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 Td(e)?fd("i18n helpers require a static message id string"):xS(e)?fd("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 Pd({...t,expression:o}));return r}function mS(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:[gS(e.sourceType)]}}async function na(e){for(let n of IS){if(!pd(e.expressionPath,n.helperNames))continue;let r=await n.resolve(e);if(r)return gd(md(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(!pd(e.expressionPath,n.helperNames))continue;let r=await n.resolve(t);if(r)return gd(md(r),e.externalAdapters)}return null}function gS(e){return{code:"missing-adapter",message:`No external adapter is registered for ${e}`}}function hS(e){return{code:"external-source-readonly",message:e}}function fd(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 pd(e,t){if(!t||t.length===0)return!0;let n=ra(e.node);return n?t.includes(n):!1}function md(e){return"match"in e?{match:e.match,editMode:e.editMode,diagnostics:ur(e.diagnostics??[])}:{match:e,diagnostics:[]}}function gd(e,t){let n=mS(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 yS(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 xS(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 Ad(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 Td(e){return Ad(e)===null}async function SS(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 bS(e){let t=Ad(e.expressionPath.node);if(typeof t!="string"||t.length===0)return null;let n="en",r=await SS(e.currentFile,n,e.exists);return r?{sourceType:"i18n-message",sourceId:`${n}:${t}`,file:r,displayPath:t}:null}async function ES(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:[hS("API mapping transforms must stay readonly until a reversible mapping strategy is registered")]}:i}var IS=[{helperNames:["getCmsField"],resolve:({expressionPath:e})=>yS(e)},{helperNames:["apiField"],resolve:e=>ES(e)},{helperNames:["t","intl.formatMessage"],resolve:({currentFile:e,expressionPath:t,exists:n})=>bS({currentFile:e,expressionPath:t,exists:n})}];function hd(e,t){return{finalSource:{kind:t.sourceType,file:t.file,locator:null,displayPath:t.displayPath,externalSource:{sourceType:t.sourceType,sourceId:t.sourceId,adapterId:t.adapterId}},chain:[...t.chainPrefix??[],{kind:t.sourceType,file:t.file,displayName:t.displayPath,canEditHere:t.editMode!=="readonly"}],confidence:"exact",editMode:t.editMode==="direct"?t.file===e?"direct":"proxy":t.editMode,diagnostics:t.diagnostics}}function 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=AS(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 vS=[{helperName:"formatPrice",purity:"pure",sourceArgIndex:0},{helperName:"formatDate",purity:"pure",sourceArgIndex:0},{helperName:"pickLabel",purity:"pure",sourceArgIndex:0}];function oa(e,t){let n=[...vS,...t??[]];for(let r=n.length-1;r>=0;r-=1){let o=n[r];if(o?.helperName===e)return o}return null}function _d(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 Fd({...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 NS(e)}async function Fd(e){let t=await nt({...e,allowComposed:!1});return t?.kind==="source"?t.provenance:null}async function nt(e){let t=kS(e.expressionPath),n=wS(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 CS({...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 kS(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 CS(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(!RS(t,n.provenance))return null}}return t?{kind:"source",provenance:t}:{kind:"none"}}function RS(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 wS(e,t){return t.start==null||t.end==null?null:`safe-derived:${e}:${t.start}:${t.end}`}async function NS(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 Md({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 Md(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 PS(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 Md({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 AS(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 TS(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=Od(e.expressionPath,t.base);if(n){let l=await Dd({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=FS(n.callPath,[...n.basePath,...t.path]);return nr(S)?ud(e.currentFile,S.sourceId,S.displayPath):null}let u=tb(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=Cu(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 Fd({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 YS({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 PS({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 ud(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 Od(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()||!_S(s,r)?null:{callPath:s,basePath:i}}function _S(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 Dd(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 FS(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 Ld({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=Rd(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 MS({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=nb(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 MS(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=oS(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 Ld(e){return await OS(e)??await DS(e)??await LS(e)}async function OS(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=BS(s);if(!c)return null;let l=[],u=[],d=[];for(let[p,m]of i.value.entries()){let g=jS(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 DS(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=yd(s,0),l=yd(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 yd(e,t){return e?E.isNumericLiteral(e)&&Number.isInteger(e.value)?e.value:null:t}async function LS(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(xd(s,a.name,c.name,d.value,p.value)===void 0)return null;return u.sort((d,p)=>{let m=xd(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 xd(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 BS(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 jS(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 $S({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 qS({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 Ld({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 $S(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=VS(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 VS(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 US(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 KS(e,t){let n=US(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 JS(e,t,n,r){return e.importedFrom===t?r?e.exportName===r:!0:e.sourceFile===t&&e.tag===n}async function XS(e){let t=WS(e.expressionPath.node);if(!t||!HS(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 zS({...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 zS(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=Od(e.expressionPath,s.base);if(!a)return null;let c=await Dd({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 GS(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 WS(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 HS(e){return e.some(t=>t.kind==="dynamic")}function GS(e){return typeof e=="string"?{kind:"property",name:e}:Number.isInteger(e)?{kind:"index",index:e}:null}async function YS(e){let t=KS(e.binding,e.sourceInfo);if(!t||!e.graph)return null;let n=[...e.graph.elements.values()].filter(l=>JS(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 ZS({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=wu(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=wd(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 ZS(e){let t=await Bt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=Cd(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=Rd(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=Cd(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 qS(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(bd(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 Bd(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 Bd(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 eb(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 tb(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 nb(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=kd(o),s={source:o,ast:i};return n.set(e,s),s}import ua from"@babel/generator";import{parse as yb}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 rb=typeof sa=="function"?sa:sa.default,ob=/(?:token|secret|key|password|authorization|cookie|signature|credential)/i,ib=/^((?:https?:)?\/\/)[^/@\s]+@/i,sb=/(\/(?:token|secret|api[-_]?key|password|credential|signature)\/)[^/?#]+/gi;function $d(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(jd(r))return aa(e.arguments[0],r,t,["axios client contract"])}if(n.startsWith("ky.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if(jd(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 ub(t,n,r,"missing url argument");let o=mr(e);return{sourceKind:lb(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(ab(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=Vd(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 ab(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=Vd(e);if(t)return`env:${t}`}return`:${cb(e)}`}function cb(e){return rb(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(ib,"$1<redacted>@").replace(sb,"$1<redacted>");if(!r)return o;let i=r.split("&").map(s=>{let[a]=s.split("=");return a?ob.test(a)?`${a}=<redacted>`:`${a}=:${a}`:""}).filter(Boolean).join("&");return i?`${o}?${i}`:o}function lb(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 ub(e,t,n,r){return{sourceKind:"unknown-api",method:e,confidence:"partial",evidence:[{file:t.file,reason:[...n,r].join("; ")}]}}function jd(e){return["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(e)}function Vd(e){return!ce.isMemberExpression(e.object)||!ce.isIdentifier(e.object.object,{name:"process"})||!db(e.object.property,"env")?null:ce.isIdentifier(e.property)?e.property.name:ce.isStringLiteral(e.property)?e.property.value:null}function db(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 fb=new Set(["list","listStrict","get","getStrict","getByUrl","getByUrlStrict","schema","categories"]),pb=new Set(["getConfig","submit"]);function Ud(e,t){let n=mb(ft(e.callee),t);if(!n)return null;let r="cms.collections.";if(n.startsWith(r)){let i=n.slice(r.length);if(!fb.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(!pb.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)??gb(e,0,"path")??"/cms/:path",s=hb(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 mb(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 Kd(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 Jd(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 gb(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 hb(e){return/^\/collections\/([^/]+)(?:\/|$)/.exec(e)?.[1]??null}var pa=typeof da=="function"?da:da.default,LN=typeof ua=="function"?ua:ua.default,xb={maxFunctionDepth:8,maxImportDepth:6},Sb=new Set(["src","href","alt","poster","content","title","aria-label"]);async function Yd(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:{...xb,...e.options},variableCache:new Map,functionDepth:0,importDepth:0,paramSources:new Map,resolvingVariables:new Set,resolvingComponentProps:new Set,scopeVariables:df(n,e.element.componentName)};await Zd(e.element.componentName,e.graph,r);let o=[];o.push(...await kb(e.element,e.graph,r),...await Cb(e.element,e.graph,r));for(let s of e.element.textSegments){let a=await Rb(s,e.element,e.graph,r);a&&o.push(Bo(a,"text","children"))}for(let s of e.element.attributes??[]){let a=vb(s,e.element);if(!a)continue;let c=await ef(s.source,e.element,e.graph,r);c&&o.push(Bo(c,a,s.name))}let i=Vb(o).sort(lf);return{hasDynamicData:i.length>0,bindings:i}}async function Zd(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 qd(l.sourceFile,n);if(!d)continue;let p=$o(d,n,{importDepth:n.importDepth+1});p.paramSources.clear(),p.scopeVariables=df(d,l.componentName),await Zd(l.componentName,t,p);let m=await bb(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=af(u);d.length===1&&c.set(l,d[0])}Ib(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 qd(e,r))?.imports.get(t);if(!s||!lt(s.source))return!1;let a=await mf(e,s.source,r.exists);return a?a===n?!0:Qd(a,s.importedName,n,r,o):!1}async function bb(e,t){let n=new Map;pa(t.analysis.ast,{JSXElement(o){if(Eb(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 Eb(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 qd(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 Ib(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 vb(e,t){return e.name==="dangerouslySetInnerHTML"?"richtext":Sb.has(e.name)?"attribute":t.importedFrom||/^[A-Z]/.test(t.tag)?"component-prop":null}async function kb(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 Cb(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 Rb(e,t,n,r){return ef(e.source,t,n,r)}async function ef(e,t,n,r){let o=await wb(e,t,n,r);return o||jo(e,r)}async function wb(e,t,n,r){if(!e)return null;let o=Nb(e.base,t,n);if(!o)return null;let i=await jo(o.collectionSource,r);return i?xr(i,e.path,!0):null}function Nb(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 tf(e.base,t);return n?xr(n,e.path,!1):null}async function tf(e,t){let n=t.paramSources.get(e);if(n)return Ne(n);if(t.variableCache.has(e))return Ub(t.variableCache.get(e)??null);if(t.resolvingVariables.has(e))return null;t.resolvingVariables.add(e);let r=await Pb(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 ff(i,t);if(s){let a=$o(s,t,{importDepth:t.importDepth+1}),c=pf(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 Pb(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 tf(e.name,t);if(k.isMemberExpression(e)||k.isOptionalMemberExpression(e)){let n=k.isMemberExpression(e)?Kd(e,{file:t.file}):null;if(n)return sf(n);let r=await Ab(e,t);if(!r)return null;let o=jb(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 nf(e,t);if(k.isObjectExpression(e)){let n=await rf(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(zd(n,r))}if(k.isLogicalExpression(e)){let n=await Ce(e.left,t),r=await Ce(e.right,t);return yr(zd(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 Ab(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 nf(e,t){let n=Ud(e,{file:t.file,imports:t.analysis.imports});if(n)return sf(n);if(Jd(e)){let d=e.arguments[0];if(d&&k.isExpression(d))return yr(await Ce(d,t))}let r=await Tb(e,t);if(r)return r;let o=$d(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 Mb(e,t);if(i)return i;let s=await Ob(e,t);if(s)return s;let a=await Db(e,t);if(a)return a;let c=await Lb(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=af(l);return u.length===1?yr(u[0]):null}async function Tb(e,t){let n=ft(e.callee);if(n!=="useQuery"&&n!=="useSuspenseQuery"&&n!=="useInfiniteQuery"&&n!=="useSWR")return null;if(n==="useSWR"){let i=Fb(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=_b(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)?nf(o,t):null}function _b(e,t){for(let n of e.properties){if(!k.isObjectProperty(n)||!k.isExpression(n.value))continue;if(of(n)===t)return n.value}return null}function Fb(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 Mb(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 Ob(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 Db(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 Lb(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 ff(r,t);if(!o)return null;let i=$o(o,t,{importDepth:t.importDepth+1}),s=pf(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,$b(u),r)});let o=Bb(e),i=null,s,a=!1;for(let c of o){if(k.isObjectExpression(c)){s={...s??{},...await rf(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 Bb(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 rf(e,t){let n={};for(let r of e.properties){if(!k.isObjectProperty(r))continue;let o=of(r);if(!o||!k.isExpression(r.value))continue;let i=await Ce(r.value,t);i&&(n[o]=i)}return n}function of(e){return k.isIdentifier(e.key)&&!e.computed?e.key.name:k.isStringLiteral(e.key)?e.key.value:null}function jb(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,Xd(t)),o)}return o.valuePath=gr(o.valuePath,Xd(t)),o}function Xd(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 sf(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 $b(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 zd(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=uf(e.confidence,t.confidence)<=0?e.confidence:t.confidence;return{...e,confidence:n,evidence:[...e.evidence,...t.evidence]}}function af(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 cf(e){let t=[...e].sort(lf),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 Vb(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 lf(e,t){return Wd(e.targetKind)-Wd(t.targetKind)||uf(e.confidence,t.confidence)||Hd(e.sourceKind)-Hd(t.sourceKind)||e.targetName.localeCompare(t.targetName)}function Wd(e){return{"repeat-region":0,"conditional-region":1,text:2,richtext:3,attribute:4,"component-prop":5}[e]}function Hd(e){return e.startsWith("vcp-cms-")?0:e==="site-api-route"?1:e==="external-api"?2:3}function uf(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=yb(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)&&Gd(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)&&Gd(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 Gd(e){return k.isFunctionExpression(e)||k.isArrowFunctionExpression(e)}function df(e,t){let n=e.functions.get(t)??e.functions.get("default");return n?e.functionVariables.get(n):void 0}async function ff(e,t){let n=await mf(t.file,e.source,t.exists);if(!n)return null;let r=await t.readFile(n);return ha(n,r,t.fileCache)}function pf(e,t){return e.isDefault?t.functions.get("default")??t.functions.get(e.localName)??null:t.functions.get(e.importedName)??null}async function mf(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 Ub(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 Kb=50,Jb=8*1024*1024;function xf(e,t={}){let n=[],r=[],o=t.externalAdapters??[],i=Math.max(0,t.maxUndoEntries??Kb),s=Math.max(0,t.maxUndoBytes??Jb);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=yf(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=yf(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(", ")}: ${hf(Z)}`,rolledBack:!1,instanceConflict:gf(Z)};let he=gf(Z);return{ok:!1,reason:`${he?"MATERIALIZATION_INSTANCE_CONFLICT: ":""}Writeback failed and committed files were restored: ${hf(Z)}`,rolledBack:!0,instanceConflict:he}}return{ok:!0,snapshots:N.map(Xb)}}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 gf(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="EEXIST"}function Xb(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 hf(e){return e instanceof Error?e.message:String(e)}function yf(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 zb(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 zb(e,t){let{request:n}=e;if(n.newAttrRaw!==null&&!mu(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:pu({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 Sf(){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 Wb}from"node:crypto";import Vo from"node:fs/promises";import ya from"node:path";import{setTimeout as Hb}from"node:timers/promises";var Gb={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)}},Yb=new Set(["EACCES","EBUSY","EPERM"]),Zb=[10,20,40,80,160];async function Qb(e,t,n){for(let r of Zb)try{await e.rename(t,n);return}catch(o){if(!qb(o))throw o;await Hb(r)}await e.rename(t,n)}function qb(e){return e instanceof Error&&"code"in e&&typeof e.code=="string"&&Yb.has(e.code)}async function Uo(e,t,n=Gb){let r=ya.dirname(e),o=ya.basename(e),i=ya.join(r,`.${o}.${process.pid}.${Wb()}.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 mE}from"node:crypto";import Et from"node:path";import{parse as gE}from"@babel/parser";import hE from"@babel/traverse";import{COMPONENT_I18N_FILE_SUFFIX as Jo,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as vf,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as yE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as xE,SiteEditMaterializationSchema as SE,parseComponentI18nResourcesJson as bE}from"@vcp-dev/contracts";var Ef=/#[0-9a-fA-F]{3,8}\b|\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\s*\(/i,If=/\b(?:bg-black|bg-white|text-white|text-black)(?:\b|\/)/g,eE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke)-\[#(?:[0-9a-fA-F]{3,8})\](?:\/\d+)?/g,tE=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*#[0-9a-fA-F]{3,8}[^'"]*['"]/g,nE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*rgba?\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,rE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,oE=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,iE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*(?:oklch|lab|lch|hsla?)\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,sE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*(?:oklch|lab|lch|hsla?)\([^)]+\)[^'"]*['"]/gi,aE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*color-mix\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,cE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*color-mix\([^'"]*['"]/gi,lE=/\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,uE=/var\(\s*--(?:_|private-|vcp-)[^)]+\)/gi,dE=/#[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,eE),...Ge(e,tE),...Ge(e,nE),...Ge(e,t.includeRgbBackgroundImage?rE:oE),...t.includeExtendedColorFunctions?[...Ge(e,iE),...Ge(e,sE)]:[]]),r=Ko([...Ge(e,aE),...Ge(e,cE)]).filter(o=>t.colorMixPolicy==="always"||Ef.test(o));return n.push(...r.filter(o=>!n.includes(o))),t.rejectTailwindPalette&&n.push(...Ge(e,lE).filter(o=>!n.includes(o))),t.rejectAnyRawColorLiteral&&n.push(...Ge(e,dE).filter(o=>!n.includes(o))),{hardCodedSurfaceHits:Ko(Ge(e,If)),hardCodedSurfaceOccurrences:pE(e),rawColorHits:n,privateTokenHits:t.rejectPrivateTokens?Ko(Ge(e,uE)):[]}}function Ge(e,t){return e.match(new RegExp(t.source,t.flags))??[]}var bf=160,fE=/((?:[a-z][a-z0-9-]*(?:\[[^\]]*\])?:)+)$/;function pE(e){let t=new RegExp(If.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=fE.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>bf?`${m.slice(0,bf-1)}\u2026`:m})}return o}function Ko(e){return[...new Set(e)]}var ba="components/site/generated",kf="{{$INSTANCE}}",Xo=5,EE=/^[a-z][a-z0-9-]{0,48}$/,IE=/^[a-f0-9]{8}$/,Cf=/\.tsx?$/,vE=/\.json$/,kE=/\.(?:tsx?|json)$/,CE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,RE=["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=hE,wE=typeof Sa=="function"?Sa:Sa.default;function NE(e){let t=Array.isArray(e.manifest.files)?e.manifest.files:[];if(t.length>vf)return{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab file count exceeds the reusable limit."}};let n=jE(t);if(n)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Static prefab resolves duplicate target path: ${n}`,path:n}};let r=SE.safeParse(e.manifest);if(!r.success)return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab manifest failed schema validation."}};let o=DE(e.generatedRoot);if(!o)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Generated root must be ${ba}.`,path:e.generatedRoot}};if(!Tf(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=Nf(r.data.files),s=Nf(e.controlledFiles);if(!$E(i,s))return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Controlled file list must exactly match the manifest file templates."}};if(i.size>vf)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>yE)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>xE?{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 PE(e){let t=NE(e);if(!t.ok)return t;let n=t.data.generatedRoot,r=Tf(e.manifest.instanceBaseName),o=Math.max(1,Math.min(Xo,e.maxAttempts??Xo));for(let i=0;i<o;i+=1){let s=LE(e.instanceNameGenerator?.()??mE(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=Ff(n,a),l=AE({manifest:e.manifest,generatedRoot:n,instanceName:a,instanceRoot:c,allowedExternalImports:e.allowedExternalImports??RE});if(!l.ok)return l;if(!await TE(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 Af(e){let t=Math.max(1,Math.min(Xo,e.maxAttempts??Xo));for(let n=0;n<t;n+=1){let r=await PE({...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 AE(e){let t=[],n=new Set;for(let i of e.manifest.files){let s=Rf({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=Rf({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=_E(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 TE(e,t,n){if(await e(t))return!0;for(let r of n)if(await e(r.path))return!0;return!1}function Rf(e){if(e.pathTemplate.split(kf).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(kf,e.instanceName),n=BE(t);return n?Ff(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||!kE.test(n)||CE.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 _E(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(vE.test(d.path)){if(d.path.endsWith(Jo)){let g=bE(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=gE(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(!Cf.test(d.path))continue;let p=s.get(d.path),m=null;if(wE(p,{ImportDeclaration(g){let S=wf({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=FE({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=wf({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=Pf(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=Pf(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(!Cf.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(!ME(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 OE(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 wf(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 FE(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 ME(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 OE(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 DE(e){let t=_f(e);return t===ba?t:null}function LE(e){let t=e.trim().toLowerCase();return IE.test(t)?t:null}function Tf(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 EE.test(t)?t:null}function _f(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 BE(e){let t=_f(e);return!t||t!==e?null:t}function Ff(...e){return Et.posix.join(...e)}function Nf(e){return new Set(e.map(t=>t.pathTemplate))}function jE(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 $E(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function Pf(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 VE}from"node:crypto";import zo from"node:path";import{parse as Ca}from"@babel/parser";import UE from"@babel/traverse";import*as jf from"@babel/types";import{COMPONENT_I18N_FILE_SUFFIX as Ia,PageResourceArtifactSchema as KE,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as JE,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as XE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as zE,parseComponentI18nResourcesJson as WE}from"@vcp-dev/contracts";var va="{{$INSTANCE}}",HE=/\{\{\$PAGE_ROUTE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,GE=/\{\{\$PAGE_TITLE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,ka="components/site/generated",YE=/\.(?:tsx?|json)$/,ZE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,QE=["react","react/","next","next/","lucide-react","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],qE=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),Ea=UE,eI=typeof Ea=="function"?Ea:Ea.default;async function Ra(e){let t=KE.safeParse(e.artifact);if(!t.success)return se("Page resource artifact failed contract validation.");let n=t.data,r=e.randomHex??(()=>VE(4).toString("hex")),o=Math.max(1,Math.min(e.maxAttempts??5,5)),i=dI(r());if(!i)return se("Random instance suffix must be 8 lowercase hex chars.");let s=`${fI(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=Mf({materialization:w.materialization,packageInstanceId:s,routeByPage:a,titleByPage:c});if(!B.ok)return B;for(let re of B.files){let ne=Df(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=Mf({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=Df(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(iI(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=nI(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=rI(u);return P||(u.sort((w,B)=>w.file.localeCompare(B.file)),{ok:!0,packageInstanceId:s,pages:l,files:u})}function Mf(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:Of(o.pathTemplate,e.packageInstanceId);if(!s)return se("Materialization path cannot be mapped into the package namespace.",o.pathTemplate);let a=tI(o.content,e.packageInstanceId,e.routeByPage,e.titleByPage);if(!a.ok)return a;let c=i&&e.pageTitle!==void 0?sI(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??Of(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 tI(e,t,n,r){let o,i=e.replace(HE,(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(GE,(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 Of(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}/`)||!YE.test(a)||ZE.test(a)?null:a}function Df(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 nI(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)&&!WE(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=lI(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(eI(S,{Identifier(v){v.isReferencedIdentifier()&&qE.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||!oI(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=Bf(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 Bf(m,c))d.add(g);if(d.size!==e.length)return se("Every materialization file must be reachable from a package entry.");let p=uI(e,l,c);return p||{ok:!0}}function rI(e){if(e.length>JE)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>XE)return se("Page resource file exceeds the content byte limit.",n.file);t+=r}return t>zE?se("Page resource exceeds the aggregate content byte limit."):null}function oI(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 iI(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||!aI(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 sI(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&&cI(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&&jf.isExpression(t)?t:null}function aI(e){return e.type==="Identifier"&&e.name==="path"||e.type==="StringLiteral"&&e.value==="path"}function cI(e){return e.type==="Identifier"&&e.name==="title"||e.type==="StringLiteral"&&e.value==="title"}function lI(e,t,n,r){if(t.startsWith(`@/${r}/`)){let s=t.slice(2),a=Lf(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=Lf(o,n);return i&&(i.startsWith(`${r}/`)||i.startsWith("app/"))?{allowed:!0,internalPath:i}:{allowed:!1}}function Lf(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 uI(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 Bf(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 dI(e){return/^[a-f0-9]{8}$/.test(e)?e:null}function fI(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 pI,parseComponentI18nResourcesJson as mI,resolveSiteTextDirection as gI,SiteLocaleSchema as hI}from"@vcp-dev/contracts";var yI=["i18next","react-i18next"],xI="components/ui/site-locale-provider.tsx",SI="components/ui/component-i18n-provider.tsx",$f="app/layout.tsx";async function Na(e){let t=e.files.filter(p=>p.path.endsWith(pI));if(t.length===0)return{ok:!0};for(let p of["package.json",$f,xI,SI])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=Vf(n)&&Vf(n.dependencies)?n.dependencies:{},o=yI.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($f),s=wa(i,"html","lang"),a=wa(i,"html","dir"),c=wa(i,"SiteLocaleProvider","locale"),l=hI.safeParse(s);if(!l.success||!a||!c||s!==c||a!==gI(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=mI(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 Vf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function sn(e){return{ok:!1,message:e}}import{HOME_PAGE_URL_PATH as UI}from"@vcp-dev/contracts";import{parse as zP}from"@babel/parser";import{parse as pP}from"@babel/parser";import{FormBlockIdSchema as gP,FormSpecV1Schema as hP}from"@vcp-dev/contracts";var br="components/site/generated/forms",yP=`${br}/vcp-form-runtime.tsx`,Ho="[A-Za-z0-9][A-Za-z0-9_-]{0,127}",xP=new RegExp(`^${br}/form-(${Ho})\\.spec\\.ts$`),SP=new RegExp(`^${br}/form-(${Ho})\\.tsx$`),bP=new RegExp(`^@/${br}/form-(${Ho})$`),EP=new RegExp(`(?:^|/)${br}/form-(${Ho})(?:\\.tsx?)?$`);var IP=Symbol("invalid-literal");import{createHash as CP}from"node:crypto";import{posix as wP}from"node:path";import{parse as PP}from"@babel/parser";import{FormSpecV1Schema as TP}from"@vcp-dev/contracts";var _P=Symbol("dynamic");import{parse as bI}from"@babel/parser";function Go(e){return Array.isArray(e)?e.filter(t=>!!t&&typeof t=="object"&&typeof t.type=="string"):[]}var EI=/^(?:src\/)?app\/(.*)page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function II(e){let t=EI.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 vI(e){let t=e;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function Uf(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function kI(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=Uf(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=II(t);if(r===null)return{found:!1,seo:null,diagnostics:n};let o;try{o=bI(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=kI(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=Uf(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=vI(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 CI}from"@babel/parser";var Kf=["page","anchor","external","email","phone","group","file"],RI=["link","cta"],Xf=["description","badge","iconKey"],Ta=["label","targetType","href","role","openInNewTab","nofollow","children",...Xf],wI=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 NI(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function Jf(e){let t=e;return t?.type==="BooleanLiteral"&&typeof t.value=="boolean"?t.value:void 0}function _a(e){let t=[],n;try{n=CI(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=zf(i,`NAV_ITEMS[${s}]`,t);a&&o.push(a)}),{items:o,diagnostics:t}}function zf(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=NI(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||!Kf.includes(i))return n.push({severity:"fatal",path:`${t}.targetType`,message:`targetType must be one of ${Kf.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 Xf){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))wI.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=zf(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&&(RI.includes(c)?s.role=c:n.push({severity:"warning",path:`${t}.role`,message:"role ignored: not link/cta"})),r.openInNewTab!==void 0){let l=Jf(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=Jf(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 PI}from"@babel/parser";function vr(e){return Array.isArray(e)?e:[]}function Wf(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=Hf(t);if(!n)return{status:"unsupported",source:e};let r;try{r=PI(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=Wf(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(TI(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=AI(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 AI(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 Wf(t.value)}}function Hf(e){let t=e.trim();return t.startsWith("/")?t==="/"?t:t.replace(/\/+$/,""):null}function TI(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"&&Hf(n??"")===t}import tA from"node:fs";import rA from"node:path";var _I=/^page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function kr(e){let t=e.map(r=>VI(r.path)),n=FI(t);return n?t.filter(r=>OI(n,r)).map(r=>({routeId:DI(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=$I(t),s=i&&(o===i||o.startsWith(`${i}/`))?o.slice(i.length)||"/":o,a=s.startsWith("/")?s:`/${s}`;return a==="/"?"/":a.replace(/\/+$/,"")}function FI(e){return e.some(r=>r.startsWith("app/")&&!MI(r))?"app":e.some(r=>r.startsWith("src/app/"))?"src/app":null}function MI(e){return e.startsWith("app/_vcp/")||e.startsWith("src/app/_vcp/")}function OI(e,t){if(!t.startsWith(`${e}/`))return!1;let n=t.slice(t.lastIndexOf("/")+1);return _I.test(n)?t.slice(e.length+1,-n.length-1).split("/").filter(Boolean).every(r=>!r.startsWith("_")):!1}function DI(e,t){let n=t.slice(e.length+1).split("/").slice(0,-1).map(BI).filter(r=>!!r);return n.length===0?"/":`/${n.join("/")}`}function LI(e){return e.startsWith("(")&&e.endsWith(")")}function BI(e){return!e||e.startsWith("@")||e.startsWith("_")||LI(e)?null:jI(e)}function jI(e){return e.replace(/^\((?:\.|\.\.|\.\.\.)\)/,"")}function $I(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function VI(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}var KI="components/site/generated/",Cr=[".tsx",".ts",".jsx",".js"];function Gf(e){if(e.expectedUrlPath===UI)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=JI(e.files);if(!o.ok)return o.error;let i=o.graph,s=HI(r,i),a=GI(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 JI(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")||!XI(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(zI(c))continue;let l=_i(r,c),u=WI(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 XI(e){let t=e.toLowerCase();return Cr.some(n=>t.endsWith(n))}function zI(e){return!!(/\.([a-z0-9]+)$/i.exec(e)&&!Cr.some(n=>e.endsWith(n)))}function WI(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 HI(e,t){let n=new Set,r=[...t.get(e)??[]];for(;r.length>0;){let o=r.pop();!o.startsWith(KI)||n.has(o)||(n.add(o),r.push(...t.get(o)??[]))}return n}function GI(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 YI}from"@vcp-dev/contracts";var ZI={affectedCompositions:[]};function tp(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(qf(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);Yf(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(Yf(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(qf(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 Yf(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=>Zf(e,o))),r=await Promise.all(t.redoIds.map(async o=>Zf(e,o)));return{undo:n.reverse(),redo:r.reverse(),entryIds:[...t.entryIds],cursor:t.cursor}}async function Zf(e,t){let n=await e.readEntry(t),r=qI(n),o=r.provenance??ZI;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(nv(r,o.blobName))).toString("utf8"):"";return{file:o.file,content:i,version:o.version,exists:o.exists,...o.sha256?{sha256:o.sha256}:{}}}))}function qf(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=ev(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 qI(e){if(!rp(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:np(t.provenance)}:{},preSnapshots:ep(t.preSnapshots,"preSnapshots"),postSnapshots:ep(t.postSnapshots,"postSnapshots")}}function ev(e){if(e.provenance!==void 0)return np(e.provenance);if(e.composition)return{initiatingComposition:e.composition,affectedCompositions:[]}}function np(e){let t=YI.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 ep(e,t){return e.map((n,r)=>{if(!rp(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&&!tv(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 tv(e){return/^sha256:[0-9a-f]{64}$/.test(e)}function nv(e,t){let n=e.get(t);if(!n)throw new Error(`durable history blob is missing: ${t}`);return n}function rp(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import op 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 sp(e,t,n){let r=[],o=new Set;for(let i of e.intents){let s=sv(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=()=>rv(e);return e.mutex?e.mutex.runExclusive(t):t()}async function rv(e){let t=await sp(e.plan,e.overlay,e.exists);if(!t.ok)return{ok:!1,stage:"precheck",reason:t.reason,error:t,recoveryRequired:!1};let n=ov(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 ip("swap",l,"Live state swap failed after durable publish.")}try{await e.finalizeCandidate?.(c)}catch(l){return ip("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 ov(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:iv(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 ip(e,t,n){return{ok:!1,stage:e,reason:n,error:t,recoveryRequired:!0}}function iv(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 sv(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)||op.isAbsolute(e))return{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`};let t=op.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 ap(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 cp(e){return{path:e.path,code:e.code,message:e.message,...e.details?{details:JSON.parse(JSON.stringify(e.details))}:{}}}function av(e){return e.map(t=>`${t.code} (${t.path}): ${t.message}`).join("; ")}var Rr=class extends Error{constructor(t){let n=t.map(cp);super(av(n)),this.name="RouteBuildDiagnosticsError",this.diagnostics=n}};function lp(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(cp)}:{routeId:e,message:n}}function Ba(e){return e.map(({routeId:t,message:n})=>`${t}: ${n}`).join("; ")}function up(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 cv,SiteEditCompositionSelectorSchema as lv}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 dp(e,t){throw new Pe("INVALID_COMPOSITION",e,{value:t})}function qo(e){let t=cv.safeParse(e);return t.success?t.data:dp("Invalid SiteEditCompositionContext.",e)}function fp(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=lv.safeParse(l);if(!u.success)return dp("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 yv=/^(?:src\/)?app\/.*\/?page\.[cm]?[jt]sx?$/,xv=["layout.tsx","layout.ts","layout.jsx","layout.js","layout.mjs","layout.cjs"],pp=32,mp=256;function Sv(e){return{expectedIndexDigest:e.digest,publishedIndexDigest:e.digest,publishedCursor:e.cursor,publishedCurrentId:e.currentId}}var gp={maxEntries:50,maxBytes:8*1024*1024};function bv(){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 Ev(){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>gp.maxEntries||Iv(e)>gp.maxBytes;)e.shift()}}function Iv(e){return e.reduce((t,n)=>t+vv(n),0)}function vv(e){return hp(e.preSnapshots)+hp(e.postSnapshots)+kv(e.provenance)}function kv(e){return e?new TextEncoder().encode(JSON.stringify(e)).byteLength:0}function hp(e){return e.reduce((t,n)=>t+n.file.length+n.content.length,0)}function yp(e,t){return{key:uv(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 Cv(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 xp(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 Rv=/\.(?:[cm]?[jt]sx?)$/i,wv=/\.json$/i,Nv=/\.(?:css|scss|sass)$/i,Pv=/\.mdx$/i,Av=/\.ya?ml$/i;function Tv(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 _v(e){return{kind:e.isProxy?"component-proxy":"jsx-node",file:e.file,componentName:e.componentName,isProxy:e.isProxy}}function Fv(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=kp(await e.listFiles(r)),i=new Map(o.files.map(a=>[a.path,a]));for(let[a,c]of n)if(Mv(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 Mv(e,t){return t.length===0?!0:t.some(n=>e===n||e.startsWith(`${n}/`))}function kp(e){return Array.isArray(e)?{files:e}:e}function Ov(e){if(!pv(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!==gv||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=fv(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(Rv.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(wv.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(Nv.test(e.path)){let t=Sp({content:e.content,path:e.path,profile:"css"});if(!t.ok)return t}if(Pv.test(e.path)){let t=Sp({content:e.content,path:e.path,profile:"mdx"});if(!t.ok)return t}if(Av.test(e.path))try{hv(e.content)}catch(t){return{ok:!1,errorCode:"ast-error",message:`YAML parse failed: ${Fe(t)}`,details:{path:e.path}}}return{ok:!0}}function Sp({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 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(`
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??bv(),r=Sf(),o=fp({compositions:e.compositions,initialDocumentVersions:e.initialDocumentVersions}),i=new Map,s=new Map,a=new Set,c=null,l=e.history??(e.historyStore?tp(e.historyStore):Ev()),u=xf(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(up({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=yp(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=Ed(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 Id({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=Tv(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 vd({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(_v(me.writeTarget),_),oe=ru({key:$,element:K,graph:f,provenances:ge}),Se=au(K),Je=cu(K),pn=lu(K),mn=Q?await Yd({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 Hc(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,mp);let Ie=await It(I.composition,I.entryFile,L,R);F.routeId=I.routeId,F.composition=I.composition;let Y=Gc(F),ge=Zc(Y,F),_=await D(F,Y,L,R,$),j=um(F,ge,_),z=lm(_),oe=Wv(Wl(F,Y,ge,{canUpdateTextByKey:j,dynamicDataSummaryByKey:z}),F,_),Se=jl({route:I.routeId,composition:I.composition,entryFile:I.entryFile,version:Q,source:y,ast:K?.ast}),Je=$l(Se);Se.ok&&Lv(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:Cv(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 Vv(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 Kv(K)){let Q=Ip($,me);Q&&R.push(Q)}}if(!R.length){for(let $ of Uv(y))if(await xc($)){R.push($);break}}let A=new Map,F=wp(R).slice(0,pp);for(;F.length>0&&A.size<pp;){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 Jv(K)){let Q=Ip($,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,mp),I}async function xc(f){return typeof n.exists=="function"?n.exists(f):!1}function lm(f){let y=new Map;for(let[h,I]of f)I.dynamicData?.bindings.length&&y.set(h,cf(I.dynamicData.bindings));return y}function um(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||dm(K)});I.set(R,T)}return I}function dm(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(Ep),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({...lp(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 fm(f){let y=new Set(un(f));return o.entries.filter(h=>y.has(h.key)).map(h=>h.context)}function pm(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 mm(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 gm(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 hm();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 hm(){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(!Dv(R))try{if(await n.exists(h))continue}catch{continue}p.add(h),y.push(h)}}return y}function Ic(f){ap(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 ym(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 xm(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=Ov(y);if(!h.ok)return Ei(f,h.errorCode,h.message,h.details)}m+=1;try{let y=await km(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 Sm(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 bm(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=kp(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=Gf({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 Em(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 Af({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=Tm(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?Ml({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 Im(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=Ol({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 vm({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 vm(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 km(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=Cm(f);if(y.length===0)return{ok:!0};let h=Fv(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 Cm(f){return f.map(h=>h.path).some(Ep)?[...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 Rm(h));return y}async function Rm(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 wm(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(Nm)}}async function Nc(f){if(f.exists===!1){await n.deleteFile(f.file);return}await n.writeFile(f.file,f.content)}async function wm(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 Nm(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(()=>Pm(f))}async function Pm(f){let y=f.filePlan.edits.map(_=>_.file),h=o.resolveSelector(f.request.composition).context,I=f.historyPolicy==="none"?void 0:{initiatingComposition:h,affectedCompositions:pm(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?Sv(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,...xp(f.selectionRef,oe.map(Je=>Je.state.document))?{selectionRef:xp(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?Am(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 Am(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}=gm(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})=>{_=mm(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 Tm(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=yp(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=Gl(I,h.graph,h.topology,h.capabilities,R.textSources,R.provenances,R.dynamicData);return f===I?A:qv(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=Hl(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 fu({key:I,route:{composition:h.composition,routeId:h.routeId,graph:h.graph,source:A}})},refreshSourceForKey:ym,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 xm(f);if(f.kind==="insert-page-resource")return Sm(f);if(f.kind==="delete-page-source")return bm(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"?Em(L,I):f.kind==="move-node"||f.kind==="remove-node"?Im(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=jv(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 fm(f)},subscribe(f){return r.subscribe(f)}}}function Dv(e){return e instanceof Error&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR")}function Lv(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)||Bv(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 Bv(e,t){return bp(e.startLine,e.startColumn,t.startLine,t.startColumn)<=0&&bp(e.endLine,e.endColumn,t.endLine,t.endColumn)>=0}function bp(e,t,n,r){return e!==n?e-n:t-r}function jv(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 vp(e.detailProjections?.get(p.baseKey)?.textTargets.get(d)??null,p.repeatIndex)},async getElementPropertyWriteTarget(u,d){let p=c(u);return vp(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=mv(u);return d?{baseKey:d.baseKey,repeatIndex:Gv(e.document??null,u,d.baseKey,e.documentIndex)??Hv(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 $v={"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 $v[e]}function Fe(e){return e instanceof Error&&e.message?e.message:String(e)}function Ep(e){return/\.(?:[cm]?[jt]sx?|css|scss|sass|mdx|json)$/i.test(e)}function Vv(e){let t=cn(e);if(!yv.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=>xv.map(a=>`${s}/${a}`))}function Uv(e){let n=cn(e).startsWith("src/app/")?"src/app":"app";return[`${n}/globals.css`,`${n}/global.css`]}function Kv(e){return Cp(e,/\bimport\s+(?:[^'";]+?\s+from\s+)?["']([^"']+\.css(?:\?[^"']*)?)["']/g)}function Jv(e){return Cp(e,/@import\s+(?:url\(\s*)?["']([^"']+)["']/g)}function Cp(e,t){let n=[];for(let r of e.matchAll(t)){let o=Rp(r[1]??"");o&&n.push(o)}return n}function Ip(e,t){let n=Rp(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(`${Xv(e)}/${n}`):n.startsWith("/")?cn(n.slice(1)):$a(n)?cn(n):null}function Rp(e){return e.split(/[?#]/,1)[0]?.trim()??""}function $a(e){return/\.css$/i.test(e)}function Xv(e){let t=cn(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}function wp(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 zv(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 vp(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 Wv(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)=>dv(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=wp([...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 Yv(P))w.length<=g.length||Zv(w,g)&&S.add(w[g.length])}}return S.size>0?S.size:zv(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 Hv(e){let t=e.parts.at(-1);return typeof t?.repeatIndex=="number"?t.repeatIndex:null}function Gv(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 Yv(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 Zv(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 qv(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 ek}from"node:util";import{SITE_EDIT_SOURCE_ALLOWED_APP_FILES as Pp,SITE_EDIT_SOURCE_ALLOWED_DIRS as Ap,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as Tp,SiteEditCompositionContextSchema as tk,SiteEditSourceFileResponseSchema as Va,SiteEditSourceLocationSchema as nk,SiteEditSourcePathSchema as ri,SiteEditSourceTreeResponseSchema as rk,isSiteEditTextSourcePath as ok}from"@vcp-dev/contracts";var ik=[...Tp,...Pp,...Ap];function za(e){if(!e.composition)throw new Error("Composition unavailable for source access policy.");return tk.parse(e.composition)}var Ua=2e3,Ka=12,Ja=24*1024*1024,Np=512*1024,sk=new Set(["image/avif","image/gif","image/jpeg","image/png","image/webp","image/x-icon"]),ak={".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"},ck={".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"},lk=new ek("utf-8",{fatal:!0});async function oi(e,t={}){let n=za(t),{files:r,truncated:o}=await yk(e,t),i=bk(r.map(s=>s.metadata));return rk.parse({composition:n,nodes:i,defaultPath:Ek(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 fk(e,o,n);if(!i)throw new Error(`Source file not found: ${o}`);if(Wa(o)){let a=Mp(o),c=await mk(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 uk(e,o);return s.ok?Va.parse({composition:r,path:o,kind:"text",language:Op(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 uk(e,t){if(e.readFileBytes){let o=await e.readFileBytes(t),i=dk(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 dk(e){if(e.includes(0))return null;try{return lk.decode(e)}catch{return null}}async function fk(e,t,n){if(!gk(t,n))return null;let r=await pk(e,t);return r?{path:t,sizeBytes:r.sizeBytes}:null}async function pk(e,t){if(e.getFileInfo)return e.getFileInfo(t);if(e.listFiles){let o=_p(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 mk(e,t){if(!sk.has(t.mimeType))return{previewUnavailableReason:"unsupported-mime"};if(t.sizeBytes>Np)return{previewUnavailableReason:"too-large"};if(!e.readFileBytes)return{previewUnavailableReason:"bytes-unavailable"};let n=await e.readFileBytes(t.path);return n.byteLength>Np?{previewUnavailableReason:"too-large"}:{contentBase64:Buffer.from(n).toString("base64")}}function gk(e,t){return Tp.some(n=>n===e)||Pp.some(n=>n===e)||Ap.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 nk.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 _p(e){return Array.isArray(e)?{files:e}:e}function hk(e){return["max-files","max-depth","max-total-bytes"].filter(n=>e.includes(n))}async function yk(e,t){if(!e.listFiles)throw new Error("Source file listing is unavailable.");let n=_p(await e.listFiles({roots:xk(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:Sk(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:hk([...o]),maxFiles:Ua,maxDepth:Ka,maxTotalBytes:Ja}}:{}}}function xk(e){let t=new Set(ik);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 Sk(e,t,n){return Wa(e)?{composition:n,path:e,kind:"binary",language:null,sizeBytes:t,mimeType:Mp(e),readonly:!0}:{composition:n,path:e,kind:"text",language:Op(e),sizeBytes:t,readonly:!1}}function bk(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 Fp(t)}function Fp(e){return e.map(t=>t.kind==="directory"?{...t,children:Fp(t.children)}:t).sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}function Ek(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!ok(e)}function Mp(e){let t=Xa.posix.extname(e).toLowerCase();return!t&&Xa.posix.basename(e).toLowerCase()==="favicon"?"image/x-icon":ak[t]??"application/octet-stream"}function Op(e){let t=Xa.posix.extname(e).toLowerCase();return ck[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=vk.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=kk.parse({siteId:t.siteId,baseSnapshotId:t.baseSnapshotId,operationId:t.id,reason:`site-edit:${t.kind}`,patches:a.map(l=>Ck(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 Ck(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 Rk(e){return new ai(e)}import{SiteEditOperationRequestSchema as Pk}from"@vcp-dev/contracts";import st from"node:fs/promises";import Me from"node:path";import{SITE_EDIT_SOURCE_ALLOWED_DIRS as wk,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as Nk}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??[...Nk,...wk],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=Pk.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 Ak(e){return new li(e)}import{createHash as Tk,randomUUID as sc}from"node:crypto";import ye from"node:fs/promises";import be from"node:path";var Ye=1,Ya=1,_k=2,Fk="index.json",Mk="recovery.json",Ok="transaction-journal.json",Dk="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 Xp(e,t={}){let n=Yk(e),r=qk(t.limits),o=Ga(n),i=Zk(n),s=await Le(i),a=await Le(o)||s;a||(await Uk(n),await Kk(n)),a||await eC(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 Kp(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 Kp(n);await Ar(Qp(n),{schemaVersion:1,version:Math.max(p,d)})},async stageAppend(d,p={}){await u();let m=await Lp(d,r),g={schemaVersion:Ya,stageId:sc(),entryId:m.entryId,blobIds:m.blobs.map(S=>S.digest)};try{await Bp(n,m),await jk(n,g,p.durableManifest!==!1)}catch(S){try{await $p(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 $p(n,p)},async previewStagedAppend(d,p){return await u(),(await Dp(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),zp(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 Dp(n,r,d,p);return Up({rootDir:n,previousDigest:g.current.digest,entryIds:g.entryIds,cursor:g.cursor,afterWrite:async()=>{m?await pi(n,m):await Vk(n,d),await Pr(n,g.entryIds)}})},async append(d){await u();let p=await Ve(n),m=await Lp(d,r),g=[...p.entryIds];p.cursor<g.length-1&&g.splice(p.cursor+1),g.push(m.entryId);try{await Bp(n,m);let S=await Wp(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),Up({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(),qp(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 Jk(n);let d=await Ve(n);await Pr(n,d.entryIds)}}}async function Dp(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 Wp(e,s,t);return{current:o,entryIds:a.entryIds,cursor:a.cursor,transition:zp(o,a.entryIds,a.cursor)}}function zp(e,t,n){return Za(n,t.length),{expectedIndexDigest:e.digest,publishedIndexDigest:Lk(t,n),publishedCursor:n,publishedCurrentId:t[n]??null}}function Lk(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 Bk(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 Lp(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=Gk(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 Bp(e,t){let n=fc(e,t.entryId),r={id:t.entryId,...t.entryBody},o=[...t.blobs.map(a=>jp(pc(e,a.digest),a.bytes,{kind:"blob",digest:a.digest},gc(e,a.digest))),jp(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 jp(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 Yp(e,t)}async function Wp(e,t,n){let r=[...t],o=r.length-1;for(;;){if((await Gp(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 jk(e,t,n){ac(t);let r=dc(e,t.stageId);if(n){await Ar(r,t);return}await Hk(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 $p(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 Vp(fc(e,t.entryId),mc(e,t.entryId));for(let s of t.blobIds)i.has(s)||await Vp(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 $k(e)}async function $k(e){try{await ye.rmdir(uc(e))}catch(t){if(Dr(t)||at(t)&&t.code==="ENOTEMPTY")return;throw t}}async function Vk(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 Vp(e,t){await qa(e),await qa(t)}function ac(e){if(!at(e)||e.schemaVersion!==Ya||typeof e.stageId!="string"||!Hp(e.stageId)||!Ke(e.entryId))throw new W(J.INVALID_SCHEMA,"history stage schema is invalid");let t=Zp(e.blobIds,"history stage blobIds");return{schemaVersion:Ya,stageId:e.stageId,entryId:e.entryId,blobIds:t}}function ec(e){if(!Hp(e))throw new W(J.INVALID_PATH,"history stageId must be a UUID")}function Hp(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=Jp(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=Jp(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=Xk(r),i=[...o.entryIds],{totalBytes:s}=await Gp(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 Gp(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 em(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 em(e,t),r=await jt(n,J.NOT_FOUND,"entry"),o=Fr(Buffer.from(r).toString("utf8"),`entry ${t}`),i=zk(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 Up(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 Uk(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 Kk(e){await ye.rm(Tr(e),{recursive:!0,force:!0}),await ye.mkdir(Tr(e),{recursive:!0})}async function Jk(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 Xk(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=Zp(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 zk(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=Wk(e.blobs);return{id:t,schemaVersion:Ye,kind:n,manifest:r,blobs:o}}function Wk(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 Yp(e,Ue(t))}async function Hk(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 Yp(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 Zp(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:${Tk("sha256").update(e).digest("hex")}`}function Gk(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 Yk(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,Fk)}function Ga(e){return be.join(e,Mk)}function Zk(e){return be.join(e,Ok)}function Qp(e){return be.join(e,Dk)}async function Kp(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 qp(n),n}function qp(e){if(!at(e)||e.schemaVersion!==_k||typeof e.transactionId!="string"||e.transactionId.length===0||typeof e.operationId!="string"||e.operationId.length===0||!["prepared","files-written","history-published"].includes(e.phase)||!Bk(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),`${nm(t)}.json`)}function pc(e,t){return be.join(Or(e),nm(t))}function mc(e,t){return be.join(Mr(e),`${t}.json`)}function gc(e,t){return be.join(Or(e),t)}async function em(e,t){return tm(fc(e,t),mc(e,t))}async function hc(e,t){return tm(pc(e,t),gc(e,t))}async function tm(e,t){return await Le(e)?e:await Le(t)?t:e}function nm(e){return e.slice(7)}function Jp(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 qk(e){return{maxEntries:e?.maxEntries??di.maxEntries,maxSessionBytes:e?.maxSessionBytes??di.maxSessionBytes,maxEntryBytes:e?.maxEntryBytes??di.maxEntryBytes}}async function eC(e){let t=yi(e);await Le(t)||await cc(e,[],-1)}import{createHash as tC}from"node:crypto";import{computeSiteEditCompositionKey as om,ManagedPageTemplateRouteManifestV1Schema as nC}from"@vcp-dev/contracts";var rC="app/_vcp/page-templates/runtime.tsx",im=".vcp/page-templates/routes/",oC="app/_vcp/page-templates/routes/";function sm(e){return e.startsWith(im)&&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 tC("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=`${oC}${n}`,o=Si(t);return{routeRoot:r,manifestFile:`${im}${n}.json`,runtimeFile:rC,registryFile:`${r}/registry.ts`,templateEntryFile:`${r}/templates/${o}/page.tsx`}}function am(e){let t=uC(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=cm(e.files),r=Lr(t,""),o=n.get(r.manifestFile);if(o===void 0)return null;let i=cC(t,r.manifestFile,o);return lC({routeId:t,manifest:i,files:n}),i}function iC(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 sC(e){let t=cm(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(sm(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(aC(d,l.entryFile));continue}for(let d of[...u.templates].sort(dC)){let p={routeId:l.routeId,effectiveTemplateId:d.template_id},m={context:p,entryFile:ln(d.entry_file)};a.push({key:om(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)=>fC(l.composition,u.composition)||xi(l.key,u.key)).map(({composition:l})=>l)}function aC(e,t){return{key:om(e),composition:{context:e,entryFile:t}}}function cm(e){let t=new Map;if(mC(e)){for(let n of e)rm(t,n.path,n.content);return t}for(let[n,r]of e)rm(t,n,r);return t}function rm(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 cC(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=nC.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 lC(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),am(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),pC(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 uC(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 dC(e,t){return+(t.kind==="default")-+(e.kind==="default")||xi(e.template_id,t.template_id)}function fC(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 pC(e,t){return e.startsWith(`${t}/`)}function ln(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function mC(e){return Array.isArray(e)}export{W as FileHistoryStoreError,Ae as PageTemplateManagedSourceError,li as PreviewFileSystemSiteEditEngineRuntime,Ef as SITE_EDIT_RAW_COLOR_LITERAL_RE,ai as SnapshotSiteEditEngineRuntime,am as assertNoPageTemplateSafeNameCollision,Lr as computeManagedPageTemplatePaths,$n as computePageTemplateRouteKey,Si as computePageTemplateSafeName,Ak as createPreviewSiteEditEngineRuntime,Rk as createSiteEditEngineRuntime,sm as isManagedPageTemplateManifestPath,Xp as openFileHistoryStore,yc as parseManagedPageTemplateManifest,iC as resolveManagedPageTemplateComposition,sC 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??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};