@vcp-dev/site-edit-engine 0.8.2 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import{SiteEditOperationRequestSchema as mk,SiteEditPatchPlanSchema as gk}from"@vcp-dev/contracts";function Vt(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 $r(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 Vr(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 Ur(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:Nm(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 Kr(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:Vt(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 Nm(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 tv,composeSiteEditRepeatInstanceKey as nv,getSiteEditSourceDeleteProtectionReason as rv,isSiteEditTextSourcePath as ov,parseSiteEditRepeatInstanceKey as iv,SITE_EDIT_SOURCE_DELETE_CAPABILITY as sv,stripSiteEditRepeatInstanceKeys as $e}from"@vcp-dev/contracts";import{parse as av}from"yaml";import Go from"node:path";function Kn(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 Pi from"@babel/traverse";import*as x from"@babel/types";import{createHash as Mm}from"node:crypto";import*as Fc from"@babel/parser";function Ut(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:Ut(t,n,r,o)}}function Ii(e,t,n,r,o){return{ok:!1,source:e,diagnostic:Ut(t,n,r,o)}}var Pm={"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:Fc.parse(t,{sourceType:"module",plugins:Pm[n]})}}catch(r){return{ok:!1,source:t,diagnostic:Ut("parse-failed",`AST parse failed: ${r instanceof Error?r.message:String(r)}`)}}}function vi(e,t){return ct({source:e,profile:Mc(t.kind)})}function ki(e,t){return ct({source:e,profile:Mc(t)})}function Mc(e){return"next-app-entry"}function Kt(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 Am from"@babel/parser";import*as mn from"@babel/types";import*as vt from"node:path";var Ci=[".tsx",".ts",".jsx",".js"],Tm=Ci.map(e=>`/index${e}`);function Oc(e){let t=[];for(let n of e.program.body)mn.isImportDeclaration(n)&&typeof n.source.value=="string"&<(n.source.value)&&t.push(n.source.value),mn.isExportNamedDeclaration(n)&&n.source&&typeof n.source.value=="string"&<(n.source.value)&&t.push(n.source.value),mn.isExportAllDeclaration(n)&&typeof n.source.value=="string"&<(n.source.value)&&t.push(n.source.value);return Ri(e.program,t),t}function Ri(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"&<(r.value)&&t.push(r.value)}for(let r of Object.values(n))if(Array.isArray(r))for(let o of r)Ri(o,t);else r&&typeof r=="object"&&Ri(r,t)}function lt(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("@/")}function wi(e,t){if(t.startsWith("@/"))return t.slice(2).replace(/\\/g,"/");let n=vt.dirname(e);return vt.join(n,t).replace(/\\/g,"/")}async function _m(e,t){if(Ci.some(n=>e.endsWith(n))&&await t(e))return e;for(let n of Ci){let r=`${e}${n}`;if(await t(r))return r}for(let n of Tm){let r=`${e}${n}`;if(await t(r))return r}return null}async function gn(e,t,n){let r=await Jr(e,t,n);return r.ok?r.path:null}async function Jr(e,t,n){let r=wi(e,t);try{if(!Fm(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 _m(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 Fm(e,t,n){if(!lt(t)||t.includes("\0")||t.includes("\\")||vt.posix.isAbsolute(n))return!1;let r=vt.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!vt.posix.isAbsolute(e)}var Jn=(e,t)=>{let n=ct({source:t,profile:Kt({filePath:e,source:t})});return n.ok?{ok:!0,module:{file:e,source:t,sourceHash:`sha256:${Mm("sha256").update(t).digest("hex")}`,ast:n.ast,imports:Oc(n.ast).map(r=>({specifier:r}))}}:{ok:!1,diagnostic:{path:e,code:"parse-failed",message:n.diagnostic.message}}};var Xr="components/ui";function Jt(e){if(!e)return!1;let t=Ni(e);return t===Xr||t.startsWith(`${Xr}/`)||t.includes(`/${Xr}/`)||t.endsWith(`/${Xr}`)}function Xn(e,t){return e?e.startsWith("@/")||e.startsWith("~/")?Jt(e.slice(2)):e.startsWith("./")||e.startsWith("../")?Jt(Ni(`${Om(t)}/${e}`)):Jt(e):!1}function Ni(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 Om(e){let t=Ni(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}var Dm=typeof Pi=="function"?Pi:Pi.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 Lm(e){return/^[A-Z]/.test(e)}function Oi(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 yn(e){return x.isJSXFragment(e)}function Bc(e){return x.isJSXIdentifier(e.name)?e.name.name:x.isJSXMemberExpression(e.name)?jc(e.name):x.isJSXNamespacedName(e.name)?`${e.name.namespace.name}:${e.name.name.name}`:"unknown"}function jc(e){return x.isJSXIdentifier(e.object)?`${e.object.name}.${e.property.name}`:x.isJSXMemberExpression(e.object)?`${jc(e.object)}.${e.property.name}`:e.property.name}function Bm(e){return e.split(".")[0]??e}function jm(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 $m(){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 Vm(e){let t=new Map;for(let n of e.program.body){if(!x.isImportDeclaration(n))continue;let r=n.source.value;for(let o of n.specifiers)if(x.isImportDefaultSpecifier(o))t.set(o.local.name,{specifier:r,exportName:"default"});else if(x.isImportNamespaceSpecifier(o))t.set(o.local.name,{specifier:r,exportName:"*"});else if(x.isImportSpecifier(o)){let i=x.isIdentifier(o.imported)?o.imported.name:o.imported.value;t.set(o.local.name,{specifier:r,exportName:i})}}return t}function mt(e,t=[]){if(x.isIdentifier(e))return t.push(e.name),t;if(x.isObjectPattern(e)){for(let n of e.properties)x.isObjectProperty(n)?mt(n.value,t):x.isRestElement(n)&&mt(n.argument,t);return t}if(x.isArrayPattern(e)){for(let n of e.elements)n&&(x.isRestElement(n)?mt(n.argument,t):mt(n,t));return t}return x.isAssignmentPattern(e)?(mt(e.left,t),t):(x.isRestElement(e)&&mt(e.argument,t),t)}function kt(e,t){return e.start==null||e.end==null?"":t.slice(e.start,e.end)}function zr(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 Um(e,t,n){e.set(t,{resolved:!0,value:n})}function Di(e,t){e.set(t,{resolved:!1})}function $c(e,t){let n=e;for(let r of t){if(r.kind==="property"){if(n==null||Array.isArray(n)||typeof n!="object"||!(r.name in n))return{kind:"known-empty"};n=n[r.name];continue}if(!Array.isArray(n)||r.index<0||r.index>=n.length)return{kind:"known-empty"};n=n[r.index]}return{kind:"resolved",value:n}}function Ne(e,t,n){if(x.isTSAsExpression(e)||x.isTSSatisfiesExpression(e)||x.isTSNonNullExpression(e)||x.isTypeCastExpression(e)||x.isParenthesizedExpression(e))return Ne(e.expression,t,n);if(x.isLogicalExpression(e))return Ai([Ne(e.left,t,n),Ne(e.right,t,n)]);if(x.isConditionalExpression(e))return Ai([Ne(e.consequent,t,n),Ne(e.alternate,t,n)]);if(x.isTemplateLiteral(e))return Ai(e.expressions.filter(x.isExpression).map(i=>Ne(i,t,n)));if(x.isIdentifier(e))return{kind:"identifier",expression:e.name,base:e.name,path:[]};if(!x.isMemberExpression(e)&&!x.isOptionalMemberExpression(e))return null;let r=[],o=e;for(;x.isMemberExpression(o)||x.isOptionalMemberExpression(o);){if(o.computed)if(x.isNumericLiteral(o.property))r.unshift({kind:"index",index:o.property.value});else if(x.isStringLiteral(o.property))r.unshift({kind:"property",name:o.property.value});else if(n&&x.isExpression(o.property)){let i=zt(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:kt(e,t),base:o.name,path:r}:null}function Ai(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 zt(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=zr(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=zt(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=zr(r.value.name,t.valueScopes);if(s.kind!=="resolved")return;i=s.value}else i=zt(r.value,t);if(i===void 0)return;n[o]=i}return n}if(x.isMemberExpression(e)){let n=Ne(e,"",t);if(!n)return;let r=zr(n.base,t.valueScopes);if(r.kind!=="resolved")return;let o=$c(r.value,n.path);return o.kind==="resolved"?o.value:void 0}if(x.isCallExpression(e))return Uc(e,t)??void 0}function Vc(e,t,n){let r=Ne(e,n,t);if(!r)return x.isMemberExpression(e)||x.isBinaryExpression(e)||x.isLogicalExpression(e)||x.isConditionalExpression(e)||x.isCallExpression(e)?{value:kt(e,n),source:null}:null;let o=zr(r.base,t.valueScopes),i=r.kind==="identifier"?o:o.kind==="resolved"?$c(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 Ti(e,t,n,r,o,i){return{file:e,componentName:t,elements:n,regions:r,ordinalTracker:$m(),parentStack:[],valueScopes:i,importMap:o}}function Fi(e,t,n){for(let r of e)for(let o of r.declarations){for(let s of mt(o.id))Di(n,s);if(!x.isIdentifier(o.id)||!o.init||!x.isExpression(o.init))continue;let i=zt(o.init,t);i!==void 0&&Um(n,o.id.name,i)}}function Km(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 Jm(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:kt(s,n),sourceRange:_e(i),editable:!0,source:Ne(s,n,t)})}else if(x.isJSXExpressionContainer(i)&&x.isExpression(i.expression)){let s=Vc(i.expression,t,n);s&&r.push({index:o++,value:s.value,sourceRange:_e(i),editable:!0,source:s.source})}return r}function Xm(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=zt(o.value.expression,t);if(o.name.name==="className"){let a=typeof i=="string"?i:i===void 0?Uc(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=Vc(o.value.expression,t,n);if(i!==void 0&&typeof i!="string"&&typeof i!="number"){r.push({name:o.name.name,value:Dc(i),sourceRange:_e(o),source:Ne(o.value.expression,n,t),resolvedValue:i});continue}if(!s){i!==void 0&&r.push({name:o.name.name,value:Dc(i),sourceRange:_e(o),source:Ne(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 Uc(e,t){let n=hn(e,t);return n&&n.map(o=>o.trim()).filter(Boolean).join(" ")||null}function hn(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=zt(e,t);return typeof n=="string"?[n]:null}if(x.isConditionalExpression(e)){let n=hn(e.consequent,t),r=hn(e.alternate,t);return!n||!r?null:[...n,...r]}if(x.isLogicalExpression(e)){if(e.operator!=="&&")return null;let n=zt(e.left,t);return n===!1||n===null?[]:hn(e.right,t)}if(x.isArrayExpression(e)){let n=[];for(let r of e.elements){if(!r||x.isSpreadElement(r))return null;let o=hn(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=Wm(r.key);if(!o)return null;n.push(o)}return n}if(x.isCallExpression(e)){let n=zm(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=hn(o,t);if(!i)return null;r.push(...i)}return r}return null}function zm(e){return x.isIdentifier(e)?e.name:x.isMemberExpression(e)&&x.isIdentifier(e.property)?e.property.name:null}function Wm(e){return x.isIdentifier(e)?e.name:x.isStringLiteral(e)?e.value:null}function Hm(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 Gm(e,t){for(let n of t){let r=Hm(e,n);if(r)return r}return null}function Ym(e){return x.isJSXIdentifier(e.name)?e.name.name:null}function Dc(e){return e===null?"null":typeof e=="boolean"?e?"true":"false":JSON.stringify(e)}function Zm(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 _i(e){return x.isArrowFunctionExpression(e)||x.isFunctionExpression(e)}function Qm(e){return e==="render"||e==="itemRender"||e==="rowRender"||e==="children"}function qm(e){return e==="empty"||e==="emptyRender"||e==="loading"||e==="loadingRender"||e==="error"||e==="errorRender"||e==="fallback"||e==="headerRender"||e==="footerRender"}function Lc(e,t,n,r){if(!e||!x.isExpression(e))return null;let o={kind:"repeat-template",collectionExpression:kt(e,n),collectionSource:Ne(e,n,r)};if(t){let i=t.params[0],s=t.params[1];x.isIdentifier(i)&&(o.itemParamName=i.name),x.isIdentifier(s)&&(o.indexParamName=s.name)}return o}function Ct(e,t,n){if(!e)return[];if(x.isJSXElement(e)){if(Oi(e))return Zr(e.children,t,n);let r=Gr(e,t,n);return r?[r]:[]}return yn(e)?Yr(e,t,n):x.isParenthesizedExpression(e)?Ct(e.expression,t,n):x.isExpression(e)?Qr(e,t,n):[]}function Wr(e,t,n){let r=new Map;for(let o of e.params)for(let i of mt(o))Di(r,i);t.valueScopes.push(r);try{if(!x.isBlockStatement(e.body))return Ct(e.body,t,n);let o=new Map;t.valueScopes.push(o);try{return Kc(e.body.body,t,n)}finally{t.valueScopes.pop()}}finally{t.valueScopes.pop()}}function Kc(e,t,n){let r=[];for(let o of e){if(x.isVariableDeclaration(o)){let i=t.valueScopes[t.valueScopes.length-1];i&&Fi([o],t,i);continue}r.push(...Mi(o,t,n))}return r}function Mi(e,t,n){if(x.isReturnStatement(e))return e.argument?Ct(e.argument,t,n):[];if(x.isBlockStatement(e))return Xt(e.body,t,n);if(x.isIfStatement(e)){let r=x.isBlockStatement(e.consequent)?Xt(e.consequent.body,t,n):Mi(e.consequent,t,n),o=e.alternate?x.isBlockStatement(e.alternate)?Xt(e.alternate.body,t,n):Mi(e.alternate,t,n):[];return[...r,...o]}if(x.isSwitchStatement(e))return Xt(e.cases.flatMap(r=>r.consequent),t,n);if(x.isTryStatement(e)){let r=Xt(e.block.body,t,n);return e.handler&&r.push(...Xt(e.handler.body.body,t,n)),e.finalizer&&r.push(...Xt(e.finalizer.body,t,n)),r}return[]}function Xt(e,t,n){let r=new Map;t.valueScopes.push(r);try{return Kc(e,t,n)}finally{t.valueScopes.pop()}}function Hr(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 eg(e,t,n,r){let o=Gm(e.openingElement,["items","dataSource","data"]),i={key:t,tag:Bc(e.openingElement)};n.parentStack.push(i);try{for(let s of e.openingElement.attributes){if(!x.isJSXAttribute(s))continue;let a=Ym(s);if(!a||!x.isJSXExpressionContainer(s.value))continue;let c=s.value.expression;if(!x.isJSXEmptyExpression(c)){if(Qm(a)&&_i(c)){let l=Wr(c,n,r),u=Lc(o,c,r,n);Hr(n,"repeat-region",t,s,l,u?[u]:void 0);continue}if(qm(a)){let l=_i(c)?Wr(c,n,r):Ct(c,n,r);Hr(n,"conditional-region",t,s,l)}}}if(o)for(let s of e.children){if(!x.isJSXExpressionContainer(s)||!_i(s.expression))continue;let a=Wr(s.expression,n,r),c=Lc(o,s.expression,r,n);Hr(n,"repeat-region",t,s,a,c?[c]:void 0)}}finally{n.parentStack.pop()}}function Gr(e,t,n){let r=Bc(e.openingElement);if(r==="Fragment"||Oi(e))return Zr(e.children,t,n),null;let o=t.parentStack[t.parentStack.length-1]??null,i=o?.key??null,s=Lm(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=Kn(t.file,t.componentName,l),d={file:t.file,component:t.componentName,structuralPath:l,key:u},p=s?"component-boundary":null,m=Jm(e.children,t,n),g=Xm(e.openingElement,t,n),S,C,v=!1;if(s){let w=t.importMap.get(r)??t.importMap.get(Bm(r));w&&(S=w.specifier,C=w.exportName,v=Xn(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),eg(e,u,t,n),(!s||e.children.length>0)&&(t.parentStack.push({key:u,tag:r}),tg(e.children,t,n),t.parentStack.pop()),u}function Yr(e,t,n){return Zr(e.children,t,n)}function Zr(e,t,n){let r=[];for(let o of e)if(x.isJSXElement(o))if(Oi(o))r.push(...Zr(o.children,t,n));else{let i=Gr(o,t,n);i&&r.push(i)}else yn(o)?r.push(...Yr(o,t,n)):x.isJSXExpressionContainer(o)&&r.push(...Qr(o.expression,t,n));return r}function tg(e,t,n){for(let r of e)x.isJSXElement(r)?Gr(r,t,n):yn(r)?Yr(r,t,n):x.isJSXExpressionContainer(r)&&Qr(r.expression,t,n)}function ng(e){return e==="&&"||e==="||"||e==="??"}function Qr(e,t,n){if(x.isJSXEmptyExpression(e))return[];let r=Zm(e);if(r){let o=r.call,i=t.parentStack[t.parentStack.length-1]??null,s=[],a=r.callback,c={kind:"repeat-template",collectionExpression:kt(r.collection,n),collectionSource:Ne(r.collection,n,t)};if(x.isArrowFunctionExpression(a)||x.isFunctionExpression(a)){let u=a.params[0],d=a.params[1];x.isIdentifier(u)&&(c.itemParamName=u.name),x.isIdentifier(d)&&(c.indexParamName=d.name)}s.push(c);let l={kind:"repeat-region",ownerKey:i?.key??"",childKeys:[],sourceRange:_e(o),sourceCandidates:s.length>0?s:void 0};return t.regions.push(l),(x.isArrowFunctionExpression(a)||x.isFunctionExpression(a))&&l.childKeys.push(...Wr(a,t,n)),l.childKeys}if(x.isConditionalExpression(e)){let o=t.parentStack[t.parentStack.length-1]??null,i={kind:"conditional-branch",conditionExpression:kt(e.test,n),conditionSource:Ne(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(...Ct(e.consequent,t,n)),s.childKeys.push(...Ct(e.alternate,t,n)),s.childKeys}if(x.isLogicalExpression(e)&&ng(e.operator)){let o=t.parentStack[t.parentStack.length-1]??null,i={kind:"conditional-branch",conditionExpression:kt(e.left,n),conditionSource:Ne(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(...Ct(e.right,t,n)),s.childKeys}if(x.isParenthesizedExpression(e))return Qr(e.expression,t,n);if(x.isJSXElement(e)){let o=Gr(e,t,n);return o?[o]:[]}return yn(e)?Yr(e,t,n):[]}function rg(e){let t=e.argument;return t&&(x.isExpression(t)||yn(t))?t:null}function zn(e,t){let n=[];for(let r of e){if(x.isReturnStatement(r)){let o=rg(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(...zn(o,r.test)),r.alternate){let i=x.isBlockStatement(r.alternate)?r.alternate.body:[r.alternate];n.push(...zn(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(...zn(o.consequent,i))}}return n}function Jc(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=Vm(r);Dm(r,{"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression"(d){let p=jm(d);if(!p)return;let m=d.node,g=[];if(x.isArrowFunctionExpression(m))x.isExpression(m.body)||yn(m.body)?g=[{argument:m.body,statement:x.returnStatement(x.isExpression(m.body)?m.body:null)}]:x.isBlockStatement(m.body)&&(g=zn(m.body.body));else{let B=m.body;x.isBlockStatement(B)&&(g=zn(B.body))}if(g.length===0){d.skip();return}let S=new Map;Fi(Km(r.program.body),Ti(t,p,i,s,l,[S]),S);let C=new Map;for(let B of m.params)for(let re of mt(B))Di(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)&&Fi([B],Ti(t,p,i,s,l,[S,C]),C)}let w=Ti(t,p,i,s,l,[S,C]);for(let B of g){let re=Ct(B.argument,w,n);for(let ne of re)a.includes(ne)||a.push(ne);if(B.condition){let ne={kind:"conditional-branch",conditionExpression:kt(B.condition,n),conditionSource:Ne(B.condition,n,w)};Hr(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 Li(e,t,n,r){return[...e.map(o=>({...o})),{fromFile:t,specifier:n,targetPath:r}]}function qr(e,t,n){return{...e,details:{...e.details??{},entryFile:t,importStack:n.map(r=>({...r}))}}}async function Xc(e,t,n,r,o={}){let i=o.maxDepth??10,s=o.version??1,a=o.parseModule??Jn,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(qr(N.diagnostic,re,ne));continue}u.set(P,N.module);let{graph:X,localImports:M}=Jc(N.module);for(let D of X.elements.values())if(D.importedFrom&<(D.importedFrom)){let Z=D.importedFrom,te=await Jr(P,Z,r);te.ok?(D.importedFrom=te.path,Jt(te.path)&&(D.isPublicUiComponent=!0)):Xn(Z,P)||m(qr(te.diagnostic,re,Li(ne,P,Z,te.diagnostic.path)))}if(l.set(P,X),!(B>=i))for(let D of M){if(og(D))continue;let Z=await Jr(P,D,r);if(!Z.ok){Xn(D,P)||m(qr(Z.diagnostic,re,Li(ne,P,D,Z.diagnostic.path)));continue}let te=Z.path;if(S.has(te)||Jt(te))continue;let he=Li(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(qr({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=ig(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 og(e){return/\.(?:css|scss|sass|less)(?:\?.*)?$/i.test(e)}function ig(e,t,n,r=[]){let o=new Map,i=[],s=new Map,a=[];for(let[c,l]of t){for(let[u,d]of l.elements)o.set(u,d);for(let u of l.regions)i.push(u);for(let[u,d]of l.fileIndex){let p=s.get(u)??[];s.set(u,[...p,...d])}if(c===e){a=l.rootKeys;continue}r.includes(c)&&(a=[...a,...l.rootKeys])}return{routeId:e,rootKeys:a,elements:o,regions:i,fileIndex:s,version:n}}function zc(e){let t=new Map;for(let[n,r]of e.elements){let o=/^[A-Z]/.test(r.tag),i={file:r.sourceFile,componentName:r.componentName,isProxy:o},s=r.boundaryKind,a=[];r.isOpaque&&a.push({kind:"opaque-region",reason:`Component '${r.tag}' is opaque: internal structure not editable`}),o&&!r.isOpaque&&a.push({kind:"component-boundary",reason:`Component '${r.tag}' boundary: editing requires source file access`});let c={key:n,writeTarget:i,boundaryKind:s,parentKey:r.parentKey,childKeys:[...r.childKeys],constraints:a};t.set(n,c)}for(let n of e.regions){let r=n.kind==="repeat-region"?"repeat-region":n.kind==="conditional-region"?"conditional-region":n.kind==="opaque-region"?"opaque-region":"component-boundary",o=n.kind==="repeat-region"?"Node is inside a repeat region: operations affect the template, not individual instances":n.kind==="conditional-region"?"Node is inside a conditional region: visibility depends on runtime condition":`Node is inside a ${n.kind}`;for(let i of n.childKeys){let s=t.get(i);s&&s.constraints.push({kind:r,reason:o}),Wc(i,r,o,t,e)}}return{nodes:t,rootKeys:[...e.rootKeys]}}function Wc(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}),Wc(s,t,n,r,o))}}import{isSiteEditRuntimeContainerTag as sg,isSiteEditRuntimeVoidElementTag as ag}from"@vcp-dev/contracts/site-edit-runtime-capability";function xn(e){if(!e.composition)throw new Error("Composition unavailable for render source graph.");return e.composition}function cg(e,t,n){let r=xn(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&&ag(u),m=d||sg(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 Hc(e,t){let n=new Map;for(let r of e.nodes.keys())n.set(r,cg(r,e,t));return n}import{createHash as ls}from"node:crypto";import rs from"@babel/traverse";function Bi(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 Mh}from"node:crypto";import wl from"node:path";import*as ho from"@babel/parser";import Qi from"@babel/generator";import qi from"@babel/traverse";import*as Nt from"@babel/types";import ji from"@babel/traverse";var Rt=typeof ji=="function"?ji:ji.default,eo=new WeakMap,Gc=new WeakMap;function ht(e,t){let n=vi(e,t);if(!n.ok)return Ii(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}}:Ii(e,r.diagnostic.code,r.diagnostic.message,t.kind,r.diagnostic.details)}function ie(e,t){return t.kind==="jsx-node"?qc(e,t):t.kind==="jsx-attribute"?mg(e,t):t.kind==="value"?gg(e,t):t.kind==="expression"?hg(e,t):t.kind==="directive"?yg(e,t):t.kind==="export"?xg(e,t):{ok:!1,diagnostic:Ut("unsupported-syntax",`Unsupported locator kind: ${t.kind}`)}}function qc(e,t){return t.strategy==="source-range"?lg(e,t):ug(e,t)}function lg(e,t){let n=null;if(Rt(e,{JSXElement(o){if(!bn(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(!bn(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(!bn(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&&!Pg(r.path,t.expectedIdentity)?ve("jsx-node","locator-miss","JSX node failed expected identity validation"):{ok:!0,match:r}}function ug(e,t){if(t.structuralPath===""){let r=fg(e,t.component);if(r){let o=pg(r);if(o)return o}}let n=null;return Rt(e,{JSXElement(r){if(Hn(r)!==t.component||Vi(r)!==t.structuralPath)return;let i=Ee("jsx-node",r);i&&(n=i,r.stop())},JSXFragment(r){if(Hn(r)!==t.component||Vi(r)!==t.structuralPath)return;let i=Ee("jsx-node",r);i&&(n=i,r.stop())}}),!n&&t.expectedRange&&(n=dg(e,t.component,t.expectedRange)),n?{ok:!0,match:n}:ve("jsx-node","locator-miss","JSX node not found for structural-path locator")}function dg(e,t,n){let r=null;return Rt(e,{JSXElement(o){if(Hn(o)!==t||!bn(o.node,n))return;let i=Ee("jsx-node",o);i&&(r=i,o.stop())},JSXFragment(o){if(Hn(o)!==t||!bn(o.node,n))return;let i=Ee("jsx-node",o);i&&(r=i,o.stop())}}),r}function fg(e,t){let n=null;return Rt(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 pg(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 mg(e,t){let n=qc(e,t.element);if(!n.ok)return n;let s=n.match.path.get("openingElement").get("attributes").find(c=>Ag(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 gg(e,t){let n=Sg(e,t);if(!n.ok)return n;let r=bg(n.match.path,t.path??[]);return r.ok?t.expectedRange&&!gt(r.match.path.node.loc,t.expectedRange)?ve("value","locator-miss","Resolved value does not match expected range"):{ok:!0,match:r.match}:r}function hg(e,t){let n=null;return Rt(e,{Identifier(r){if(!Cg(r))return;let o=Zc(r);if(!o||!Qc(o,t))return;let i=Ee("expression",r);i&&(t.expectedRange&&!gt(r.node.loc,t.expectedRange)||(n=i,r.stop()))},MemberExpression(r){let o=Zc(r);if(!o||!Qc(o,t))return;let i=Ee("expression",r);i&&(t.expectedRange&&!gt(r.node.loc,t.expectedRange)||(n=i,r.stop()))}}),n?{ok:!0,match:n}:ve("expression","locator-miss","Expression not found")}function yg(e,t){let n=null;return Rt(e,{Program(r){let i=r.get("directives").find(a=>a.node.value.value===t.value);if(!i||t.expectedRange&&!gt(i.node.loc,t.expectedRange))return;let s=Ee("directive",i);s&&(n=s,r.stop())}}),n?{ok:!0,match:n}:ve("directive","locator-miss",`Directive '${t.value}' not found`)}function xg(e,t){let n=null;return Rt(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&&!gt(c.node.loc,t.expectedRange))return;n=p,r.stop();return}if(!c.isVariableDeclaration())return;let l=Ui(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&&!gt(u.node.loc,t.expectedRange))return;n=d,r.stop();return}let o=r.get("declaration");if(!o.isVariableDeclaration())return;let i=Ui(o,t.exportKind==="named"?t.name:"metadata");if(!i||!i.isVariableDeclarator())return;let s=i.get("init");if(!s.node||t.expectedRange&&!gt(s.node.loc,t.expectedRange))return;let a=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&&!gt(o.node.loc,t.expectedRange)||(n=i,r.stop()))}}),n?{ok:!0,match:n}:ve("export","export-not-found",`Export '${Ng(t)}' not found`)}function Sg(e,t){let n=null;return Rt(e,{Expression(r){if(n||t.root.kind!=="expression"||!bn(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=Ui(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 bg(e,t){let n=$i(e);for(let o of t){if(n=$i(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=>Tg(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=$i(n);let r=Ee("value",n);return r?{ok:!0,match:r}:ve("value","locator-miss","Resolved value has no source range")}function $i(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 bn(e,t){return gt(e.loc,t)}function gt(e,t){return e?e.start.line===t.startLine&&e.start.column===t.startColumn&&e.end.line===t.endLine&&e.end.column===t.endColumn:!1}function Vi(e){let t=[],n=e,r=e.node;for(;n;){if(n.isJSXElement()){if(!to(n.node)){let o=el(n.node.openingElement);o&&(/^[A-Z]/.test(o)?t.unshift(`component:${o}#${Yc(n,o)}`):t.unshift(`${o}#${Yc(n,o)}`))}}else n.isJSXFragment()&&n.node===r&&t.unshift("fragment");if(!n.parentPath||kg(n.parentPath))break;n=n.parentPath}return t.join("/")}function to(e){let t=e.openingElement.name;return t.type==="JSXIdentifier"?t.name==="Fragment":t.type==="JSXMemberExpression"&&t.property.name==="Fragment"}function Yc(e,t){let n=Eg(e);if(!n)return 0;let r=eo.get(n.node)?.get(t)?.get(e.node);if(r!==void 0)return r;let o=0,i=eo.get(n.node)?.get(t);if(!i){let s=eo.get(n.node);s||(s=new Map,eo.set(n.node,s)),i=new WeakMap,s.set(t,i)}for(let s of Wn(n))if(el(s.node.openingElement)===t){if(i.set(s.node,o),s.node===e.node)return o;o++}return i.get(e.node)??0}function Eg(e){let t=e.parentPath,n=null;for(;t;){if(t.isJSXFragment()){n=t,t=t.parentPath;continue}if(t.isJSXElement()){if(to(t.node)){t=t.parentPath;continue}return t}t=t.parentPath}return n}function Wn(e){let t=Gc.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(to(o.node)){n.push(...Wn(o));continue}n.push(o);continue}if(o.isJSXFragment()){n.push(...Wn(o));continue}o.isJSXExpressionContainer()&&n.push(...Sn(o.get("expression")))}return Gc.set(e.node,n),n}function Sn(e){return e.isJSXElement()?to(e.node)?Wn(e):[e]:e.isJSXFragment()?Wn(e):e.isParenthesizedExpression()?Sn(e.get("expression")):e.isLogicalExpression()&&Ig(e.node.operator)?Sn(e.get("right")):e.isConditionalExpression()?[...Sn(e.get("consequent")),...Sn(e.get("alternate"))]:e.isArrayExpression()?e.get("elements").flatMap(t=>Array.isArray(t)||!t.node||!t.isExpression()?[]:Sn(t)):[]}function Ig(e){return e==="&&"||e==="||"||e==="??"}function el(e){return e.name.type==="JSXIdentifier"?e.name.name:e.name.type==="JSXMemberExpression"?vg(e.name):null}function vg(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 Hn(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 kg(e){return!!(e.isFunctionDeclaration()||e.isFunctionExpression()||e.isArrowFunctionExpression())}function Cg(e){return!(!e.isExpression()||e.parentPath?.isMemberExpression({property:e.node}))}function Zc(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 Qc(e,t){return e.base===t.base&&Rg(e.path,t.path??[])}function Rg(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 wg(e){return e.key.type==="Identifier"?e.key.name:e.key.type==="StringLiteral"?e.key.value:null}function Ng(e){return e.exportKind==="named"?e.name:e.exportKind}function ve(e,t,n,r){return{ok:!1,diagnostic:Ut(t,n,e,r)}}function Pg(e,t){return Hn(e)!==t.component?!1:Vi(e)===t.structuralPath}function Ag(e,t){return!e.isJSXAttribute()||e.node.name.type!=="JSXIdentifier"?!1:e.node.name.name===t}function Ui(e,t){return e.get("declarations").find(n=>!n.isVariableDeclarator()||n.node.id.type!=="Identifier"?!1:n.node.id.name===t)}function Tg(e,t){return e.isObjectProperty()?wg(e.node)===t:!1}import Ki from"@babel/generator";var _g=typeof Ki=="function"?Ki:Ki.default;function Fg(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
|
|
3
|
-
`).map(r=>
|
|
4
|
-
`)}function no(e){let{ast:t,source:n}=e;try{let r=Fg(n),i=_g(t,{comments:!0,jsescOption:{minimal:!0,quotes:"single"}},n).code;return r!=="2"&&(i=Og(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 nl from"@babel/parser";import{arrayExpression as Dg,booleanLiteral as Lg,identifier as Bg,jsxAttribute as jg,jsxExpressionContainer as $g,jsxIdentifier as Vg,nullLiteral as Ug,numericLiteral as Kg,objectExpression as Jg,objectProperty as Xg,stringLiteral as rl}from"@babel/types";function tl(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 Gn(e,t,n){return{ok:!0,source:t,operation:{type:n.kind,nodeId:n.target,kind:n.kind,target:n.target,beforeSourceHash:tl(e),afterSourceHash:tl(t),inverse:n.inverse}}}function de(e,t,n){let r=no({ast:e,source:t});return r.ok?Gn(t,r.source,n):r}function ke(e,t){let n=ki(e,t);return n.ok?{ok:!0,ast:n.ast}:{ok:!1,result:{ok:!1,source:e,diagnostic:n.diagnostic}}}function ro(e,t){return no({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 ol(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 il(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 En(e){return typeof e=="string"?rl(e):typeof e=="number"?Kg(e):typeof e=="boolean"?Lg(e):e===null?Ug():Array.isArray(e)?Dg(e.map(t=>En(t))):Jg(Object.entries(e).map(([t,n])=>Xg(Bg(t),En(n))))}function Wg(e){return typeof e=="string"?rl(e):$g(En(e))}function oo(e,t){return jg(Vg(e),Wg(t))}function sl(e,t){try{let r=nl.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 io(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=Hg(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=Gg(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 Hg(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=Yg(r.get("expression"));o.length>0&&t.push(...o)}}return t}function Gg(e,t){let n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"";return`${n}${t.trim()}${r}`}function Yg(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 Ji}from"@babel/types";function In(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?(Zg(o.match.path),de(r.ast,t,{kind:"remove-node",target:"jsx-node",inverse:"insert-child"})):{ok:!1,source:t,diagnostic:o.diagnostic}}function Zg(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(Ji());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(Ji());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(Ji());return}e.remove()}import{cloneNode as ch}from"@babel/types";import Xi from"@babel/traverse";import*as U from"@babel/types";var Qg=typeof Xi=="function"?Xi:Xi.default;function ze(e,t,n,r){if(!e.ok)return e;let o=Xe(n);if(!o)return e;let i=qg(t,o,r);return i?{...e,selectionRef:i}:e}function qg(e,t,n){let r=eh(e,t);if(!r)return;let o=n.sourceLocator?al(n.sourceLocator):void 0,i=n.targetParentLocator?al(n.targetParentLocator):void 0,s=n.file??i?.file??o?.file,a=n.component??nh(r)??i?.component??o?.component;if(!(!s||!a))return{key:Kn(s,a,rh(r))}}function al(e){return e.strategy==="structural-path"?{file:e.file,component:e.component,structuralPath:e.structuralPath}:e.expectedIdentity}function eh(e,t){let n=null;return Qg(e,{JSXElement(r){r.node===t&&(n=r,r.stop())}}),n}function Xe(e){if(!e)return null;if(U.isJSXElement(e))return vn(e)?cl(e.children):e;if(U.isJSXFragment(e))return cl(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 pl(e)?th(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 cl(e){for(let t of e){let n=Xe(t);if(n)return n}return null}function th(e){return!e||!U.isArrowFunctionExpression(e)&&!U.isFunctionExpression(e)?null:U.isBlockStatement(e.body)?Yn(e.body.body):Xe(e.body)}function Yn(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=Yn(t.body);if(n)return n;continue}if(U.isIfStatement(t)){let n=ll(t.consequent);if(n)return n;let r=t.alternate?ll(t.alternate):null;if(r)return r;continue}if(U.isSwitchStatement(t))for(let n of t.cases){let r=Yn(n.consequent);if(r)return r}}return null}function ll(e){return U.isBlockStatement(e)?Yn(e.body):Yn([e])}function nh(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 ul=new WeakMap,dl=new WeakMap,zi=new WeakMap;function rh(e){let t=ul.get(e.node);if(t!==void 0)return t;let n=[],r=e;for(;r;){if(r.isJSXElement()){let i=oh(r);i&&n.unshift(i)}r=r.parentPath}let o=n.join("/");return ul.set(e.node,o),o}function oh(e){let t=Wi(e.node.openingElement.name);return!t||vn(e.node)?null:/^[A-Z]/.test(t)?`component:${t}#${fl(e,t)}`:`${t}#${fl(e,t)}`}function fl(e,t){let n=ih(e);if(!n)return 0;let r=zi.get(n.node)?.get(t)?.get(e.node);if(r!==void 0)return r;let o=zi.get(n.node);o||(o=new Map,zi.set(n.node,o));let i=o.get(t);i||(i=new WeakMap,o.set(t,i));let s=0;for(let a of Wt(n))if(Wi(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 ih(e){let t=e.parentPath,n=null;for(;t;){if(t.isJSXFragment()){n=t,t=t.parentPath;continue}if(t.isJSXElement()){if(vn(t.node)){t=t.parentPath;continue}return t}t=t.parentPath}return n}function Wt(e){let t=dl.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(vn(o.node)){n.push(...Wt(o));continue}n.push(o);continue}if(o.isJSXFragment()){n.push(...Wt(o));continue}o.isJSXExpressionContainer()&&n.push(...yt(o.get("expression")))}return dl.set(e.node,n),n}function yt(e){if(e.isJSXElement())return vn(e.node)?Wt(e):[e];if(e.isJSXFragment())return Wt(e);if(e.isParenthesizedExpression())return yt(e.get("expression"));if(e.isLogicalExpression())return yt(e.get("right"));if(e.isConditionalExpression())return[...yt(e.get("consequent")),...yt(e.get("alternate"))];if(e.isArrayExpression())return e.get("elements").flatMap(t=>Array.isArray(t)||!t.node||!t.isExpression()?[]:yt(t));if((e.isCallExpression()||e.isOptionalCallExpression())&&pl(e.node)){let t=e.get("arguments"),n=Array.isArray(t)?t[0]:void 0;return n?sh(n):[]}return[]}function sh(e){if(!e.isArrowFunctionExpression()&&!e.isFunctionExpression())return[];let t=e.get("body");if(t.isJSXElement())return vn(t.node)?Wt(t):[t];if(t.isJSXFragment())return Wt(t);if(t.isParenthesizedExpression())return yt(t.get("expression"));if(t.isLogicalExpression()||t.isConditionalExpression())return yt(t);if(!t.isBlockStatement())return[];for(let n of t.get("body")){if(!n.isReturnStatement())continue;let r=n.get("argument");return r.node?yt(r):[]}return[]}function pl(e){let t=e.callee;return(U.isMemberExpression(t)||U.isOptionalMemberExpression(t))&&U.isIdentifier(t.property)&&t.property.name==="map"&&!t.computed}function vn(e){let t=Wi(e.openingElement.name);return t==="Fragment"||t==="React.Fragment"}function Wi(e){return U.isJSXIdentifier(e)?e.name:U.isJSXMemberExpression(e)?ml(e):U.isJSXNamespacedName(e)?`${e.namespace.name}:${e.name.name}`:null}function ml(e){return`${U.isJSXIdentifier(e.object)?e.object.name:ml(e.object)}.${e.property.name}`}function wt(e,t){if(t.parentPath===e&&t.listKey==="children"&&gl(e))return e;if(!t.parentPath||t.listKey!=="children")return null;let n=t.parentPath;if(!gl(n))return null;let r=n;for(;r&&r!==e;){if(!ah(r)||r.listKey!=="children")return null;r=r.parentPath}return r===e?n:null}function gl(e){return e.isJSXElement()||e.isJSXFragment()}function ah(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 kn(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=sl(t,r.jsx);if(!u.ok)return u.result;let d=ch(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=wt(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 hl from"@babel/parser";import{cloneNode as lh}from"@babel/types";function so(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=uh(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=wt(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=lh(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 uh(e,t){try{let r=hl.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 dh,nullLiteral as Hi}from"@babel/types";import*as Cn from"@babel/types";function Rn(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=wt(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=dh(c.match.path.node,!0);if(!Cn.isJSXElement(m)&&!Cn.isJSXExpressionContainer(m)&&!Cn.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");fh(c.match.path);let S=u.node.children,C={...s,sourceLocator:n,targetParentLocator:r};if(o==="append")return S.push(m),ze(ro(a.ast,t),a.ast,m,C);if(o==="prepend")return S.unshift(m),ze(ro(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(ro(a.ast,t),a.ast,m,C)}function fh(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*as yl from"@babel/parser";import{cloneNode as ph,nullLiteral as Gi}from"@babel/types";function ao(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=mh(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=wt(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=ph(l.node,!0);gh(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 mh(e,t){try{let r=yl.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 gh(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(Gi());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(Gi());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(Gi());return}e.remove()}function co(e){let{source:t,locator:n,props:r}=e,o=ke(t,"jsx-node");if(!o.ok)return o.result;let i=ol(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=il(o.ast,l);if(u.ok&&u.match!==null){let d=u.match.path.node;d.value=c===""?oo(a,"").value:oo(a,c).value}else s.attributes.push(oo(a,c))}return de(o.ast,t,{kind:"set-props",target:"jsx-node",inverse:"set-props"})}import{getBindingIdentifiers as hh,identifier as Zn,importDeclaration as yh,importDefaultSpecifier as xh,importNamespaceSpecifier as Sh,importSpecifier as bh,isImportDefaultSpecifier as xl,isImportNamespaceSpecifier as Sl,isImportSpecifier as bl,stringLiteral as Eh}from"@babel/types";function wn(e){let{source:t,moduleSpecifier:n,imports:r}=e,o=r.findIndex(C=>!Ah(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=wh(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=Th(C,v);return P?[P]:[]}))),d=i.imports.filter(C=>!u.has(Rl(C)));if(d.length===0)return Gn(t,t,{kind:"add-import",target:"import",inverse:"remove-import"});let p=Nh(c.body),m=d.find(C=>p.has(Yi(C)));if(m)return V(t,"unsupported-syntax",`Import local binding already exists: ${Yi(m)}`);let g=Rh(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(!kl(Il(C)))return V(t,"unsupported-syntax","Unsupported import specifier combination");let v=l.find(P=>Ih(P,C));if(v)vh(v,C);else{let P=yh(El(C),Eh(n));Ph(c.body,P),l.push(P)}}return de(a,t,{kind:"add-import",target:"import",inverse:"remove-import"})}function Ih(e,t){return e.importKind==="type"?!1:kl(Ch(kh(e),Il(t)))}function vh(e,t){let n=!1,r=new Set(e.specifiers.map(o=>Zi(o)));for(let o of El(t)){let i=Zi(o);r.has(i)||(e.specifiers.push(o),r.add(i),n=!0)}return Cl(e.specifiers),{changed:n}}function El(e){let t=e.map(n=>{switch(n.kind){case"named":return bh(n.local?Zn(n.local):Zn(n.imported),Zn(n.imported));case"default":return xh(Zn(n.local));case"namespace":return Sh(Zn(n.local));default:return n}});return Cl(t),t}function Il(e){let t=vl();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 kh(e){let t=vl();for(let n of e.specifiers)xl(n)?t.defaultLocals.add(n.local.name):Sl(n)?t.namespaceLocals.add(n.local.name):t.hasNamed=!0;return t}function vl(){return{defaultLocals:new Set,hasNamed:!1,namespaceLocals:new Set}}function Ch(e,t){return{defaultLocals:new Set([...e.defaultLocals,...t.defaultLocals]),hasNamed:e.hasNamed||t.hasNamed,namespaceLocals:new Set([...e.namespaceLocals,...t.namespaceLocals])}}function kl(e){return e.defaultLocals.size>1||e.namespaceLocals.size>1?!1:!(e.hasNamed&&e.namespaceLocals.size>0)}function Cl(e){let t=[...e.filter(n=>xl(n)),...e.filter(n=>Sl(n)),...e.filter(n=>bl(n))];e.splice(0,e.length,...t)}function Rh(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 wh(e){let t=new Map,n=new Map;for(let r of e){let o=Rl(r);if(t.has(o))continue;let i=Yi(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 Nh(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(hh(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 Ph(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 Ah(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 Rl(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 Yi(e){return e.kind==="named"?e.local??e.imported:e.local}function Th(e,t){return e.importKind==="type"||bl(t)&&t.importKind==="type"?null:Zi(t)}function Zi(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 Nn(e){let{source:t,moduleSpecifier:n,imports:r}=e,o=r.findIndex(u=>!Fh(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 Gn(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=>_h(u,d))),l.specifiers.length===0&&a.body.splice(c,1),de(s,t,{kind:"remove-import",target:"import",inverse:"add-import"}))}function _h(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 Fh(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=po(t,n);return o.ok?(o.path.replaceWith(En(r)),de(o.ast,t,{kind:"update-value",target:"value",inverse:"restore-value"})):o.result}function lo(e){let{source:t,locator:n,index:r,value:o}=e,i=po(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,En(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 uo(e){let{source:t,locator:n,index:r}=e,o=po(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 fo(e){let{source:t,locator:n,fromIndex:r,toIndex:o}=e,i=po(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 po(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 Oh=typeof Qi=="function"?Qi:Qi.default;function ts(e){let t=Fl(e);if(t)return{ok:!1,error:t};let n=e.projection,r=ns(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:Nl(e),returnStep:{kind:"insert-return",node:{jsx:`<${e.component.localName} />`},placement:i.relation,replaceOriginal:n.container.kind==="starter-placeholder"}}};if(!o)return{ok:!1,error:{code:"NO_SAFE_PAGE_PLACEMENT",message:"Route page composition does not expose a safe placement boundary.",diagnostics:[]}};let a={kind:"jsx-node",strategy:"source-range",sourceRange:o},c=ht(e.source,a);if(!c.ok||!c.match.node)return{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:c.ok===!1?c.diagnostic.message:"Route page composition anchor could not be resolved.",diagnostics:c.ok?[]:[mo(c.diagnostic)]}};let l=go(e.source,c.match.node.start??null,c.match.node.end??null);if($h(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=Nl(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 Nl(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 Tl(e){let t;try{t=ho.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=ho.parseExpression(e.jsx,{plugins:["jsx","typescript"]}),r=!1;return(typeof qi=="function"?qi:qi.default)(t,{ExportDefaultDeclaration(i){let s=i.get("declaration"),a=Dh(i,s);if(a){if(a.isArrowFunctionExpression()&&!a.get("body").isBlockStatement()){let c=a.get("body");c.replaceWith(Pl(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(Pl(l.node,n,e.placement,e.replaceOriginal===!0)),r=!0,c.stop())}}),r&&i.stop()}}}),r?{ok:!0,source:Oh(t,{}).code}:{ok:!1,source:e.source,diagnostic:{message:"Route default return boundary could not be resolved."}}}function Dh(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 Pl(e,t,n,r){if(Nt.isNullLiteral(e)||r)return t;let s=n==="before"||n==="prepend"?[t,e]:[e,t];return Nt.jsxFragment(Nt.jsxOpeningFragment(),Nt.jsxClosingFragment(),s)}function _l(e){let t=Fl(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=Ml(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=es(o.sourceRange),s=ht(e.source,i);if(!s.ok||!s.match.node)return{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:s.ok===!1?s.diagnostic.message:"Route page composition source anchor could not be resolved.",diagnostics:s.ok?[]:[mo(s.diagnostic)]}};if(go(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||!Bh(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=ns(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=es(u),p=ht(e.source,d);if(!p.ok||!p.match.node)return{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:p.ok===!1?p.diagnostic.message:"Route page composition target container could not be resolved.",diagnostics:p.ok?[]:[mo(p.diagnostic)]}};if(go(e.source,p.match.node.start??null,p.match.node.end??null)!==l.containerSourceHash)return Al("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=es(g),v=ht(e.source,C);return!v.ok||!v.match.node?{ok:!1,error:{code:"UNRESOLVED_ROUTE_ANCHOR",message:v.ok===!1?v.diagnostic.message:"Route page composition target anchor could not be resolved.",diagnostics:v.ok?[]:[mo(v.diagnostic)]}}:go(e.source,v.match.node.start??null,v.match.node.end??null)!==S?Al("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 Al(e){return{ok:!1,error:{code:"VERSION_STALE",message:e,diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:e}]}}}function mo(e){return{code:"UNSUPPORTED_PAGE_SHAPE",message:e.message,details:{astCode:e.code}}}function Fl(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&&!Lh(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 Lh(e,t){return e.routeId===t.routeId&&e.effectiveTemplateId===t.effectiveTemplateId}function Bh(e,t){return e.routeId===t.routeId&&e.templateId===t.effectiveTemplateId}function jh(e,t){let n=wl.posix.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=wl.posix.relative(n,r);return o=o.replace(/\\/g,"/"),o.startsWith(".")||(o=`./${o}`),o}function es(e){return{kind:"jsx-node",strategy:"source-range",sourceRange:e}}function go(e,t,n){return t==null||n==null?null:`sha256:${Mh("sha256").update(e.slice(t,n)).digest("hex")}`}function $h(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 Vh=typeof rs=="function"?rs:rs.default;function Dl(e){if(!e.ast)return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","SourceGraph entry AST is required",{reason:"parsed-ast-required"})]);let t=Gh(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=Zh(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=Qh(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 Ol(e,t,"virtual-route-root");if(qh(r,t))return ut(e,[Oe("INDIRECT_RETURN_ONLY","Route default export only returns through an indirect function boundary")]);if(ey(r,t)||ty(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=At(r);if(i.unsupported)return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let s=os({input:e,containerKind:"virtual-route-root",sourceKind:"jsx-fragment",source:e.source,containerPath:r,members:i.members});return yo(e,t,s,{kind:"virtual-route-root",sourceKind:"jsx-fragment"})}if(r.isJSXElement()&&!Pn(r)){let i=as(r),s=os({input:e,containerKind:"virtual-route-root",sourceKind:"jsx-element",source:e.source,containerPath:r,members:[i]});return yo(e,t,s,{kind:"virtual-route-root",sourceKind:"jsx-element"})}if(r.isJSXElement()){let i=At(r);if(i.unsupported)return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let s=i.members;if(ry(e.source,r,s))return Ol(e,t,"starter-placeholder");let a=os({input:e,containerKind:"jsx-container",sourceKind:"jsx-element",source:e.source,containerPath:r,members:s});return yo(e,t,a,{kind:"jsx-container",sourceKind:"jsx-element"})}if(ny(r))return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let o=iy({input:e,source:e.source,expression:r});return yo(e,t,o,{kind:"virtual-route-root",sourceKind:"atomic-expression"})}function ns(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 Ml(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 Ll(e){return e.ok?Uh(e.projection):Kh(e.projection)}function Uh(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)=>Bl(e,u,S,C,e.container.placementKey)),p=d.filter(({member:S})=>S.isBusinessMember).map(({sourceMember:S})=>Xh(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:Jh(e,a),sourceMembers:i,businessMembers:s,placementUnits:n,placements:c}}function Kh(e){let t=e.diagnostics.map(zh);return{status:"unsupported",version:e.version,composition:e.composition,reason:Wh(e.diagnostics),diagnostics:t}}function Jh(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 Bl(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)=>Bl(e,t,a,c,i))]}function Xh(e,t,n){return{key:`business:${e}:${t.key}`,sourceMemberKey:t.key,containerKey:e,label:t.label,isIndependent:n}}function zh(e){return{code:Hh(e),message:e.message}}function Wh(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 Hh(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 Gh(e){let t=null;return Vh(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=Yh(o.path);i&&(t=i,n.stop())}}),t}function Yh(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 Zh(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 Qh(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 qh(e,t){if(e.isIdentifier())return xo(e.node.name,t);if(e.isCallExpression()){let n=e.get("callee");if(n.isIdentifier())return xo(n.node.name,t)}return!1}function ey(e,t){return e.isConditionalExpression()?Pt(e.get("consequent"),t)||Pt(e.get("alternate"),t):e.isLogicalExpression()?Pt(e.get("left"),t)||Pt(e.get("right"),t):!1}function ty(e){if(!e.isJSXElement()||!Pn(e))return!1;let t=At(e).members;if(t.length!==1)return!1;let n=t[0];return n.kind==="jsx-element"&&!n.isBusinessMember&&n.businessMemberCount>0}function Pt(e,t){if(e.isIdentifier())return xo(e.node.name,t);if(e.isCallExpression()){let n=e.get("callee");if(n.isIdentifier())return xo(n.node.name,t)}return e.isConditionalExpression()?Pt(e.get("consequent"),t)||Pt(e.get("alternate"),t):e.isLogicalExpression()?Pt(e.get("left"),t)||Pt(e.get("right"),t):!1}function xo(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 ny(e){return e.isJSXSpreadChild()}function ry(e,t,n){return e.includes("DESIGN_PLAN_REPLACE_ME")&&t.isJSXElement()&&n.length>0&&ss(t)}function ss(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(!ss(t))return!1;continue}if(t.isJSXElement()&&!ss(t))return!1}return!0}function At(e){let t=[],n=!1;for(let r of e.get("children")){if(r.isJSXText()){if(!r.node.value.trim())continue;t.push({memberKey:cs(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=At(o);n||=i.unsupported,t.push(...i.members);continue}if(o.isJSXElement()){let i=Pn(o)?At(o):null;n||=i?.unsupported??!1,t.push({...as(o,i?.members),sourceRange:Qe(r.node.loc),parentSourceRange:Qe(e.node.loc)});continue}if(o.isJSXSpreadChild()){n=!0;continue}t.push({memberKey:cs(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()&&jl(r)){let o=At(r);n||=o.unsupported,t.push(...o.members);continue}if(r.isJSXElement()){let o=Pn(r)?At(r):null;n||=o?.unsupported??!1,t.push({...as(r,o?.members),parentSourceRange:Qe(e.node.loc)})}}return{members:t,unsupported:n}}function as(e,t){let n=e.isJSXElement()&&Pn(e)?t??At(e).members:[],r=e.isJSXElement()&&!Pn(e)&&!jl(e);return{memberKey:cs(e.node.type,e.node.start,e.node.end),kind:"jsx-element",nodeType:e.node.type,sourceRange:Qe(e.node.loc),businessMemberCount:r?1:$l(n),parentSourceRange:Qe(e.parentPath?.node.loc),children:n,isBusinessMember:r,label:oy(e)}}function jl(e){if(e.isJSXFragment())return!0;let t=e.node.openingElement.name;return t.type==="JSXIdentifier"&&t.name==="Fragment"||t.type==="JSXMemberExpression"&&t.object.type==="JSXIdentifier"&&t.object.name==="React"&&t.property.name==="Fragment"}function Pn(e){let t=e.node.openingElement.name;return t.type==="JSXIdentifier"&&t.name!=="Fragment"&&t.name[0]===t.name[0]?.toLowerCase()}function oy(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 $l(e){return e.reduce((t,n)=>t+n.businessMemberCount,0)}function So(e){return e.length===0?0:Math.max(1,$l(e))}function os(e){let t=Qe(e.containerPath.node.loc),n=Ul(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:So(e.members)<=1,memberCount:So(e.members),sourceRange:t,sourceHash:n,relation:"append",containerSourceRange:t,containerSourceHash:n,anchorSourceRange:null,anchorSourceHash:null,members:e.members}}function iy(e){let t=Qe(e.expression.node.loc),n=Ul(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 yo(e,t,n,r){let o=n.containerSourceRange??n.sourceRange,i=sy(e,n,o),s=Bi(i),a={status:"supported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,defaultExportName:Kl(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 sy(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:So(g)<=1,memberCount:So(g),sourceRange:p,sourceHash:p?is(e.source,p):null,relation:l,containerSourceRange:S,containerSourceHash:S?is(e.source,S):null,anchorSourceRange:m,anchorSourceHash:m?is(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 Ol(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=Bi([i]),a={status:"supported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,defaultExportName:Kl(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 Vl([e.route,e.entryFile,String(e.version),t,n,r?`${r.startLine}:${r.startColumn}-${r.endLine}:${r.endColumn}`:"no-range"])}function cs(e,t,n){return Vl(["member",e,String(t??-1),String(n??-1)])}function Vl(e){return`pc_${ls("sha256").update(e.join("\0")).digest("hex").slice(0,24)}`}function Ul(e,t,n){return t==null||n==null?null:`sha256:${ls("sha256").update(e.slice(t,n)).digest("hex")}`}function is(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:${ls("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 Kl(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 cy(e){return e==="api-field"||e==="cms-field"||e==="i18n-message"||e==="config-entry"}var ly=160;function Jl(e,t,n,r={}){let o=xn(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 Xl(e,t,n,r,o,i,s,a,c,l,u,d,p){let m=xn(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=Yl(g.textSegments,s),P=Zl(e,t,g,C,v),w=v?fy(v):void 0,B=py(i,v),re=g.textSegments.map(M=>({index:M.index,value:M.value,editable:Ql(M,C,s?.get(M.index)??null),source:o.get(M.index)??null})),ne=Hl(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:Wl(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 zl(e,t,n,r,o,i,s){let a=xn(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=Yl(c.textSegments,i);return{composition:a,key:e,tag:c.tag,componentName:c.componentName,sourceFile:c.sourceFile,sourceLocator:Wl(c),label:c.tag,capabilities:Zl(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:Ql(p,u,i?.get(p.index)??null),source:m?{kind:m.kind}:null}}),boundaryKind:c.boundaryKind,isOpaque:c.isOpaque,ancestors:Hl(c,t)}}function Wl(e){return{sourceFile:e.sourceFile,componentName:e.componentName,openingElementRange:uy(e.sourceRange),structuralPath:e.identity.structuralPath,...dy(e.textSegments)}}function Hl(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 uy(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}function dy(e){let t=e.map(n=>n.value.trim()).filter(Boolean).join(" ").replace(/\s+/g," ").trim();return t?{textPreview:t.slice(0,ly)}:{}}function Gl(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 Yl(e,t){if(!t)return null;for(let n of e){let r=t.get(n.index);if(r)return r}return null}function Zl(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&&ql(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 Ql(e,t,n){return!e.editable||!t.canUpdateText?!1:n?ql(n.editMode):!0}function ql(e){return e==="direct"||e==="proxy"||e==="upstream"}function fy(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 py(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}:cy(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 eu(e){let{key:t,element:n,graph:r,provenances:o}=e,i=gy(t,n,r),s=i?.tag??(Ht(n.tag)?n.tag:n.componentName),a=i?.identity.key??tu(n,r)??t,c=xy(i),l=Sy(t,n,r,o,i),u=my(t,n,r,o,a);return{componentName:s,instanceKey:a,templateOwner:yy(i??n,s),...c.length>0?{variantKeys:c}:{},...l.length>0?{slotKeys:l}:{},editableStrategy:u,impactScope:by(u),alternativeStrategies:Ey(u)}}function my(e,t,n,r,o){for(let i of r.values())if(i?.editMode==="upstream")return"upstream";return us(e,n)?"instance":!Ht(t.tag)&&t.sourceFile!==n.routeId&&o!==e?"template":"instance"}function tu(e,t){if(Ht(e.tag))return e.identity.key;let n=[...t.elements.values()].filter(r=>r.importedFrom===e.sourceFile&&hy(r,e.componentName));return n.length!==1?null:n[0].identity.key}function gy(e,t,n){if(Ht(t.tag))return t;let r=us(e,n);if(r)return r;let o=tu(t,n);return o?n.elements.get(o)??null:null}function hy(e,t){return e.exportName===t||e.tag===t||e.exportName==="default"}function yy(e,t){return Ht(e.tag)&&e.importedFrom?`${e.importedFrom}#${t}`:`${e.sourceFile}#${t}`}function xy(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 Sy(e,t,n,r,o){let i=new Set,s=us(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&&Ht(t.tag)&&t.childKeys.length>0&&i.add("children"),[...i]}function us(e,t){let n=t.elements.get(e)?.parentKey??null;for(;n;){let r=t.elements.get(n);if(!r)break;if(Ht(r.tag))return r;n=r.parentKey}return null}function Ht(e){return/^[A-Z]/.test(e)}function by(e){switch(e){case"template":return"component-template";case"upstream":return"upstream-source";default:return"current-instance"}}function Ey(e){switch(e){case"template":return["instance"];case"upstream":return["template"];default:return["template"]}}var Iy=new Set(["markdown","body","content","value","document"]),nu=[];function ou(e){if(!(!Cy(e.tag)||!e.attributes))for(let t of e.attributes){if(!Iy.has(t.name))continue;if(ky(t))return{kind:"markdown",field:t.name,schema:"markdown",valuePath:t.source?.expression,operationBoundary:nu};let n=vy(t.resolvedValue);if(n==="prosemirror-doc"||n==="node-array")return{kind:"rich-text-json",field:t.name,valuePath:t.source?.expression,schema:n,operationBoundary:nu};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 vy(e){if(e){if(Array.isArray(e)&&e.every(t=>ru(t)))return"node-array";if(ru(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 ru(e){return!Array.isArray(e)&&typeof e=="object"&&e!==null}function ky(e){return e.name==="markdown"}function Cy(e){return/^[A-Z]/.test(e)}var Ry=["src","alt","poster","caption","width","height"];function iu(e){let t=e.attributes?.filter(i=>Ry.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=Ny(t.map(i=>i.value));return{kind:wy(e.tag,n),sourceType:o,fields:n,editableFields:[],operationBoundary:[],...Object.keys(r).length>0?{valuePaths:r}:{}}}function wy(e,t){return e==="img"?"image":e==="video"||t.includes("poster")?"video":"media"}function Ny(e){return e.some(t=>t.startsWith("cms:"))?"cms-media-field":e.some(t=>/^(\.?\/|\/)/.test(t))?"local-file-reference":"asset-id"}var ds=["set-class-name-source","apply-style-draft"];function su(e){let t=e.attributes?.find(n=>n.name==="className");if(!t)return{kind:"class-name-source",className:"",sourceKind:"missing",editable:!0,operationBoundary:ds,diagnostics:[{code:"missing-class-name",message:"No className attribute is present on this element"}]};if(t.source?.expression){let n=t.source.expression,r=typeof t.resolvedValue=="string"?t.resolvedValue:t.value!==n?t.value:void 0;return typeof r!="string"?{kind:"class-name-source",className:"",sourceKind:"dynamic-expression",editable:!1,operationBoundary:[],sourcePath:n,diagnostics:[{code:t.resolvedValue===void 0?"dynamic-binding":"non-string-binding",message:t.resolvedValue===void 0?"Style binding is dynamic and cannot be edited":"Style binding must resolve to a static string before it can be edited"}]}:{kind:"class-name-source",className:r,sourceKind:"static-expression",editable:!0,operationBoundary:ds,sourcePath:n}}return{kind:"class-name-source",className:t.value,sourceKind:t.resolvedValue===void 0?"static-attribute":"static-expression",editable:!0,operationBoundary:ds}}import{createHash as Py}from"node:crypto";var qn=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:${Py("sha256").update(e).digest("hex")}`}function lu(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=Ay(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:cu(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:au(e.route.source,o),valueRaw:s?au(e.route.source,s):null,attrRange:cu(o),diagnostics:[]}}function uu(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 Ay(e,t){let n=ct({source:e,profile:Kt({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:Ty(t.sourceRange)});return!r.ok||r.match.node.type!=="JSXElement"?null:r.match.node}function du(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 au(e,t){return t.start==null||t.end==null?"":e.slice(t.start,t.end)}function cu(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 Ty(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}import*as Ns from"@babel/parser";import hs from"@babel/traverse";import*as b from"@babel/types";import*as St from"node:path";import*as hu from"@babel/parser";import ms from"@babel/traverse";import*as An from"@babel/types";import*as G from"@babel/types";function Io(e,t=[]){if(e.isIdentifier()){let n=e.scope.getBinding(e.node.name);return n?bo(n,t):null}if(e.isMemberExpression()){let n=Ly(e.node),r=_y(e.node);if(!n||r===null)return null;let o=e.scope.getBinding(n);return o?bo(o,[...r,...t]):null}return e.isAwaitExpression()||ps(e.node)?Tt(jy(e.node),t,"awaited or fetched expression"):null}function _y(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 bo(e,t=[]){let n=Fy(e,t);if(n)return n;let r=My(e,t);if(r)return r;let o=Oy(e,t);return o||null}function tr(e){return e?.kind==="api-source"}function Fy(e,t){if(e.path.isVariableDeclarator()&&G.isIdentifier(e.path.node.id)){let s=e.path.get("init");if(s?.isCallExpression()&&fs(s.node)&&t[0]?.kind==="property"&&t[0].name==="data")return Tt(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)&&mu(c)==="data"&&er(c.value,e.identifier.name)),a=e.path.get("init");if(s&&a?.isCallExpression()&&fs(a.node))return Tt(e.identifier.name,t,"query hook data binding")}let n=Dy(e);if(!n||mu(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()||!fs(i.node)?null:Tt(e.identifier.name,t,"query hook data binding")}function My(e,t){if(e.path.isVariableDeclarator()&&G.isArrayPattern(e.path.node.id)){let a=e.path.get("init");if(!a?.isCallExpression()||!pu(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:fu(e,l.name)?Tt(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()||!pu(o.node)||n.node.elements.findIndex(a=>a===e.path.node)!==0)return null;let s=n.node.elements[1];return G.isIdentifier(s)&&fu(e,s.name)?Tt(e.identifier.name,t,"state setter is updated by API data"):null}function Oy(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()?Tt(e.identifier.name,t,"awaited binding result"):ps(r.node)?Tt(e.identifier.name,t,"fetch-backed binding result"):null:null}function Dy(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 er(e,t){return G.isIdentifier(e)?e.name===t:G.isAssignmentPattern(e)?er(e.left,t):G.isObjectPattern(e)?e.properties.some(n=>G.isObjectProperty(n)?er(n.value,t):er(n.argument,t)):G.isArrayPattern(e)?e.elements.some(n=>!!n&&er(G.isRestElement(n)?n.argument:n,t)):!1}function fu(e,t){let n=!1,r=!1;return e.scope.path.traverse({CallExpression(i){ps(i.node)&&(n=!0),(By(i.node.callee,t)||i.node.arguments.some(s=>G.isIdentifier(s)&&s.name===t))&&(r=!0)}}),n&&r}function fs(e){let t=vo(e.callee);return t==="useQuery"||t==="useSWR"||t==="useSuspenseQuery"}function pu(e){return vo(e.callee)==="useState"}function ps(e){return Eo(e,t=>G.isCallExpression(t)&&vo(t.callee)==="fetch")}function Ly(e){let t=e;for(;G.isMemberExpression(t);)t=t.object;return G.isIdentifier(t)?t.name:null}function mu(e){return e.computed?null:G.isIdentifier(e.key)?e.key.name:G.isStringLiteral(e.key)?e.key.value:null}function vo(e){return G.isIdentifier(e)?e.name:G.isMemberExpression(e)&&G.isIdentifier(e.property)?e.property.name:null}function By(e,t){return Eo(e,n=>G.isIdentifier(n)&&n.name===t)}function Eo(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)&&Eo(i,t))return!0;continue}if(G.isNode(o)&&Eo(o,t))return!0}return!1}function jy(e){return G.isIdentifier(e)?e.name:G.isCallExpression(e)?vo(e.callee)??"api":G.isAwaitExpression(e)?"awaited-api":"api"}function Tt(e,t,n){return{kind:"api-source",readonly:!0,sourceId:e,displayPath:$y(e,t),reason:n}}function $y(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}var yu=typeof ms=="function"?ms:ms.default;function xu(e,t){let n=bu(e);if(!n)return{allowed:!0};let r=!1;return yu(n,{CallExpression(o){if(!Eu(o.node,t.sourceRange)||!Vy(o.node))return;let i=o.get("callee");if(!i.isMemberExpression())return;let s=i.get("object");Array.isArray(s)||!s.isExpression()||tr(Io(s))&&(r=!0,o.stop())}}),r?{allowed:!1,reason:"Cannot add data-backed items to a dynamic API list"}:{allowed:!0}}function Su(e,t){let n=bu(e);if(!n)return{allowed:!0};let r=!1;return yu(n,{JSXExpressionContainer(o){Eu(o.node,t.sourceRange)&&(An.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 bu(e){try{return hu.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Vy(e){let t=e.callee;return An.isMemberExpression(t)&&An.isIdentifier(t.property)&&t.property.name==="map"}function Eu(e,t){let n=e.loc;return n?gu({line:n.start.line,column:n.start.column},{line:t.startLine,column:t.startColumn})>=0&&gu({line:n.end.line,column:n.end.column},{line:t.endLine,column:t.endColumn})<=0:!1}function gu(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 Iu(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 Gt(e.path.node,e.identifier.name);if(e.path.isVariableDeclarator()){let n=e.path.node.id;if(ae.isObjectPattern(n)||ae.isArrayPattern(n))return Gt(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(Ky(e.path,n))return!0}if(t.isFunction()||t.isVariableDeclarator())return!1;t=t.parentPath}return!1}function Gt(e,t,n=!1){return ae.isIdentifier(e)?e.name===t&&n:ae.isObjectPattern(e)?e.properties.some(r=>ae.isObjectProperty(r)?Gt(r.value,t,n):Gt(r.argument,t,n)):ae.isArrayPattern(e)?e.elements.some(r=>{if(!r)return!1;let o=ae.isRestElement(r)?r.argument:r;return Gt(o,t,n)}):ae.isAssignmentPattern(e)?Gt(e.left,t,!0):ae.isRestElement(e)?Gt(e.argument,t,n):!1}function Tn(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=vu(r),i=!1,s=o?o.initBinding&&gs(o.initBinding)?(i=dt(o.initBinding),[...o.initPathPrefix]):o.initBinding?(()=>{let c=Tn(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=Uy(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=Jy(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=nr(n.node);return i?{propName:i,remainingPath:t?.path??[],hasDefault:dt(e)}:null}if(gs(e)){let[r,...o]=t?.path??[];return!r||r.kind!=="property"?null:{propName:r.name,remainingPath:o,hasDefault:dt(e)}}return null}function Uy(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=vu(r);if(!o)return null;let{initBinding:i,initPathPrefix:s}=o;if(!i)return null;let a=!1,c=gs(i)?(a=dt(i),[...s]):(()=>{let u=Tn(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 vu(e){if(e.isIdentifier())return{initBinding:e.scope.getBinding(e.node.name),initPathPrefix:[]};if(!e.isMemberExpression())return null;let t=Wy(e.node);return t?{initBinding:e.scope.getBinding(t.base),initPathPrefix:t.path}:null}function gs(e){return e.path.isIdentifier()&&e.path.key===0&&Array.isArray(e.path.container)&&e.path.parentPath?.isFunction()===!0}function Ky(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentPath}return!1}function Jy(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 ku(e,t,n){if(e.path.isVariableDeclarator()){let a=e.path.get("id");if(!Array.isArray(a)&&(a.isObjectPattern()||a.isArrayPattern())){let c=ko(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=nr(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=Xy(e);if(!r)return null;let o=r.parentPath;if(!o?.isObjectProperty())return null;let i=nr(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 ko(e,t){if(e.isObjectPattern()){for(let n of e.get("properties"))if(n.isObjectProperty()){let r=nr(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=ko(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=ko(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=ko(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=nr(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 Xy(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 nr(e){return e.computed?null:ae.isIdentifier(e.key)?e.key.name:ae.isStringLiteral(e.key)?e.key.value:null}function Wy(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 Dt=typeof hs=="function"?hs:hs.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 _n(e){return{file:e.file,component:e.component}}function Hy(e){return e.target.kind==="node"?e.target.key:null}function Gy(e){return"kind"in e}function Co(e){return!Gy(e)}function Is(e,t){let n=St.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=St.relative(n,r);return o=o.replace(/\\/g,"/"),o.startsWith(".")||(o=`./${o}`),o}function ys(e,t){let n=e.getFileContent(t.file);if(!n)return;let r=ht(n,fe(t));if(r.ok)return n.slice(r.match.start,r.match.end)}function Ps(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 Ns.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Yy(e){if(e.isNumericLiteral())return!0;if(!e.isUnaryExpression({operator:"-"}))return!1;let t=e.get("argument");return!Array.isArray(t)&&t.isNumericLiteral()}function Zy(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 $u(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 Qy(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=$u(i.node.name);s&&o(s,i)}}),[...r].sort()}function Cu(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(td(o.match.path,i.match.path))return{ok:!1,bindingNames:[],reason:"Cannot move node out of its conditional branch"};let s=Qy(o.match.path,i.match.path);return s.length>0?{ok:!1,bindingNames:s}:{ok:!0}}function Ru(e,t,n){let r=_t(t,n);return r?xt(e,r):null}function _t(e,t){let n=ie(e,fe(t));return n.ok&&n.match.path.isJSXElement()?n.match.path:ws(e,t)}function xt(e,t){let n=t.findParent(S=>S.isArrowFunctionExpression()||S.isFunctionExpression());if(!n||!n.isArrowFunctionExpression()&&!n.isFunctionExpression())return null;let r=n,o=r.parentPath;if(!o||!o.isCallExpression()&&!o.isOptionalCallExpression())return null;let i=o;if(i.node.arguments.findIndex(S=>S===r.node)!==0)return null;let a=i.get("callee");if(!a.isMemberExpression()&&!a.isOptionalMemberExpression())return null;let c=a.node,l=c.property;if(!b.isIdentifier(l)||l.name!=="map"||c.computed)return null;let u=a.get("object"),d=Po(e,u.node),p=r.node.params.map(S=>Po(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:Fs(u.node),callbackPath:r,collectionPath:u}}function Po(e,t){let n=le(t);return n?e.slice(n.start,n.end):""}function Ro(e,t){return!!(e&&t&&e.callStart===t.callStart&&e.callEnd===t.callEnd&&e.callbackStart===t.callbackStart&&e.callbackEnd===t.callbackEnd)}function qy(e,t){let n=le(e.node);return n?ex(t).some(r=>{let o=le(r);return r===e.node||!!(o&&o.start===n.start&&o.end===n.end)}):!1}function ex(e){let t=e.callbackPath.node.body;return b.isBlockStatement(t)?Ft(t.body):Ot(t)}function Ft(e){let t=[];for(let n of e){if(b.isReturnStatement(n)){n.argument&&t.push(...Ot(n.argument));continue}if(b.isBlockStatement(n)){t.push(...Ft(n.body));continue}if(b.isIfStatement(n)){let r=b.isBlockStatement(n.consequent)?n.consequent.body:[n.consequent];if(t.push(...Ft(r)),n.alternate){let o=b.isBlockStatement(n.alternate)?n.alternate.body:[n.alternate];t.push(...Ft(o))}continue}if(b.isSwitchStatement(n)){for(let r of n.cases)t.push(...Ft(r.consequent));continue}b.isTryStatement(n)&&(t.push(...Ft(n.block.body)),n.handler&&t.push(...Ft(n.handler.body.body)),n.finalizer&&t.push(...Ft(n.finalizer.body)))}return t}function Ot(e){return b.isJSXElement(e)?tx(e)?wu(e.children):[e]:b.isJSXFragment(e)?wu(e.children):b.isParenthesizedExpression(e)||b.isTSAsExpression(e)||b.isTSSatisfiesExpression(e)||b.isTSNonNullExpression(e)||b.isTSTypeAssertion(e)?Ot(e.expression):b.isConditionalExpression(e)?[...Ot(e.consequent),...Ot(e.alternate)]:b.isLogicalExpression(e)&&rd(e.operator)?Ot(e.right):[]}function wu(e){return e.flatMap(t=>b.isJSXElement(t)||b.isJSXFragment(t)?Ot(t):b.isJSXExpressionContainer(t)&&(b.isJSXElement(t.expression)||b.isJSXFragment(t.expression)||b.isConditionalExpression(t.expression)||b.isLogicalExpression(t.expression))?Ot(t.expression):[])}function tx(e){let t=e.openingElement.name;return b.isJSXIdentifier(t)?t.name==="Fragment":b.isJSXMemberExpression(t)&&t.property.name==="Fragment"}function nx(e,t){return!!(e&&t&&e.callbackStart<t.callbackStart&&e.callbackEnd>t.callbackEnd)}function xs(e){return e==="Cannot edit repeat-backed child node structure with a generic node operation"}function Nu(e,t,n,r={}){if(!r.preserveConditionalBoundary&&td(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=>_s(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=$u(c.node.name);l&&a(l,c)}}),s.size>0?{ok:!1,bindingNames:[...s].sort()}:{ok:!0}}function Pu(e,t,n){let r=le(e.node);if(!r)return{ok:!0};let o=new Set(n.callbackPath.node.params.flatMap(s=>_s(s)).map(s=>n.callbackPath.scope.getBinding(s)?.path.node).filter(Boolean)),i=new Set;return As(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 rx(e,t){let n=new Set(e.callbackPath.node.params.flatMap(a=>_s(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=ox(l);u&&o(u,c)}}});return r.size>0?{ok:!1,bindingNames:[...r].sort()}:{ok:!0}}function ox(e){let t=e;for(;b.isTSQualifiedName(t);)t=t.left;return b.isIdentifier(t)?t.name:null}function Vu(e,t){let n=le(e.node),r=new Set;return As(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 As(e,t){e.isIdentifier()&&e.isReferencedIdentifier()&&t(e),e.traverse({ReferencedIdentifier(n){n.isIdentifier()&&t(n)}})}function ix(e){let t=sx(e.ast,e.sourceNode.component,e.targetParent.component);if(!t.ok)return{ok:!1,reason:t.reason};let n=od(t.path,e.targetParentPath);if(!n.ok)return{ok:!1,reason:n.reason};let r=Sx({source:e.source,sourceContext:e.sourceContext,callSitePath:t.path,targetParentPath:e.targetParentPath});if(!r.ok)return r;let o=ed(r.collectionExpression);return{ok:!0,context:{...e.sourceContext,collectionExpression:r.collectionExpression,collectionNeedsParens:o?Fs(o):!0}}}function sx(e,t,n){let r=Ju(e,t);if(Xu(e,r),zu(e,r))return{ok:!1,reason:"Cannot move prop-backed repeat child because the component is referenced through an unsupported value usage"};let o=[];return Dt(e,{JSXElement(s){Qu(s,r)&&o.push(s)}}),o.length!==1?{ok:!1,reason:"Cannot move prop-backed repeat child without a single unambiguous component call site"}:Ts(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 ax(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=>or(a.file)));if(!t.has(or(e.sourceFile))||!t.has(or(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(or(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=dx(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=cx(r,{file:e.sourceFile,exportName:n.exportName}),i=[];for(let a of r){let c=Uu({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)||Ts(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 cx(e,t){let n=new Map,r=i=>{let s=Fn(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 lx(i,n))o=r(s)||o}return[...n.values()]}function lx(e,t){let n=[],r=ux(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=sr(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=ar(e.file,o.source.value);for(let s of o.specifiers){if(b.isExportNamespaceSpecifier(s)){let l=Mt(s.exported);for(let u of t.values())tt(u.file,i)&&n.push({file:e.file,namespace:vs(l,u.namespace),exportName:u.exportName});continue}if(!b.isExportSpecifier(s))continue;let a=Mt(s.local),c=[...t.values()].filter(l=>tt(l.file,i)&&Yt(l.namespace,a));if(c.length>0){let l=Mt(s.exported);for(let u of c){let d=sr(u.namespace,a,l);d&&n.push({file:e.file,namespace:d,exportName:u.exportName})}continue}t.has(Fn({file:i,exportName:a}))&&n.push({file:e.file,exportName:Mt(s.exported)})}continue}if(b.isExportNamedDeclaration(o)&&!o.source){for(let i of o.specifiers){if(!b.isExportSpecifier(i))continue;let s=Mt(i.local),a=r.get(s)??[];if(a.length>0){let c=Mt(i.exported);n.push({file:e.file,exportName:c});for(let l of a){let u=sr(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=ar(e.file,o.source.value),s=o.exported;if(s){let a=Mt(s);for(let c of t.values())tt(c.file,i)&&n.push({file:e.file,namespace:vs(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 vs(e,t){return t?`${e}.${t}`:e}function Yt(e,t){return e===t||e?.startsWith(`${t}.`)===!0}function sr(e,t,n){return!Yt(e,t)||!e?null:e===t?n:`${n}${e.slice(t.length)}`}function ux(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=ar(e.file,i.source.value);for(let a of i.specifiers){if(b.isImportDefaultSpecifier(a)){let c=t.get(Fn({file:s,exportName:"default"}));c&&r(a.local.name,c);let l=[...t.values()].filter(u=>tt(u.file,s)&&Yt(u.namespace,"default"));for(let u of l){let d=sr(u.namespace,"default",a.local.name);d&&r(a.local.name,{...u,namespace:d})}continue}if(b.isImportSpecifier(a)){let c=Mt(a.imported),l=[...t.values()].filter(d=>tt(d.file,s)&&Yt(d.namespace,c));for(let d of l)r(a.local.name,d);let u=t.get(Fn({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:vs(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=Mn(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(Fn));for(let d of c){let p=sr(d.namespace,a.name,s.id.name),m=p?{...d,namespace:p}:d,g=Fn(m);u.has(g)||(r(s.id.name,m),u.add(g),o=!0)}}}return n}function Fn(e){let t=e.namespace?`${e.namespace}.${e.exportName}`:e.exportName;return`${Cs(e.file)}#${t}`}function Mt(e){return b.isIdentifier(e)?e.name:e.value}function dx(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 Uu(e){let t=fx(e),n=[],r=zu(e.ast,t);return Dt(e.ast,{JSXElement(o){tt(e.file,e.sourceFile)&&Ts(o)===e.sourceComponent||Qu(o,t)&&n.push({file:e.file,path:o})}}),{callSites:n,hasUnsafeReference:r}}function Ku(){return{localBindings:new Set,namespaceMembers:new Map,hasUnsupportedAlias:!1}}function Ju(e,t){let n=Ku();return Dt(e,{Program(r){let o=r.scope.getBinding(t);o&&n.localBindings.add(o),r.stop()}}),n}function fx(e){let t=Ku();return tt(e.file,e.sourceFile)&&px(t,Ju(e.ast,e.sourceComponent)),Dt(e.ast,{ImportDeclaration(n){let r=n.node,o=r.source.value;if(typeof o!="string")return;let i=ar(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=>Yt(u.namespace,"default"));if(l.length>0){let u=t.namespaceMembers.get(c)??new Set;for(let d of l){let p=Tu(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=>Yt(d.namespace,l));if(u.length>0){let d=t.namespaceMembers.get(c)??new Set;for(let p of u){let m=Tu(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)}}}}}),Xu(e.ast,t),t}function px(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 Xu(e,t){Dt(e,{VariableDeclarator(n){if(!n.node.init)return;let r=Mn(n.node.init);if(r){if(b.isIdentifier(n.node.id)){let o=Zt(r,t,n),i=n.scope.getBinding(n.node.id.name);o&&i&&ks(t,i,o);return}if(b.isObjectPattern(n.node.id)){let o=Zt(r,t,n);o?.unsupported||o?.local?t.hasUnsupportedAlias=!0:o&&o.namespaceMembers.size>0&&Gu(n.node.id,o.namespaceMembers,t,n)}}}})}function zu(e,t){if(t.hasUnsupportedAlias)return!0;let n=!1;return Dt(e,{ReferencedIdentifier(r){if(n){r.stop();return}mx(r)||!r.isIdentifier()||!Wu(r,t)||gx(r,t)||hx(r)||(n=!0,r.stop())}}),n}function mx(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 Wu(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)&&Zt(r.node,t,r)?r:null}function gx(e,t){let n=e.findParent(c=>c.isVariableDeclarator());if(!n?.isVariableDeclarator())return!1;let r=n.get("init");if(!r?.isExpression()||!Au(e,r))return!1;let o=Wu(e,t);if(!o)return!1;if(Mn(r.node)===o.node)return!!Zt(r.node,t,r);let s=e.findParent(c=>c.isObjectProperty());if(!s?.isObjectProperty())return!1;let a=s.get("value");return a.isExpression()&&Au(e,a)&&!!Zt(a.node,t,a)}function hx(e){let t=e.parentPath;return t?.isExportDefaultDeclaration()&&t.node.declaration===e.node?!0:!!(t?.isExportSpecifier()&&t.node.local===e.node)}function Au(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentPath}return!1}function Zt(e,t,n){let r=Mn(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 yx(r,t,n);let o=Zu(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?Hu(s,o.slice(1).join(".")):null}function yx(e,t,n){let r=new Set,o=!1;for(let i of e.properties){if(!b.isObjectProperty(i))continue;let s=Yu(i);if(!s||!b.isExpression(i.value)){b.isExpression(i.value)&&(o||=Zt(i.value,t,n)!==null);continue}let a=Zt(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 Hu(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 ks(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 Gu(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&&ks(n,c,{local:!1,namespaceMembers:new Set(t),unsupported:!1})}else n.hasUnsupportedAlias=!0;continue}if(!b.isObjectProperty(o))continue;let i=Yu(o);if(!i){n.hasUnsupportedAlias=!0;continue}let s=Hu(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&&ks(n,c,s);continue}if(b.isObjectPattern(a)&&s.namespaceMembers.size>0){Gu(a,s.namespaceMembers,n,r);continue}n.hasUnsupportedAlias=!0}}function Yu(e){return e.computed?b.isStringLiteral(e.key)||b.isNumericLiteral(e.key)?String(e.key.value):null:xx(e.key)}function xx(e){return b.isIdentifier(e)?e.name:b.isStringLiteral(e)||b.isNumericLiteral(e)?String(e.value):null}function Mn(e){return b.isParenthesizedExpression(e)||b.isTSAsExpression(e)||b.isTSSatisfiesExpression(e)||b.isTSNonNullExpression(e)||b.isTSTypeAssertion(e)?Mn(e.expression):b.isExpression(e)?e:null}function Zu(e){if(b.isIdentifier(e))return[e.name];if((b.isMemberExpression(e)||b.isOptionalMemberExpression(e))&&!e.computed&&b.isIdentifier(e.property)){let t=Mn(e.object),n=t?Zu(t):null;return n?[...n,e.property.name]:null}return null}function Tu(e,t){if(!Yt(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 Qu(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=qu(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 qu(e){if(b.isJSXIdentifier(e))return[e.name];if(b.isJSXMemberExpression(e)){let t=qu(e.object);return t?[...t,e.property.name]:null}return null}function Ts(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 Sx(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=Ix(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=kx(e.callSitePath,c.propName,e.source);if(!u.ok){o=u.reason;return}let d=bx(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=Vu(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:Cx(e.source,t,[...n.values()])}}function bx(e,t){if(t.length===0)return e;let n=ed(e);if(!n)return null;let r=Fs(n)?`(${e})`:e;for(let o of t){if(o.kind==="property"){r=Ex(o.name)?`${r}.${o.name}`:`${r}[${JSON.stringify(o.name)}]`;continue}r=`${r}[${o.index}]`}return r}function Ex(e){return/^[$A-Z_a-z][$\w]*$/.test(e)}function Ix(e,t,n){let r=vx(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=Tn(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 vx(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 kx(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=Po(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 Cx(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 ed(e){try{let n=Ns.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 Rx(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=_u(s,e.sourceFile,e.targetFile);if(a){let c=e.targetParentPath.scope.getBinding(a.localName);if(c){let u=_u(c,e.targetFile,e.targetFile);(!u||u.moduleFile!==a.moduleFile||!wx(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 As(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 wx(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 _u(e,t,n){let r=Nx(e),o=r?.parentPath;if(!r||!o?.isImportDeclaration())return null;let i=o.node.source.value;if(typeof i!="string")return null;let s=ar(t,i),a=i.startsWith(".")?Is(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 Nx(e){let t=e.path;for(;t&&!t.isImportDeclaration();){if(t.isImportSpecifier()||t.isImportDefaultSpecifier()||t.isImportNamespaceSpecifier())return t;t=t.parentPath}return null}function ar(e,t){return t.startsWith("@/")?t.slice(2).replace(/\\/g,"/"):t.startsWith(".")?St.normalize(St.join(St.dirname(e),t)).replace(/\\/g,"/"):t}function tt(e,t){return Cs(e)===Cs(t)}function Cs(e){let t=or(e);return t.endsWith("/index")?t.slice(0,-6):t}function or(e){return e.replace(/\.(tsx|ts|jsx|js)$/,"")}function _s(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 Px(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 Ax(e,t){return{...e,callbackParams:t}}function Fu(e,t){return`${e.collectionNeedsParens?`(${e.collectionExpression})`:e.collectionExpression}${e.mapOperator}((${e.callbackParams.join(", ")}) => ${t})`}function Fs(e){return!(b.isIdentifier(e)||b.isThisExpression(e)||b.isMemberExpression(e)||b.isOptionalMemberExpression(e)||b.isCallExpression(e)||b.isOptionalCallExpression(e))}function td(e,t){return nd(e,t).length>0}function Ss(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()&&!Tx(o,n,r)))return!0;o=o.parentPath}return!1}function Tx(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 nd(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()&&rd(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 Mu(e,t,n,r){let o=nd(t,n);if(o.length===0)return{sourceJsx:r,conditionPaths:[]};let i=r,s=[];for(let a of o){let c=Po(e,a.conditionPath.node);if(!c)return{sourceJsx:r,conditionPaths:[]};let l=_x(a.conditionPath,c);if(s.push(a.conditionPath),a.kind==="logical"){i=`${l} ${a.operator} ${Mx(i)}`;continue}i=a.branch==="consequent"?`${l} ? ${i} : null`:`${l} ? null : ${i}`}return{sourceJsx:i,conditionPaths:s}}function _x(e,t){return Fx(e.node)?t:`(${t})`}function Fx(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 rd(e){return e==="&&"||e==="||"||e==="??"}function Mx(e){return e.trim().startsWith("<")?e:`(${e})`}function od(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=Ou(e),i=Ou(t);if(!o||!i||!Ox(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=Dx(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())&&Lx(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 Ou(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 Ox(e,t){return e.start===t.start&&e.end===t.end}function Dx(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 Lx(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 Bx={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 wo(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=Bx[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 $x(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 Du(e){let t=new Set;return Dt(e,{Program(n){for(let r of Object.keys(n.scope.bindings))t.add(r);n.stop()}}),t}function Lu(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}${n}`);)n+=1;return`${e}${n}`}function Vx(e,t){if(!e.component)return{localName:"Component"};let n=e.component,r=Ps(e),o=He(t);if(n.exportName!=="default"){let a=o?$x(o,n.source,n.exportName):null;if(a)return{localName:a};let c=o?Lu(r,Du(o)):r;return{localName:c,importStep:bs(e,c)}}if(!o)return{localName:r,importStep:bs(e,r)};let i=jx(o,n.source);if(i)return{localName:i};let s=Lu(r,Du(o));return{localName:s,importStep:bs(e,s)}}function Ux(e,t){if(e.kind==="native-tag")return e.text?`<${e.tag}>${e.text}</${e.tag}>`:`<${e.tag} />`;let n=t??Ps(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 Kx(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?Jx(e.props):void 0;return{kind:e.kind,component:{source:e.component.source,exportName:e.component.exportName},...t?{props:t}:{}}}function Jx(e){return Object.fromEntries(Object.entries(e).filter(t=>Rs(t[1])))}function Rs(e){return e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean"?!0:Array.isArray(e)?e.every(Rs):typeof e=="object"?Object.values(e).every(Rs):!1}function Xx(e,t){let n=He(e);if(!n||!t.tag||!t.importedFrom||!t.exportName)return Number.POSITIVE_INFINITY;let r=Uu({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 bs(e,t=Ps(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 Bu(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 rr(e,t){return`Operation kind '${e}' does not match params.kind '${t}'`}function Ms(e,t=e.path){return{kind:"value",root:e.root,path:t&&t.length>0?t:void 0,expectedRange:e.expectedRange}}function ir(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:Ms(e,t.slice(0,n)),index:r.index}}return null}function Es(e,t){return e.locator?e.collectionPathMap?.[t]?Ms(e.locator,e.collectionPathMap[t]):ir(e.locator)?Hx(e.locator,Gx(t,e.collectionIndexMap)):null:null}function Wx(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:id(o,t)}function id(e,t){let[n,...r]=e;if(!n)return t;if(n.kind!=="property")return;let o=id(r,t);return o===void 0?void 0:{[n.name]:o}}function No(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 Hx(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},Ms(e,i)}return null}function Gx(e,t){return t?.[e]??e}function ju(e,t){return!t||t.length===0?e:e<=0?t[0]??0:e>=t.length?(t[t.length-1]??t.length-1)+1:t[e]??e}function Yx(e,t){return Zx(e.root,t.root)&&qx(e.path??[],t.path??[])}function Zx(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&&Qx(e.sourceRange,t.sourceRange)}}function Qx(e,t){return e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}function ws(e,t){let n=null;return Dt(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 qx(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 Ao=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:rr(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:rr(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:rr(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:rr(t.kind,t.params.kind)};let r=t;if(!Co(r.params.position))return{ok:!1,errorCode:"unsupported-operation",reason:"Page composition insert-child requires the page composition transaction planner"};let o=Bu(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:rr(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=Hy(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=Es(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=Es(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(!Yy(a.match.path))return{ok:!0,value:r};let c=Zy(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=Es(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=ir(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=No(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||Xx(n,t)>1)return null;let r=Is(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(!Co(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=No(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=xu(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=wo(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"?Vx(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:Ux(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(!Co(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:Kx(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(!Co(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=ir(a.locator);if(!c)return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed insert-child requires an array-backed target"};let l=Wx(a.locator,i.text);if(l===void 0)return{ok:!1,errorCode:"unsupported-operation",reason:"Repeat-backed insert-child could not infer an item shape from the template"};let u=n.params.position.relation==="prepend"?ju(0,a.collectionIndexMap):ju(a.collectionIndexMap?.length??c.index+1,a.collectionIndexMap);return this.buildPlan(t,n,[{order:0,file:a.file,type:"insert-bound-array-item",locator:c.locator,index:u,value:l}],o)}async getUpstreamBackedDescendantReason(t){if(!this.graph.getChildNodes)return null;let n=[...this.graph.getChildNodes(t.key)];for(;n.length>0;){let r=n.shift();if(!r)continue;let o=this.graph.getEditableTextSegmentIndex(r.key),i=o!==null?await this.graph.getTextWriteTarget(r.key,o):null,s=No(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:ws(n,t);if(!o)return t.isRepeatItemRoot===!0;let i=xt(this.graph.getFileContent(t.file),o);return i?qy(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:ws(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=_t(l,r),d=_t(l,o);if(!u||!d)return null;let p=xt(c,u),m=xt(c,d);if(!Ro(p,m))return null;if(a&&(s==="before"||s==="after")){let S=_t(l,a),C=S?xt(c,S):null;if(!Ro(p,C))return null}if(Ss(u,d))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child across statement-level conditional branches"};let g=Cu(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:_n(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=_t(l,r),d=_t(l,o);if(!u||!d)return null;let p=xt(c,u);if(!p)return null;let m=xt(c,d);if(Ro(p,m))return null;if(m&&!nx(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=Ru(c,l,a);if(m&&!Ro(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=wo(o,{kind:"native-tag",tag:r.tag});if(w)return{ok:!1,errorCode:"unsupported-operation",reason:w}}let g=ys(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(Ss(u,d))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child out of a statement-level conditional branch"};let S=Mu(c,u,d,g);for(let w of S.conditionPaths){let B=Pu(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=Nu(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=rx(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=ix({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=Vu(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:Fu(P,S.sourceJsx),selectionContext:_n(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=ax({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=_t(u,r),g=_t(d,o);if(!m||!g)return null;let S=od(p.callSitePath,g);if(!S.ok)return{ok:!1,errorCode:"unsupported-operation",reason:S.reason};let C=xt(c,m);if(!C)return null;if(xt(l,g))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child into a different repeat template"};if(a&&(s==="before"||s==="after")&&Ru(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=wo(o,{kind:"native-tag",tag:r.tag});if(M)return{ok:!1,errorCode:"unsupported-operation",reason:M}}let P=ys(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(Ss(m,g))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child out of a statement-level conditional branch"};let w=Mu(c,m,g,P);for(let M of w.conditionPaths){let D=Pu(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=Nu(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=Rx({sourceFile:r.file,targetFile:o.file,sourceContext:C,targetParentPath:g});if(!re.ok)return{ok:!1,errorCode:"unsupported-operation",reason:re.reason};let ne=Px(C);if(!ne.ok)return{ok:!1,errorCode:"unsupported-operation",reason:ne.reason};let N=Ax(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:Fu(N,w.sourceJsx),placement:s,anchorLocator:a?fe(a):void 0,selectionContext:_n(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=Bu(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=No(r,a,this.graph.getTextProvenance?.(r.key,0)??null);if(d&&!xs(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=ir(v.locator),B=ir(P.locator);if(w&&B&&v.file===P.file&&Yx(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=xs(d)?d:p;if(m&&xs(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=wo(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=Cu(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:_n(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=ys(this.graph,r)??`<${r.component} />`,p=Su(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:Is(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:_n(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:_n(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 cr from"node:path";import*as hd from"@babel/parser";import Os from"@babel/traverse";import*as E from"@babel/types";var yd=typeof Os=="function"?Os:Os.default;function xd(e){return new Map([...e].map(t=>[t.file,{source:t.source,ast:t.ast}]))}var sd=new WeakMap;function ad(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 Sd(e){let{file:t,source:n,segment:r,readFile:o,exists:i}=e,s=e.fileCache??new Map,a=Ws(s,t,n);if(!a)return null;let c=Hs(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 ta({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??dr(c.node,n),sourceKind:m.sourceKind,...m.collectionIndexMap?{collectionIndexMap:m.collectionIndexMap}:{},...m.collectionPathMap?{collectionPathMap:m.collectionPathMap}:{}}}let u=new Set,d=await wS({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 bd(e){let{file:t,source:n,readFile:r,exists:o}=e,i=e.fileCache??new Map,s=Ws(i,t,n);if(!s)return null;let a=e.expression!==void 0?(e.sourceRange?kd(s,n,e.expression,e.sourceRange):null)??Zs(s,n,e.expression):e.sourceRange?Hs(s,e.sourceRange):null;if(!a)return null;let c=rS(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 VS({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 nS(d,e.expression??dr(c.node,n))}async function zs(e){let{file:t,source:n,readFile:r,exists:o}=e,i=e.fileCache??new Map,s=Ws(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"?oS({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}):iS({file:t,source:n,ast:s,candidate:e.target.candidate,readFile:r,exists:o,graph:e.graph,fileCache:i,visited:a})}function Ed(e){try{return hd.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Ws(e,t,n){let r=e.get(t);if(r?.source===n)return r.ast;let o=Ed(n);return e.set(t,{source:n,ast:o}),o}function Hs(e,t){let n=null,r=-1;for(let o of ur(e).expressions){let i=o.node.loc;if(!i||!Gs(i,t))continue;let s=(o.node.end??0)-(o.node.start??0);s>=r&&(n=o,r=s)}return n}function eS(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let o of ur(e).expressions){if(!tS(o.node.loc,t))continue;let i=(o.node.end??0)-(o.node.start??0);i<=r&&(n=o,r=i)}return n}function Id(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let o of ur(e).jsxElements){let i=o.node.loc;if(!i||!Gs(i,t))continue;let s=(o.node.end??0)-(o.node.start??0);s<=r&&(n=o,r=s)}return n}function ur(e){let t=sd.get(e);if(t)return t;let n={expressions:[],jsxElements:[]};return yd(e,{Expression(r){n.expressions.push(r)},JSXElement(r){n.jsxElements.push(r)}}),sd.set(e,n),n}function tS(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 Gs(e,t){let n=cd({line:e.start.line,column:e.start.column},{line:t.startLine,column:t.startColumn}),r=cd({line:e.end.line,column:e.end.column},{line:t.endLine,column:t.endColumn});return n>=0&&r<=0}function vd(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 cd(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 Od(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:dr(e.expression,e.source),base:t.base,path:t.path}:null}function nS(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 rS(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 dr(e,t){if(t)return Ys(e,t);let n=YS(e);return n?n.path.reduce((r,o)=>o.kind==="property"?`${r}.${o.name}`:`${r}[${o.index}]`,n.base):""}function Ys(e,t){return e.start==null||e.end==null?"":t.slice(e.start,e.end)}function Zs(e,t,n){let r=null,o=Number.POSITIVE_INFINITY;for(let i of ur(e).expressions){if(Ys(i.node,t)!==n)continue;let s=(i.node.end??0)-(i.node.start??0);s<=o&&(r=i,o=s)}return r}function kd(e,t,n,r){let o=null,i=Number.POSITIVE_INFINITY;for(let s of ur(e).expressions){if(Ys(s.node,t)!==n)continue;let a=s.node.loc;if(!a||!Gs(a,r))continue;let c=(s.node.end??0)-(s.node.start??0);c<=i&&(o=s,i=c)}return o}async function oS(e){let{file:t,source:n,ast:r,segment:o,readFile:i,exists:s,fileCache:a,visited:c}=e,l=Hs(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 sS(t,o.value);let p=await ta({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"?pd(t,p):Vs(t,dr(l.node,n),p):aS({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=$s(l.node);if(p)return Be(p.code,p.message);let m=l.scope.getBinding(u.base);if(m?.path.isVariableDeclarator()){let g=$s(m.path.node.init);if(g)return Be(g.code,g.message)}return m?.path.isVariableDeclarator()&&E.isCallExpression(m.path.node.init)?cS("unsupported-expression",Pd(m.path.node.init,e.functionCallContracts)):Be("unsupported-expression",`Unable to resolve provenance for expression "${u.expression}"`)}return d.kind==="external"?pd(t,d):Vs(t,u.expression,d)}async function iS(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=Zs(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=Vs(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 sS(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 aS(e){let t=await Rd(e);if(t.length===0)return Be("unsupported-expression",`Unsupported expression type: ${e.expression.type}`);if(lS(e.expression))return Cd(t);if(Nd(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 cS(e,t){return Cd([{code:e,message:t}])}function Cd(e){return{finalSource:null,chain:[],confidence:"partial",editMode:"readonly",diagnostics:e}}function lS(e){return E.isCallExpression(e)||E.isConditionalExpression(e)||E.isLogicalExpression(e)||E.isBinaryExpression(e)}function lr(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 Rd(e){let{expression:t,scope:n,currentFile:r,readFile:o,exists:i,fileCache:s,visited:a,functionCallContracts:c}=e,l=$s(t);if(l)return[l];if(E.isCallExpression(t))return[{code:"unsupported-expression",message:Pd(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)?lr([...await Ds(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)?lr([...await Ds(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)?lr([...await Ds(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 $s(e){return Nd(e)?ld("i18n helpers require a static message id string"):mS(e)?ld("CMS helpers require static entry id and field path string arguments"):null}async function Ds(...e){let t=e[e.length-1],n=e.slice(0,-1),r=[];for(let o of n)r.push(...await Rd({...t,expression:o}));return r}function uS(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:[dS(e.sourceType)]}}async function Qs(e){for(let n of xS){if(!ud(e.expressionPath,n.helperNames))continue;let r=await n.resolve(e);if(r)return fd(dd(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(!ud(e.expressionPath,n.helperNames))continue;let r=await n.resolve(t);if(r)return fd(dd(r),e.externalAdapters)}return null}function dS(e){return{code:"missing-adapter",message:`No external adapter is registered for ${e}`}}function fS(e){return{code:"external-source-readonly",message:e}}function ld(e){return{code:"unsupported-expression",message:e}}function qs(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 ud(e,t){if(!t||t.length===0)return!0;let n=qs(e.node);return n?t.includes(n):!1}function dd(e){return"match"in e?{match:e.match,editMode:e.editMode,diagnostics:lr(e.diagnostics??[])}:{match:e,diagnostics:[]}}function fd(e,t){let n=uS(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:lr([...e.diagnostics,...e.editMode==="readonly"||n.editMode==="readonly"?n.diagnostics:[]])}}function pS(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 mS(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 wd(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 Nd(e){return wd(e)===null}async function gS(e,t,n){let r=new Set,o=cr.posix.dirname(e);for(;r.add(o),!(o==="."||o==="/");){let i=cr.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"]:[cr.posix.join(i,"locales"),cr.posix.join(i,"messages")];for(let a of s){let c=cr.posix.join(a,`${t}.json`);if(await n(c))return c}}return null}async function hS(e){let t=wd(e.expressionPath.node);if(typeof t!="string"||t.length===0)return null;let n="en",r=await gS(e.currentFile,n,e.exists);return r?{sourceType:"i18n-message",sourceId:`${n}:${t}`,file:r,displayPath:t}:null}async function yS(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:[fS("API mapping transforms must stay readonly until a reversible mapping strategy is registered")]}:i}var xS=[{helperNames:["getCmsField"],resolve:({expressionPath:e})=>pS(e)},{helperNames:["apiField"],resolve:e=>yS(e)},{helperNames:["t","intl.formatMessage"],resolve:({currentFile:e,expressionPath:t,exists:n})=>hS({currentFile:e,expressionPath:t,exists:n})}];function pd(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 Vs(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=RS(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 SS=[{helperName:"formatPrice",purity:"pure",sourceArgIndex:0},{helperName:"formatDate",purity:"pure",sourceArgIndex:0},{helperName:"pickLabel",purity:"pure",sourceArgIndex:0}];function ea(e,t){let n=[...SS,...t??[]];for(let r=n.length-1;r>=0;r-=1){let o=n[r];if(o?.helperName===e)return o}return null}function Pd(e,t){let n=e.callee;return E.isIdentifier(n)&&ea(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 ta(e){let t=await Qs(e);if(t)return t;let n=await Ad({...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 kS(e)}async function Ad(e){let t=await nt({...e,allowComposed:!1});return t?.kind==="source"?t.provenance:null}async function nt(e){let t=bS(e.expressionPath),n=vS(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 Ls(s,a,c)}if(t.isCallExpression())return ES({...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 Ls(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 Ls(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 bS(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 ES(e){let t=qs(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 Ls(...e){let t=null;for(let n of e){if(!n)return null;if(n.kind!=="none"){if(!t){t=n.provenance;continue}if(!IS(t,n.provenance))return null}}return t?{kind:"source",provenance:t}:{kind:"none"}}function IS(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 vS(e,t){return t.start==null||t.end==null?null:`safe-derived:${e}:${t.start}:${t.end}`}async function kS(e){if(!e.expressionPath.isCallExpression())return null;let t=qs(e.expressionPath.node);if(!t)return null;let n=ea(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 Td({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 Td(e){let t=await Qs({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 ta({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 CS(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=ea(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 Td({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 RS(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=_o(t,e.path);return{sourceId:o,displayPath:o}}async function wS(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=_d(e.expressionPath,t.base);if(n){let l=await Fd({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=PS(n.callPath,[...n.basePath,...t.path]);return tr(S)?ad(e.currentFile,S.sourceId,S.displayPath):null}let u=ZS(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 gn(e.currentFile,u.node.source.value,e.exists);if(!d)return null;let p=await To({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=Iu(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:_o(u.expression,t.path),path:[...u.path,...t.path]}});if(d)return d}if(t.path.length===0){let d=await Ad({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 CS({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=bo(r,t.path);if(tr(s))return ad(e.currentFile,s.sourceId,s.displayPath);let a=await en({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 _d(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()||!NS(s,r)?null:{callPath:s,basePath:i}}function NS(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 Fd(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 fr({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 PS(e,t){let n=e.get("callee");if(!n.isMemberExpression())return null;let r=n.get("object");return Array.isArray(r)||!r.isExpression()?null:Io(r,t)}async function fr(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 en({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 Md({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 fr({...e,expressionPath:a})}if(n.isArrayExpression()){let a=vd(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 AS({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=QS(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 AS(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 Lt(t.file,e.readFile,e.fileCache);i=s.ast?Js(s.ast).getBinding(t.root.name):void 0}return i?await en({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 Lt(t.file,e.readFile,e.fileCache);if(!n.ast)return null;let r=eS(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 Md(e){return await TS(e)??await _S(e)??await FS(e)}async function TS(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 fr({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=MS(s);if(!c)return null;let l=[],u=[],d=[];for(let[p,m]of i.value.entries()){let g=OS(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 _S(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 fr({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=md(s,0),l=md(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 md(e,t){return e?E.isNumericLiteral(e)&&Number.isInteger(e.value)?e.value:null:t}async function FS(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 fr({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(gd(s,a.name,c.name,d.value,p.value)===void 0)return null;return u.sort((d,p)=>{let m=gd(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 gd(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=Us(i,t,n,r,o);return typeof s=="number"?s:void 0}function Us(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=Ks(e,t);if(i)return rt(r,i);let s=Ks(e,n);return s?rt(o,s):void 0}if(E.isBinaryExpression(e)&&e.operator==="-"){let i=E.isExpression(e.left)?Us(e.left,t,n,r,o):void 0,s=E.isExpression(e.right)?Us(e.right,t,n,r,o):void 0;return typeof i=="number"&&typeof s=="number"?i-s:void 0}}function MS(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 OS(e,t,n){let r=qt(e,t,n);return typeof r=="boolean"?r:void 0}function qt(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=Ks(e,t);return r?rt(n,r):void 0}if(E.isUnaryExpression(e)&&e.operator==="!"){let r=qt(e.argument,t,n);return r===void 0?void 0:!r}if(E.isLogicalExpression(e)){let r=qt(e.left,t,n);if(r===void 0)return;if(e.operator==="&&")return r&&qt(e.right,t,n);if(e.operator==="||")return r||qt(e.right,t,n)}if(E.isBinaryExpression(e)){let r=E.isExpression(e.left)?qt(e.left,t,n):void 0,o=E.isExpression(e.right)?qt(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 Ks(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 en(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 DS({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 GS({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 Qs({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 Md({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 DS(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=LS(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 LS(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 BS(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=BS(e.path);if(!n)return null;let r=Tn(e,t);return r?{...n,...r}:null}function _o(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}function $S(e,t,n,r){return e.importedFrom===t?r?e.exportName===r:!0:e.sourceFile===t&&e.tag===n}async function VS(e){let t=KS(e.expressionPath.node);if(!t||!JS(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 US({...e,rootPath:n.path,segments:t.segments});return r?{...n,path:r.collectionPathMap[0]??n.path,sourceKind:"repeat-template",displayExpression:dr(e.expressionPath.node,e.fileCache.get(e.currentFile)?.source),...r.collectionIndexMap?{collectionIndexMap:r.collectionIndexMap}:{},collectionPathMap:r.collectionPathMap}:null}async function US(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=_d(e.expressionPath,s.base);if(!a)return null;let c=await Fd({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 XS(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 KS(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 JS(e){return e.some(t=>t.kind==="dynamic")}function XS(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=>$S(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 WS({caller:r,propName:t.propName,remainingPath:t.remainingPath,readFile:e.readFile,fileCache:e.fileCache});if(l)return Bs(l,{componentName:t.componentName,propName:t.propName,file:r.sourceFile})}if(!o?.source){let l=await HS({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 Bs(l,{componentName:t.componentName,propName:t.propName,file:r.sourceFile});let u=ku(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 Lt(r.sourceFile,e.readFile,e.fileCache);if(!i.ast)return null;let s=kd(i.ast,i.source,o.source.expression,o.sourceRange)??Zs(i.ast,i.source,o.source.expression);if(!s)return null;let a={...o.source,expression:_o(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?Bs(c.kind==="external"?c:{...c,displayExpression:a.expression},{componentName:t.componentName,propName:t.propName,file:r.sourceFile}):null}async function WS(e){let t=await Lt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=Id(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=vd(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 HS(e){let t=await Lt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=Id(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:_o(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 Bs(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 GS(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 gn(t,c,o);if(!l)return null;if(n.path.isImportDefaultSpecifier()){let S=await Lt(l,r,i),C=S.ast?Xs(S.ast,"default"):null,v=await To({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 Lt(l,r,i),m=p.ast?Xs(p.ast,d):null,g=await To({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 To(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 Lt(t,r,i);if(!c.ast)return;let l=Xs(c.ast,n);if(!l)return;if(l.kind==="default-expression"){let m=l.expression;if(!m||!E.isIdentifier(m))return;let g=Js(c.ast).getBinding(m.name);return g?await en({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 gn(t,l.source,o);return m?To({...e,file:m,exportName:l.name}):void 0}let u=l.name;if(!u)return;let d=Js(c.ast).getBinding(u);return d?await en({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 Js(e){let t=null;if(yd(e,{Program(n){t=n.scope,n.stop()}}),!t)throw new Error("Unable to determine program scope");return t}function Xs(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 en({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 js(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 js(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 js(c.value,t,n,r,o,i,s);u!==void 0&&(a[l]=u)}return a}if(E.isMemberExpression(e)){let a=await Od(e,t,n,r,o,i,s);if(!a)return;let c=t.getBinding(a.base);if(!c)return;let l=await en({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 js(e,t,n,r,o,i,s){if(!E.isSpreadElement(e))return await it(e,t,n,r,o,i,s)}async function Od(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 YS(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 ZS(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 QS(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 Lt(e,t,n){let r=n.get(e);if(r)return r;let o=await t(e),i=Ed(o),s={source:o,ast:i};return n.set(e,s),s}import sa from"@babel/generator";import{parse as db}from"@babel/parser";import aa from"@babel/traverse";import*as k from"@babel/types";import*as jd from"@babel/types";import na from"@babel/generator";import*as ce from"@babel/types";var qS=typeof na=="function"?na:na.default,eb=/(?:token|secret|key|password|authorization|cookie|signature|credential)/i,tb=/^((?:https?:)?\/\/)[^/@\s]+@/i,nb=/(\/(?:token|secret|api[-_]?key|password|credential|signature)\/)[^/?#]+/gi;function Ld(e,t){let n=ft(e.callee);if(!n)return null;if(n==="fetch")return ra(e.arguments[0],"GET",t,["fetch call"]);if(n.startsWith("axios.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if(Dd(r))return ra(e.arguments[0],r,t,["axios client contract"])}if(n.startsWith("ky.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if(Dd(r))return ra(e.arguments[0],r,t,["ky client contract"])}return null}function ra(e,t,n,r){if(!e||ce.isSpreadElement(e)||ce.isJSXNamespacedName(e))return sb(t,n,r,"missing url argument");let o=pr(e);return{sourceKind:ib(o),...o?{endpointPattern:o}:{},method:t,confidence:o?"exact":"partial",evidence:[{file:n.file,reason:[...r,o?"endpoint pattern resolved":"endpoint pattern unresolved"].join("; ")}]}}function pr(e){if(ce.isStringLiteral(e))return Fo(e.value);if(ce.isTemplateLiteral(e))return Fo(rb(e));if(ce.isBinaryExpression(e)&&e.operator==="+"){let t=pr(e.left),n=pr(e.right);return!t&&!n?void 0:Fo(`${t??oa(e.left)}${n??oa(e.right)}`)}if(ce.isMemberExpression(e)){let t=Bd(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)?pr(t):void 0,o=n&&!ce.isSpreadElement(n)?pr(n):void 0;return o&&r?Fo(`${o} + ${r}`):r??o}if(ce.isIdentifier(e))return`:${e.name}`}}function rb(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+=oa(r))}return t}function oa(e){if(ce.isIdentifier(e))return`:${e.name}`;if(ce.isMemberExpression(e)){let t=Bd(e);if(t)return`env:${t}`}return`:${ob(e)}`}function ob(e){return qS(e,{comments:!1}).code.replace(/[^a-zA-Z0-9_$]+/g,"_").replace(/^_+|_+$/g,"")||"param"}function Fo(e){let[t]=e.split("#"),[n,r]=t.split("?"),o=n.replace(tb,"$1<redacted>@").replace(nb,"$1<redacted>");if(!r)return o;let i=r.split("&").map(s=>{let[a]=s.split("=");return a?eb.test(a)?`${a}=<redacted>`:`${a}=:${a}`:""}).filter(Boolean).join("&");return i?`${o}?${i}`:o}function ib(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 sb(e,t,n,r){return{sourceKind:"unknown-api",method:e,confidence:"partial",evidence:[{file:t.file,reason:[...n,r].join("; ")}]}}function Dd(e){return["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(e)}function Bd(e){return!ce.isMemberExpression(e.object)||!ce.isIdentifier(e.object.object,{name:"process"})||!ab(e.object.property,"env")?null:ce.isIdentifier(e.property)?e.property.name:ce.isStringLiteral(e.property)?e.property.value:null}function ab(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 cb=new Set(["list","listStrict","get","getStrict","getByUrl","getByUrlStrict","schema","categories"]),lb=new Set(["getConfig","submit"]);function $d(e,t){let n=ub(ft(e.callee),t);if(!n)return null;let r="cms.collections.";if(n.startsWith(r)){let i=n.slice(r.length);if(!cb.has(i))return null;let s=ia(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(!lb.has(i))return null;let s=ia(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=ia(e,0)??"/cms/:path";return{sourceKind:"vcp-cms-collection",sourceType:"cms-field",operation:n,endpointPattern:i,confidence:i==="/cms/:path"?"partial":"safe-derived",evidence:[{file:t.file,symbol:n,reason:"VCP CMS fetch helper"}]}}return null}function ub(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 Vd(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 Ud(e){let t=ft(e.callee);return typeof t=="string"&&t.startsWith("cms.field.")}function ia(e,t){let n=e.arguments[t];return jd.isStringLiteral(n)?n.value:null}var ua=typeof aa=="function"?aa:aa.default,NN=typeof sa=="function"?sa:sa.default,fb={maxFunctionDepth:8,maxImportDepth:6},pb=new Set(["src","href","alt","poster","content","title","aria-label"]);async function Hd(e){let t=e.fileCache??new Map,n=ma(e.file,e.source,t),r={file:e.file,analysis:n,readFile:e.readFile,exists:e.exists,fileCache:t,options:{...fb,...e.options},variableCache:new Map,functionDepth:0,importDepth:0,paramSources:new Map,resolvingVariables:new Set,resolvingComponentProps:new Set,scopeVariables:lf(n,e.element.componentName)};await Gd(e.element.componentName,e.graph,r);let o=[];o.push(...await xb(e.element,e.graph,r));for(let s of e.element.textSegments){let a=await Sb(s,e.element,e.graph,r);a&&o.push(la(a,"text","children"))}for(let s of e.element.attributes??[]){let a=yb(s);if(!a)continue;let c=await Qd(s.source,e.element,e.graph,r);c&&o.push(la(c,a,s.name))}let i=Mb(o).sort(af);return{hasDynamicData:i.length>0,bindings:i}}async function Gd(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 Yd(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 Zd(l.sourceFile,n);if(!d)continue;let p=Do(d,n,{importDepth:n.importDepth+1});p.paramSources.clear(),p.scopeVariables=lf(d,l.componentName),await Gd(l.componentName,t,p);let m=await mb(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=of(u);d.length===1&&c.set(l,d[0])}hb(o,c,n)}async function Yd(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 Zd(e,r))?.imports.get(t);if(!s||!lt(s.source))return!1;let a=await ff(e,s.source,r.exists);return a?a===n?!0:Yd(a,s.importedName,n,r,o):!1}async function mb(e,t){let n=new Map;ua(t.analysis.ast,{JSXElement(o){if(gb(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 gb(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 Zd(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 ma(e,r,t.fileCache)}function hb(e,t,n){if(k.isIdentifier(e)){t.size>0&&n.paramSources.set(e.name,pa(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,we(o))}}function yb(e){return e.name==="dangerouslySetInnerHTML"?"richtext":pb.has(e.name)?"attribute":null}async function xb(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 da(i.collectionSource,n);s&&r.push(la(On(s),"repeat-region",i.collectionExpression))}return r}async function Sb(e,t,n,r){return Qd(e.source,t,n,r)}async function Qd(e,t,n,r){let o=await bb(e,t,n,r);return o||da(e,r)}async function bb(e,t,n,r){if(!e)return null;let o=Eb(e.base,t,n);if(!o)return null;let i=await da(o.collectionSource,r);return i?yr(i,e.path,!0):null}function Eb(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 da(e,t){if(!e)return null;let n=await qd(e.base,t);return n?yr(n,e.path,!1):null}async function qd(e,t){let n=t.paramSources.get(e);if(n)return we(n);if(t.variableCache.has(e))return Ob(t.variableCache.get(e)??null);if(t.resolvingVariables.has(e))return null;t.resolvingVariables.add(e);let r=await Ib(e,t);if(r)return t.variableCache.set(e,we(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?we(s):null),t.resolvingVariables.delete(e),s}let i=t.analysis.imports.get(e);if(i&&t.importDepth<t.options.maxImportDepth){let s=await uf(i,t);if(s){let a=Do(s,t,{importDepth:t.importDepth+1}),c=df(i,s);if(c){let d=(await tn(c,[],a)).returnSource;return t.variableCache.set(e,d?we(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?we(u):null),t.resolvingVariables.delete(e),u}}}return t.variableCache.set(e,null),t.resolvingVariables.delete(e),null}async function Ib(e,t){let n=t.analysis.stateSetters.get(e);if(!n)return null;let r=[];ua(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 qd(e.name,t);if(k.isMemberExpression(e)||k.isOptionalMemberExpression(e)){let n=k.isMemberExpression(e)?Vd(e,{file:t.file}):null;if(n)return rf(n);let r=await vb(e,t);if(!r)return null;let o=_b(e);return yr(r,o,!1)}if(k.isAwaitExpression(e))return k.isExpression(e.argument)?Ce(e.argument,t):null;if(k.isCallExpression(e))return ef(e,t);if(k.isObjectExpression(e)){let n=await tf(e,t);return Object.keys(n).length>0?pa(n,t.file):null}if(k.isConditionalExpression(e)){let n=await Ce(e.consequent,t),r=await Ce(e.alternate,t);return hr(Jd(n,r))}if(k.isLogicalExpression(e)){let n=await Ce(e.left,t),r=await Ce(e.right,t);return hr(Jd(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 vb(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 ef(e,t){let n=$d(e,{file:t.file,imports:t.analysis.imports});if(n)return rf(n);if(Ud(e)){let d=e.arguments[0];if(d&&k.isExpression(d))return hr(await Ce(d,t))}let r=await kb(e,t);if(r)return r;let o=Ld(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 wb(e,t);if(i)return i;let s=await Nb(e,t);if(s)return s;let a=await Pb(e,t);if(a)return a;let c=await Ab(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=of(l);return u.length===1?hr(u[0]):null}async function kb(e,t){let n=ft(e.callee);if(n!=="useQuery"&&n!=="useSuspenseQuery"&&n!=="useInfiniteQuery"&&n!=="useSWR")return null;if(n==="useSWR"){let i=Rb(e.arguments[0],t.file,"SWR key"),s=e.arguments[1];if(k.isIdentifier(s)){let a=await gr(s.name,t);if(a)return(await tn(a.node,i?[i]:[],a.context)).returnSource??i}return i}let r=e.arguments[0];if(!k.isObjectExpression(r))return Mo(t.file,`${n} without static options`);let o=Cb(r,"queryFn");if(!o)return Mo(t.file,`${n} without queryFn`);if(k.isIdentifier(o)){let i=await gr(o.name,t);return i?(await tn(i.node,[],i.context)).returnSource:Mo(t.file,`${n} queryFn unresolved`)}return k.isArrowFunctionExpression(o)||k.isFunctionExpression(o)?(await tn(o,[],t)).returnSource:k.isCallExpression(o)?ef(o,t):null}function Cb(e,t){for(let n of e.properties){if(!k.isObjectProperty(n)||!k.isExpression(n.value))continue;if(nf(n)===t)return n.value}return null}function Rb(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 wb(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 On(r);let o=e.arguments[0];if(k.isIdentifier(o)){let i=await gr(o.name,t);if(!i)return On(r);let s=await tn(i.node,[r],i.context);return{...On(r),...s.objectReturnMap??s.returnSource?.fieldMap?{fieldMap:s.objectReturnMap??s.returnSource.fieldMap}:{}}}if(k.isArrowFunctionExpression(o)||k.isFunctionExpression(o)){let i=await tn(o,[r],t);return{...On(r),...i.objectReturnMap??i.returnSource?.fieldMap?{fieldMap:i.objectReturnMap??i.returnSource.fieldMap}:{}}}return On(r)}async function Nb(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 Pb(e,t){return!k.isMemberExpression(e.callee)||!k.isIdentifier(e.callee.property,{name:"then"})||!k.isExpression(e.callee.object)?null:hr(await Ce(e.callee.object,t))}async function Ab(e,t){if(!k.isIdentifier(e.callee))return null;let n=await gr(e.callee.name,t);if(!n)return null;let r=[];for(let i of e.arguments){if(!k.isExpression(i)){r.push(Mo(t.file,`unsupported argument for ${e.callee.name}`));continue}let s=await Ce(i,t);r.push(s)}return(await tn(n.node,r,n.context)).returnSource}async function gr(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 uf(r,t);if(!o)return null;let i=Do(o,t,{importDepth:t.importDepth+1}),s=df(r,o);return s?{node:s,context:i}:gr(r.importedName,i)}async function tn(e,t,n){if(n.functionDepth>=n.options.maxFunctionDepth)return{returnSource:null};let r=Do(n.analysis,n,{functionDepth:n.functionDepth+1});r.scopeVariables=n.analysis.functionVariables.get(e),e.params.forEach((c,l)=>{let u=t[l];u&&ca(c,Fb(u),r)});let o=Tb(e),i=null,s,a=!1;for(let c of o){if(k.isObjectExpression(c)){s={...s??{},...await tf(c,r)},i=i??pa(s,n.file);continue}let l=await Ce(c,r);if(l){if(!i){i=l;continue}let u=fa(i,l);if(!u){a=!0,i=null;continue}i=u}}return{returnSource:a?null:i,...s?{objectReturnMap:s}:{}}}function ca(e,t,n){if(k.isIdentifier(e)){n.paramSources.set(e.name,we(t));return}if(k.isAssignmentPattern(e)){ca(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=yr(t,[{kind:"property",name:r.key.name}],!0),i=k.isAssignmentPattern(r.value)?r.value.left:r.value;ca(i,o,n)}}function Tb(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 tf(e,t){let n={};for(let r of e.properties){if(!k.isObjectProperty(r))continue;let o=nf(r);if(!o||!k.isExpression(r.value))continue;let i=await Ce(r.value,t);i&&(n[o]=i)}return n}function nf(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 yr(e,t,n){if(t.length===0)return we(e);let r=t[0];if(r?.kind==="property"&&e.fieldMap?.[r.name])return yr(e.fieldMap[r.name],t.slice(1),n);let o=we(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=mr(o.valuePath,"data.items[]"),o.cmsFieldRoot=!1,o):i[0]==="fields"?(o.fieldPath=mr(o.fieldPath,i.slice(1).join(".")),o.cmsFieldRoot=!0,o):o.cmsFieldRoot||n||o.fieldMap?(o.fieldPath=mr(o.fieldPath,i.join(".")),o):(o.valuePath=mr(o.valuePath,Kd(t)),o)}return o.valuePath=mr(o.valuePath,Kd(t)),o}function Kd(e){return e.map(t=>t.kind==="property"?t.name:`[${t.index}]`).join(".").replace(/\.\[/g,"[")}function mr(e,t){return t?e?t.startsWith("[")?`${e}${t}`:`${e}.${t}`:t:e}function rf(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 On(e){let t=we(e);return t.sourceType==="cms-field"&&!t.valuePath&&(t.valuePath="items[]"),t}function Fb(e){let t=we(e);return t.valuePath=void 0,t.sourceType==="cms-field"&&(t.cmsFieldRoot=!1),t}function hr(e){return e?{...we(e),confidence:e.confidence==="unknown"?"unknown":"safe-derived",evidence:[...e.evidence,{file:e.evidence[0]?.file??"unknown",reason:"safe derived expression"}]}:null}function Jd(e,t){return e?t?fa(e,t):we(e):t?we(t):null}function fa(e,t){if(Oo(e)!==Oo(t))return null;let n=cf(e.confidence,t.confidence)<=0?e.confidence:t.confidence;return{...e,confidence:n,evidence:[...e.evidence,...t.evidence]}}function of(e){let t=new Map;for(let n of e){let r=Oo(n),o=t.get(r);t.set(r,o?fa(o,n):we(n))}return[...t.values()]}function Oo(e){let t=e.fieldMap?Object.fromEntries(Object.entries(e.fieldMap).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>[n,Oo(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 pa(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 Mo(e,t){return{sourceKind:"unknown-api",sourceType:"api-field",confidence:"unknown",readonly:!0,evidence:[{file:e,reason:t}]}}function la(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 sf(e){let t=[...e].sort(af),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 Mb(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 af(e,t){return Xd(e.targetKind)-Xd(t.targetKind)||cf(e.confidence,t.confidence)||zd(e.sourceKind)-zd(t.sourceKind)||e.targetName.localeCompare(t.targetName)}function Xd(e){return{"repeat-region":0,text:1,richtext:2,attribute:3,"component-prop":4}[e]}function zd(e){return e.startsWith("vcp-cms-")?0:e==="site-api-route"?1:e==="external-api"?2:3}function cf(e,t){let n={exact:0,"safe-derived":1,partial:2,unknown:3};return n[e]-n[t]}function ma(e,t,n){let r=n.get(e);if(r?.source===t)return r;let o=db(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 ua(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 Dn(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)&&Wd(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)&&Wd(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 Dn(e){return!e||k.isVoidPattern(e)?[]:k.isIdentifier(e)?[e.name]:k.isObjectPattern(e)?e.properties.flatMap(t=>k.isObjectProperty(t)?Dn(t.value):Dn(t.argument)):k.isArrayPattern(e)?e.elements.flatMap(t=>t?Dn(k.isRestElement(t)?t.argument:t):[]):k.isAssignmentPattern(e)?Dn(e.left):k.isRestElement(e)?Dn(e.argument):[]}function Wd(e){return k.isFunctionExpression(e)||k.isArrowFunctionExpression(e)}function lf(e,t){let n=e.functions.get(t)??e.functions.get("default");return n?e.functionVariables.get(n):void 0}async function uf(e,t){let n=await ff(t.file,e.source,t.exists);if(!n)return null;let r=await t.readFile(n);return ma(n,r,t.fileCache)}function df(e,t){return e.isDefault?t.functions.get("default")??t.functions.get(e.localName)??null:t.functions.get(e.importedName)??null}async function ff(e,t,n){return lt(t)?gn(e,t,n):null}function Do(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 Ob(e){return e?we(e):null}function we(e){return{...e,evidence:e.evidence.map(t=>({...t})),...e.fieldMap?{fieldMap:Object.fromEntries(Object.entries(e.fieldMap).map(([t,n])=>[t,we(n)]))}:{}}}var Db=50,Lb=8*1024*1024;function hf(e,t={}){let n=[],r=[],o=t.externalAdapters??[],i=Math.max(0,t.maxUndoEntries??Db),s=Math.max(0,t.maxUndoBytes??Lb);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=gf(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,Et)=>xe.order-Et.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 Et=he.get(xe.file)??"",It=gf(xe,Et);if(!It.ok)return{ok:!1,operationId:N.operationId,errorCode:It.errorCode,reason:It.reason,rolledBack:!1};he.set(xe.file,It.source),It.selectionRef&&(H=It.selectionRef)}let q=await B([...he].map(([xe,Et])=>({file:xe,content:Et,exists:!0,version:0,sha256:ue(Et)})),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(", ")}: ${mf(Z)}`,rolledBack:!1,instanceConflict:pf(Z)};let he=pf(Z);return{ok:!1,reason:`${he?"MATERIALIZATION_INSTANCE_CONFLICT: ":""}Writeback failed and committed files were restored: ${mf(Z)}`,rolledBack:!0,instanceConflict:he}}return{ok:!0,snapshots:N.map(Bb)}}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 pf(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="EEXIST"}function Bb(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 mf(e){return e instanceof Error?e.message:String(e)}function gf(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(wn({source:t,moduleSpecifier:e.moduleSpecifier,imports:e.imports}));case"remove-import":return De(Nn({source:t,moduleSpecifier:e.moduleSpecifier,imports:e.imports}));case"remove-node":return De(In({source:t,locator:e.locator,removeWhitespace:e.removeWhitespace}));case"insert-child":return De(kn({source:t,locator:e.parentLocator,node:e.node,placement:e.placement,anchorLocator:e.anchorLocator,selectionContext:e.selectionContext}));case"update-text":return De(io({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(lo({source:t,locator:e.locator,index:e.index,value:e.value}));case"insert-jsx-expression-child":return De(so({source:t,locator:e.parentLocator,expression:e.expression,placement:e.placement,anchorLocator:e.anchorLocator,selectionContext:e.selectionContext}));case"remove-bound-array-item":return De(uo({source:t,locator:e.locator,index:e.index}));case"move-array-item":return De(fo({source:t,locator:e.locator,fromIndex:e.fromIndex,toIndex:e.toIndex}));case"move-node":return De(Rn({source:t,locator:e.locator,targetParentLocator:e.targetParentLocator,placement:e.placement,anchorLocator:e.anchorLocator,selectionContext:e.selectionContext}));case"move-repeat-template-child":return De(ao({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 jb(e,t);case"set-props":{let n=e;return De(co({source:t,locator:n.locator,props:n.props}))}default:return{ok:!1,reason:`Unknown step type: ${e.type}`,errorCode:"unknown"}}}function jb(e,t){let{request:n}=e;if(n.newAttrRaw!==null&&!du(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:uu({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 yf(){let e=new Set;return{emit(t){for(let n of Array.from(e))try{n(t)}catch{}},subscribe(t){return e.add(t),()=>{e.delete(t)}}}}import{randomUUID as $b}from"node:crypto";import Lo from"node:fs/promises";import ga from"node:path";import{setTimeout as Vb}from"node:timers/promises";var Ub={async mkdir(e,t){await Lo.mkdir(e,t)},async writeFile(e,t,n){await Lo.writeFile(e,t,n)},async rename(e,t){await Lo.rename(e,t)},async rm(e,t){await Lo.rm(e,t)}},Kb=new Set(["EACCES","EBUSY","EPERM"]),Jb=[10,20,40,80,160];async function Xb(e,t,n){for(let r of Jb)try{await e.rename(t,n);return}catch(o){if(!zb(o))throw o;await Vb(r)}await e.rename(t,n)}function zb(e){return e instanceof Error&&"code"in e&&typeof e.code=="string"&&Kb.has(e.code)}async function Bo(e,t,n=Ub){let r=ga.dirname(e),o=ga.basename(e),i=ga.join(r,`.${o}.${process.pid}.${$b()}.tmp`),s=!1;try{await n.mkdir(r,{recursive:!0}),await n.writeFile(i,t,"utf8"),await Xb(n,i,e),s=!0}finally{if(!s)try{await n.rm(i,{force:!0})}catch{}}}import{randomBytes as aE}from"node:crypto";import bt from"node:path";import{parse as cE}from"@babel/parser";import lE from"@babel/traverse";import{COMPONENT_I18N_FILE_SUFFIX as $o,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as Ef,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as uE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as dE,SiteEditMaterializationSchema as fE,parseComponentI18nResourcesJson as pE}from"@vcp-dev/contracts";var Sf=/#[0-9a-fA-F]{3,8}\b|\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\s*\(/i,bf=/\b(?:bg-black|bg-white|text-white|text-black)(?:\b|\/)/g,Wb=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke)-\[#(?:[0-9a-fA-F]{3,8})\](?:\/\d+)?/g,Hb=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*#[0-9a-fA-F]{3,8}[^'"]*['"]/g,Gb=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*rgba?\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,Yb=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,Zb=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,Qb=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*(?:oklch|lab|lch|hsla?)\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,qb=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*(?:oklch|lab|lch|hsla?)\([^)]+\)[^'"]*['"]/gi,eE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*color-mix\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,tE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*color-mix\([^'"]*['"]/gi,nE=/\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,rE=/var\(\s*--(?:_|private-|vcp-)[^)]+\)/gi,oE=/#[0-9a-fA-F]{3,8}\b|\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\s*\([^)]*\)/gi;function xr(e,t){let n=jo([...Ge(e,Wb),...Ge(e,Hb),...Ge(e,Gb),...Ge(e,t.includeRgbBackgroundImage?Yb:Zb),...t.includeExtendedColorFunctions?[...Ge(e,Qb),...Ge(e,qb)]:[]]),r=jo([...Ge(e,eE),...Ge(e,tE)]).filter(o=>t.colorMixPolicy==="always"||Sf.test(o));return n.push(...r.filter(o=>!n.includes(o))),t.rejectTailwindPalette&&n.push(...Ge(e,nE).filter(o=>!n.includes(o))),t.rejectAnyRawColorLiteral&&n.push(...Ge(e,oE).filter(o=>!n.includes(o))),{hardCodedSurfaceHits:jo(Ge(e,bf)),hardCodedSurfaceOccurrences:sE(e),rawColorHits:n,privateTokenHits:t.rejectPrivateTokens?jo(Ge(e,rE)):[]}}function Ge(e,t){return e.match(new RegExp(t.source,t.flags))??[]}var xf=160,iE=/((?:[a-z][a-z0-9-]*(?:\[[^\]]*\])?:)+)$/;function sE(e){let t=new RegExp(bf.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=
|
|
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>xf?`${m.slice(0,xf-1)}\u2026`:m})}return o}function jo(e){return[...new Set(e)]}var xa="components/site/generated",If="{{$INSTANCE}}",Vo=5,mE=/^[a-z][a-z0-9-]{0,48}$/,gE=/^[a-f0-9]{8}$/,vf=/\.tsx?$/,hE=/\.json$/,yE=/\.(?:tsx?|json)$/,xE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,SE=["react","react/","next","next/","lucide-react","react-i18next","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],ha=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),ya=lE,bE=typeof ya=="function"?ya:ya.default;function EE(e){let t=Array.isArray(e.manifest.files)?e.manifest.files:[];if(t.length>Ef)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=fE.safeParse(e.manifest);if(!r.success)return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab manifest failed schema validation."}};let o=PE(e.generatedRoot);if(!o)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Generated root must be ${xa}.`,path:e.generatedRoot}};if(!Pf(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=Rf(r.data.files),s=Rf(e.controlledFiles);if(!FE(i,s))return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Controlled file list must exactly match the manifest file templates."}};if(i.size>Ef)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>uE)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>dE?{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 IE(e){let t=EE(e);if(!t.ok)return t;let n=t.data.generatedRoot,r=Pf(e.manifest.instanceBaseName),o=Math.max(1,Math.min(Vo,e.maxAttempts??Vo));for(let i=0;i<o;i+=1){let s=AE(e.instanceNameGenerator?.()??aE(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=Tf(n,a),l=vE({manifest:e.manifest,generatedRoot:n,instanceName:a,instanceRoot:c,allowedExternalImports:e.allowedExternalImports??SE});if(!l.ok)return l;if(!await kE(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 Nf(e){let t=Math.max(1,Math.min(Vo,e.maxAttempts??Vo));for(let n=0;n<t;n+=1){let r=await IE({...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 vE(e){let t=[],n=new Set;for(let i of e.manifest.files){let s=kf({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=kf({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=CE(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 kE(e,t,n){if(await e(t))return!0;for(let r of n)if(await e(r.path))return!0;return!1}function kf(e){if(e.pathTemplate.split(If).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(If,e.instanceName),n=TE(t);return n?Tf(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||!yE.test(n)||xE.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 CE(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(hE.test(d.path)){if(d.path.endsWith($o)){let g=pE(d.content);if(!g.success)return nn("MATERIALIZATION_DATA_UNSUPPORTED",g.error.message,d.path);c.set(d.path,new Set)}else try{JSON.parse(d.content)}catch{return nn("MATERIALIZATION_DATA_UNSUPPORTED","Static prefab JSON file must contain valid JSON.",d.path)}continue}let p;try{p=cE(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=xr(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(!vf.test(d.path))continue;let p=s.get(d.path),m=null;if(bE(p,{ImportDeclaration(g){let S=Cf({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($o))){let C=RE({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=Cf({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=wf(g.node);S&&ha.has(S)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${S}.`,file:d.path},g.stop())},OptionalMemberExpression(g){let S=wf(g.node);S&&ha.has(S)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${S}.`,file:d.path},g.stop())},Identifier(g){g.isReferencedIdentifier()&&ha.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(!vf.test(n))return nn("MATERIALIZATION_ENTRY_INVALID","Static prefab entry must be a .ts/.tsx source module.",n);let l=s.get(n);if(!l)return nn("MATERIALIZATION_ENTRY_INVALID","Static prefab entry must resolve to a controlled source file.",n);if(!wE(l,r))return nn("MATERIALIZATION_EXPORT_MISSING","Static prefab entry does not declare the manifest export.",n);for(let[d,p]of c)if(p.size!==1)return nn("MATERIALIZATION_IMPORT_FORBIDDEN","Each component .i18n.json file must have exactly one same-name Client Component static importer.",d);return NE(n,a).size!==e.length?nn("MATERIALIZATION_ENTRY_INVALID","Every controlled source file must be reachable from the entry module.",n):{ok:!0,data:{kind:"static-prefab-materialization",instanceName:"",generatedRoot:xa,instanceRoot:"",entry:{path:"",export:{kind:"default"}},files:[]}}}function Cf(e){if(!e.source.startsWith("./")&&!e.source.startsWith("../"))return e.source.startsWith("@/components/site/generated/")?{allowed:!1}:{allowed:e.allowedExternalImports.some(o=>o.endsWith("/")?e.source.startsWith(o):e.source===o)};if(e.source.includes("\\")||e.source.includes("\0"))return{allowed:!1};let t=bt.posix.normalize(bt.posix.join(bt.posix.dirname(e.importer),e.source));if(t===e.instanceRoot||!t.startsWith(`${e.instanceRoot}/`))return{allowed:!1};let r=[t,`${t}.ts`,`${t}.tsx`,`${t}.json`,...["ts","tsx","json"].map(o=>`${t}/index.${o}`)].find(o=>e.filePaths.has(o));return r?{allowed:!0,internalPath:r}:{allowed:!1}}function RE(e){let t=bt.posix.dirname(e.importer),n=bt.posix.dirname(e.imported),r=bt.posix.basename(e.importer).replace(/\.tsx?$/,""),o=bt.posix.basename(e.imported).slice(0,-$o.length),i=`./${r}${$o}`;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 wE(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 NE(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 nn(e,t,n){return{ok:!1,error:{code:e,message:t,...n?{file:n}:{}}}}function PE(e){let t=Af(e);return t===xa?t:null}function AE(e){let t=e.trim().toLowerCase();return gE.test(t)?t:null}function Pf(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 mE.test(t)?t:null}function Af(e){if(!e||e.startsWith("/")||e.includes("\\"))return null;let t=bt.posix.normalize(e);return t==="."||t.startsWith("../")||t.includes("/../")||t.includes("//")?null:t}function TE(e){let t=Af(e);return!t||t!==e?null:t}function Tf(...e){return bt.posix.join(...e)}function Rf(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 FE(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function wf(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 ME}from"node:crypto";import Uo from"node:path";import{parse as va}from"@babel/parser";import OE from"@babel/traverse";import*as Lf from"@babel/types";import{COMPONENT_I18N_FILE_SUFFIX as ba,PageResourceArtifactSchema as DE,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as LE,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as BE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as jE,parseComponentI18nResourcesJson as $E}from"@vcp-dev/contracts";var Ea="{{$INSTANCE}}",VE=/\{\{\$PAGE_ROUTE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,UE=/\{\{\$PAGE_TITLE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,Ia="components/site/generated",KE=/\.(?:tsx?|json)$/,JE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,XE=["react","react/","next","next/","lucide-react","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],zE=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),Sa=OE,WE=typeof Sa=="function"?Sa:Sa.default;async function ka(e){let t=DE.safeParse(e.artifact);if(!t.success)return se("Page resource artifact failed contract validation.");let n=t.data,r=e.randomHex??(()=>ME(4).toString("hex")),o=Math.max(1,Math.min(e.maxAttempts??5,5)),i=oI(r());if(!i)return se("Random instance suffix must be 8 lowercase hex chars.");let s=`${iI(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=_f({materialization:w.materialization,packageInstanceId:s,routeByPage:a,titleByPage:c});if(!B.ok)return B;for(let re of B.files){let ne=Mf(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=_f({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=Mf(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(QE(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=GE(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?ka({...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=YE(u);return P||(u.sort((w,B)=>w.file.localeCompare(B.file)),{ok:!0,packageInstanceId:s,pages:l,files:u})}function _f(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:Ff(o.pathTemplate,e.packageInstanceId);if(!s)return se("Materialization path cannot be mapped into the package namespace.",o.pathTemplate);let a=HE(o.content,e.packageInstanceId,e.routeByPage,e.titleByPage);if(!a.ok)return a;let c=i&&e.pageTitle!==void 0?qE(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??Ff(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 HE(e,t,n,r){let o,i=e.replace(VE,(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(UE,(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(Ea,t);return a.includes("{{$PAGE_ROUTE:")||a.includes("{{$PAGE_TITLE:")||a.includes("{{$INSTANCE}}")?se("Materialization contains an unresolved placeholder."):{ok:!0,data:a}}function Ff(e,t){let n=`${Ia}/${t}`;if(e.split(Ea).length>2)return null;let o=e.replace(Ea,t),i=`${Ia}/${t}/`,s=o.startsWith(i)?o:`${n}/${o}`,a=Uo.posix.normalize(s);return a!==s||!a.startsWith(`${n}/`)||!KE.test(a)||JE.test(a)?null:a}function Mf(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 GE(e,t,n,r,o,i){let s=new Set(e.map(m=>m.file)),a=`${Ia}/${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(ba)&&!$E(m.content).success)return se("Materialization component i18n resources are invalid.",m.file);continue}try{let S=va(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=nI(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(WE(S,{Identifier(v){v.isReferencedIdentifier()&&zE.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=xr(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||!ZE(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=Df(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 Df(m,c))d.add(g);if(d.size!==e.length)return se("Every materialization file must be reachable from a package entry.");let p=rI(e,l,c);return p||{ok:!0}}function YE(e){if(e.length>LE)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>BE)return se("Page resource file exceeds the content byte limit.",n.file);t+=r}return t>jE?se("Page resource exceeds the aggregate content byte limit."):null}function ZE(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 QE(e,t){let n;try{n=va(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=Ko(i.init);if(s?.type!=="ObjectExpression")return null;for(let a of s.properties){if(a.type!=="ObjectProperty"||a.computed||!eI(a.key))continue;let c=Ko(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 qE(e,t,n){let r;try{r=va(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=Ko(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&&tI(u.key));if(!c||c.type!=="ObjectProperty")return se("Page materialization PAGE_SEO must declare a static title.",n);let l=Ko(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 Ko(e){let t=e;for(;t?.type==="TSAsExpression"||t?.type==="TSSatisfiesExpression"||t?.type==="TSNonNullExpression";)t=t.expression;return t&&Lf.isExpression(t)?t:null}function eI(e){return e.type==="Identifier"&&e.name==="path"||e.type==="StringLiteral"&&e.value==="path"}function tI(e){return e.type==="Identifier"&&e.name==="title"||e.type==="StringLiteral"&&e.value==="title"}function nI(e,t,n,r){if(t.startsWith(`@/${r}/`)){let s=t.slice(2),a=Of(s,n);return a?{allowed:!0,internalPath:a}:{allowed:!1}}if(!t.startsWith("."))return{allowed:XE.some(s=>s.endsWith("/")?t.startsWith(s):t===s)};if(t.includes("\\")||t.includes("\0"))return{allowed:!1};let o=Uo.posix.normalize(Uo.posix.join(Uo.posix.dirname(e),t)),i=Of(o,n);return i&&(i.startsWith(`${r}/`)||i.startsWith("app/"))?{allowed:!0,internalPath:i}:{allowed:!1}}function Of(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 rI(e,t,n){let r=new Set(e.map(o=>o.file));for(let o of e){if(!o.file.endsWith(ba))continue;let i=o.file.slice(0,-ba.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 Df(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 oI(e){return/^[a-f0-9]{8}$/.test(e)?e:null}function iI(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 sI,parseComponentI18nResourcesJson as aI,resolveSiteTextDirection as cI,SiteLocaleSchema as lI}from"@vcp-dev/contracts";var uI=["i18next","react-i18next"],dI="components/ui/site-locale-provider.tsx",fI="components/ui/component-i18n-provider.tsx",Bf="app/layout.tsx";async function Ra(e){let t=e.files.filter(p=>p.path.endsWith(sI));if(t.length===0)return{ok:!0};for(let p of["package.json",Bf,dI,fI])if(!await e.exists(p))return rn(`Target snapshot is missing required i18n host file: ${p}`);let n;try{n=JSON.parse(await e.readFile("package.json"))}catch{return rn("Target snapshot package.json is invalid.")}let r=jf(n)&&jf(n.dependencies)?n.dependencies:{},o=uI.filter(p=>typeof r[p]!="string"||r[p].trim().length===0);if(o.length>0)return rn(`Target snapshot must already declare: ${o.join(", ")}.`);let i=await e.readFile(Bf),s=Ca(i,"html","lang"),a=Ca(i,"html","dir"),c=Ca(i,"SiteLocaleProvider","locale"),l=lI.safeParse(s);if(!l.success||!a||!c||s!==c||a!==cI(l.data))return rn("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 rn("Target snapshot root layout is not wired to SiteLocaleProvider.");let u=l.data,d=u.split("-")[0];for(let p of t){let m=aI(p.content);if(!m.success)return rn(`Component i18n resource is invalid: ${p.path}.`);if(!Object.hasOwn(m.data,u)&&!Object.hasOwn(m.data,d))return rn(`Component i18n resource ${p.path} has no locale for ${u} or ${d}.`)}return{ok:!0}}function Ca(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 jf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function rn(e){return{ok:!1,message:e}}import{parse as AI}from"@babel/parser";import{HOME_PAGE_URL_PATH as TI}from"@vcp-dev/contracts";import{parse as jP}from"@babel/parser";import{parse as oP}from"@babel/parser";import{FormBlockIdSchema as sP,FormSpecV1Schema as aP}from"@vcp-dev/contracts";var Sr="components/site/generated/forms",cP=`${Sr}/vcp-form-runtime.tsx`,Jo="[A-Za-z0-9][A-Za-z0-9_-]{0,127}",lP=new RegExp(`^${Sr}/form-(${Jo})\\.spec\\.ts$`),uP=new RegExp(`^${Sr}/form-(${Jo})\\.tsx$`),dP=new RegExp(`^@/${Sr}/form-(${Jo})$`),fP=new RegExp(`(?:^|/)${Sr}/form-(${Jo})(?:\\.tsx?)?$`);var pP=Symbol("invalid-literal");import{createHash as hP}from"node:crypto";import{posix as xP}from"node:path";import{parse as bP}from"@babel/parser";import{FormSpecV1Schema as IP}from"@vcp-dev/contracts";var vP=Symbol("dynamic");import{parse as RP}from"@babel/parser";import{parse as pI}from"@babel/parser";var $f=["page","anchor","external","email","phone","group","file"],mI=["link","cta"],Uf=["description","badge","iconKey"],wa=["label","targetType","href","role","openInNewTab","nofollow","children",...Uf],gI=new Set(wa);function Er(e){return Array.isArray(e)?e:[]}function br(e){let t=e;return t?.type==="StringLiteral"&&typeof t.value=="string"?t.value:void 0}function hI(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function Vf(e){let t=e;return t?.type==="BooleanLiteral"&&typeof t.value=="boolean"?t.value:void 0}function Na(e){let t=[],n;try{n=pI(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 Er(n.program.body)){let s=i.type==="ExportNamedDeclaration"?i.declaration:i;if(s?.type==="VariableDeclaration")for(let a of Er(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 Er(r.elements).forEach((i,s)=>{let a=Kf(i,`NAV_ITEMS[${s}]`,t);a&&o.push(a)}),{items:o,diagnostics:t}}function Kf(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 Er(e.properties)){if(l.type!=="ObjectProperty"||l.computed)continue;let u=hI(l.key);u&&(r[u]=l.value)}let o=br(r.label),i=br(r.targetType);if(!o)return n.push({severity:"fatal",path:`${t}.label`,message:"label must be a static string"}),null;if(!i||!$f.includes(i))return n.push({severity:"fatal",path:`${t}.targetType`,message:`targetType must be one of ${$f.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 Uf){if(r[l]===void 0)continue;let u=br(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))gI.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 ${wa.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=[];Er(r.children.elements).forEach((u,d)=>{let p=Kf(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=br(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=br(r.role);if(c!==void 0&&(mI.includes(c)?s.role=c:n.push({severity:"warning",path:`${t}.role`,message:"role ignored: not link/cta"})),r.openInNewTab!==void 0){let l=Vf(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=Vf(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 yI}from"@babel/parser";function Ir(e){return Array.isArray(e)?e:[]}function Jf(e){let t=e;for(;t?.type==="TSAsExpression"||t?.type==="TSSatisfiesExpression";)t=t.expression;return t?.type==="ArrayExpression"?t:void 0}function Pa(e,t){let n=Xf(t);if(!n)return{status:"unsupported",source:e};let r;try{r=yI(e,{sourceType:"module",plugins:["typescript","jsx"],tokens:!0})}catch{return{status:"unsupported",source:e}}let o=[];for(let u of Ir(r.program.body)){let d=u.type==="ExportNamedDeclaration"?u.declaration:u;if(d?.type==="VariableDeclaration")for(let p of Ir(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=Jf(o[0]?.init);if(!i)return{status:"unsupported",source:e};if(Na(e).diagnostics.some(({severity:u})=>u==="fatal"))return{status:"unsupported",source:e};let a=[],c=u=>{let d=Ir(u.elements);for(let[p,m]of d.entries()){if(SI(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=xI(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 xI(e){if(e.type==="ObjectExpression")for(let t of Ir(e.properties)){if(t.type!=="ObjectProperty")continue;let n=t.key;if((n?.name??n?.value)==="children")return Jf(t.value)}}function Xf(e){let t=e.trim();return t.startsWith("/")?t==="/"?t:t.replace(/\/+$/,""):null}function SI(e,t){if(e.type!=="ObjectExpression")return!1;let n,r;for(let o of Ir(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"&&Xf(n??"")===t}import HP from"node:fs";import YP from"node:path";var bI=/^page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function vr(e){let t=e.map(r=>PI(r.path)),n=EI(t);return n?t.filter(r=>vI(n,r)).map(r=>({routeId:kI(n,r),entryFile:r})).sort((r,o)=>r.routeId.localeCompare(o.routeId)):[]}function Xo(e,t=""){let r=((e??"/").trim()||"/").split(/[?#]/,1)[0]||"/",o=r.startsWith("/")?r:`/${r}`,i=NI(t),s=i&&(o===i||o.startsWith(`${i}/`))?o.slice(i.length)||"/":o,a=s.startsWith("/")?s:`/${s}`;return a==="/"?"/":a.replace(/\/+$/,"")}function EI(e){return e.some(r=>r.startsWith("app/")&&!II(r))?"app":e.some(r=>r.startsWith("src/app/"))?"src/app":null}function II(e){return e.startsWith("app/_vcp/")||e.startsWith("src/app/_vcp/")}function vI(e,t){if(!t.startsWith(`${e}/`))return!1;let n=t.slice(t.lastIndexOf("/")+1);return bI.test(n)?t.slice(e.length+1,-n.length-1).split("/").filter(Boolean).every(r=>!r.startsWith("_")):!1}function kI(e,t){let n=t.slice(e.length+1).split("/").slice(0,-1).map(RI).filter(r=>!!r);return n.length===0?"/":`/${n.join("/")}`}function CI(e){return e.startsWith("(")&&e.endsWith(")")}function RI(e){return!e||e.startsWith("@")||e.startsWith("_")||CI(e)?null:wI(e)}function wI(e){return e.replace(/^\((?:\.|\.\.|\.\.\.)\)/,"")}function NI(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function PI(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}var _I="components/site/generated/",kr=[".tsx",".ts",".jsx",".js"];function zf(e){if(e.expectedUrlPath===TI)return{ok:!1,code:"HOME_PAGE_LOCKED",message:"The homepage source is protected from deletion."};let t=new Set(vr(Object.keys(e.files).map(p=>({path:p}))).map(p=>p.entryFile)),n=Object.entries(e.files).filter(([p,m])=>t.has(p.replace(/\\/g,"/"))?FI(m)===e.expectedUrlPath:!1);if(n.length===0)return{ok:!1,code:"ROUTE_NOT_FOUND",message:"No route uniquely matches PAGE_SEO.path."};if(n.length>1)return{ok:!1,code:"ROUTE_AMBIGUOUS",message:"Multiple routes match PAGE_SEO.path."};let[r]=n[0],o=OI(e.files);if(!o.ok)return o.error;let i=o.graph,s=jI(r,i),a=$I(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=Pa(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 FI(e){let t;try{t=AI(e,{sourceType:"module",plugins:["typescript","jsx"]})}catch{return null}for(let n of Aa(t.program.body)){let r=n.type==="ExportNamedDeclaration"?n.declaration:n;if(r?.type==="VariableDeclaration")for(let o of Aa(r.declarations)){let i=o.id;if(i?.type!=="Identifier"||i.name!=="PAGE_SEO")continue;let s=MI(o.init);if(s?.type!=="ObjectExpression")return null;for(let a of Aa(s.properties)){if(a.type!=="ObjectProperty"||a.computed)continue;let c=a.key,l=a.value;if((c?.name==="path"||c?.value==="path")&&l?.type==="StringLiteral"&&typeof l.value=="string")return l.value}return null}}return null}function Aa(e){return Array.isArray(e)?e:[]}function MI(e){let t=e;for(;t?.type==="TSAsExpression"||t?.type==="TSSatisfiesExpression"||t?.type==="ParenthesizedExpression";)t=t.expression;return t}function OI(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")||!DI(r))continue;let s=Jn(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(LI(c))continue;let l=wi(r,c),u=BI(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 DI(e){let t=e.toLowerCase();return kr.some(n=>t.endsWith(n))}function LI(e){return!!(/\.([a-z0-9]+)$/i.exec(e)&&!kr.some(n=>e.endsWith(n)))}function BI(e,t){let n=e.replace(/\\/g,"/");return(kr.some(o=>n.endsWith(o))?[n]:[...kr.map(o=>`${n}${o}`),...kr.map(o=>`${n}/index${o}`)]).find(o=>t.has(o))??null}function jI(e,t){let n=new Set,r=[...t.get(e)??[]];for(;r.length>0;){let o=r.pop();!o.startsWith(_I)||n.has(o)||(n.add(o),r.push(...t.get(o)??[]))}return n}function $I(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 VI}from"@vcp-dev/contracts";var UI={affectedCompositions:[]};function Qf(e){let t=null,n=new WeakMap;async function r(){return t??=KI(e),t}return{async prepareAppend(o){let i=await e.readIndex(),s=await e.stageAppend(Yf(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);Wf(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(Wf(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(Yf(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 Wf(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 KI(e){let t=await e.readIndex(),n=await Promise.all(t.undoIds.map(async o=>Hf(e,o))),r=await Promise.all(t.redoIds.map(async o=>Hf(e,o)));return{undo:n.reverse(),redo:r.reverse(),entryIds:[...t.entryIds],cursor:t.cursor}}async function Hf(e,t){let n=await e.readEntry(t),r=JI(n),o=r.provenance??UI;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 Gf(e,n,r.preSnapshots),postSnapshots:await Gf(e,n,r.postSnapshots)}}async function Gf(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(WI(r,o.blobName))).toString("utf8"):"";return{file:o.file,content:i,version:o.version,exists:o.exists,...o.sha256?{sha256:o.sha256}:{}}}))}function Yf(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=XI(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 JI(e){if(!ep(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:qf(t.provenance)}:{},preSnapshots:Zf(t.preSnapshots,"preSnapshots"),postSnapshots:Zf(t.postSnapshots,"postSnapshots")}}function XI(e){if(e.provenance!==void 0)return qf(e.provenance);if(e.composition)return{initiatingComposition:e.composition,affectedCompositions:[]}}function qf(e){let t=VI.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 Zf(e,t){return e.map((n,r)=>{if(!ep(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&&!zI(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 zI(e){return/^sha256:[0-9a-f]{64}$/.test(e)}function WI(e,t){let n=e.get(t);if(!n)throw new Error(`durable history blob is missing: ${t}`);return n}function ep(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import tp from"node:path";function _a(){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 rp(e,t,n){let r=[],o=new Set;for(let i of e.intents){let s=ZI(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=()=>HI(e);return e.mutex?e.mutex.runExclusive(t):t()}async function HI(e){let t=await rp(e.plan,e.overlay,e.exists);if(!t.ok)return{ok:!1,stage:"precheck",reason:t.reason,error:t,recoveryRequired:!1};let n=GI(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 Ta({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 Ta({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 Ta({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 np("swap",l,"Live state swap failed after durable publish.")}try{await e.finalizeCandidate?.(c)}catch(l){return np("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 GI(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 Ta(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:YI(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 np(e,t,n){return{ok:!1,stage:e,reason:n,error:t,recoveryRequired:!0}}function YI(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 ZI(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)||tp.isAbsolute(e))return{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`};let t=tp.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 Fa(e,t){let n=new Map(e);for(let r of t)n.delete(r);return n}function Ln(e,t){e.clear();for(let[n,r]of t)e.set(n,r)}function op(e,t){for(let n of t){if(n.exists===!1){e.delete(n.file);continue}e.set(n.file,n.content)}}function Ma(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 ip(e){return{path:e.path,code:e.code,message:e.message,...e.details?{details:JSON.parse(JSON.stringify(e.details))}:{}}}function QI(e){return e.map(t=>`${t.code} (${t.path}): ${t.message}`).join("; ")}var Cr=class extends Error{constructor(t){let n=t.map(ip);super(QI(n)),this.name="RouteBuildDiagnosticsError",this.diagnostics=n}};function sp(e,t){let n=t instanceof Error&&t.message?t.message:String(t);return t instanceof Cr?{routeId:e,message:n,diagnostics:t.diagnostics.map(ip)}:{routeId:e,message:n}}function Oa(e){return e.map(({routeId:t,message:n})=>`${t}: ${n}`).join("; ")}function ap(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 Wo,SiteEditCompositionContextSchema as qI,SiteEditCompositionSelectorSchema as ev}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 cp(e,t){throw new Pe("INVALID_COMPOSITION",e,{value:t})}function Ho(e){let t=qI.safeParse(e);return t.success?t.data:cp("Invalid SiteEditCompositionContext.",e)}function lp(e){let t=[],n=new Map,r=new Map;for(let l of e.compositions){let u=Ho(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=Wo(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=Ho(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=Wo(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=ev.safeParse(l);if(!u.success)return cp("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=Ho(l),d=Wo(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=Ho(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=Wo(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 cv=/^(?:src\/)?app\/.*\/?page\.[cm]?[jt]sx?$/,lv=["layout.tsx","layout.ts","layout.jsx","layout.js","layout.mjs","layout.cjs"],up=32,dp=256;function uv(e){return{expectedIndexDigest:e.digest,publishedIndexDigest:e.digest,publishedCursor:e.cursor,publishedCurrentId:e.currentId}}var fp={maxEntries:50,maxBytes:8*1024*1024};function dv(){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 Bo(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 fv(){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>fp.maxEntries||pv(e)>fp.maxBytes;)e.shift()}}function pv(e){return e.reduce((t,n)=>t+mv(n),0)}function mv(e){return pp(e.preSnapshots)+pp(e.postSnapshots)+gv(e.provenance)}function gv(e){return e?new TextEncoder().encode(JSON.stringify(e)).byteLength:0}function pp(e){return e.reduce((t,n)=>t+n.file.length+n.content.length,0)}function mp(e,t){return{key:tv(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 hv(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 Zo=class extends Error{constructor(t){super(t.reason),this.result=t}},on=class extends Error{constructor(t){super(Oa(t)),this.failedRoutes=t}};function gp(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 yv=/\.(?:[cm]?[jt]sx?)$/i,xv=/\.json$/i,Sv=/\.(?:css|scss|sass)$/i,bv=/\.mdx$/i,Ev=/\.ya?ml$/i;function Iv(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 vv(e){return{kind:e.isProxy?"component-proxy":"jsx-node",file:e.file,componentName:e.componentName,isProxy:e.isProxy}}function kv(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=Ep(await e.listFiles(r)),i=new Map(o.files.map(a=>[a.path,a]));for(let[a,c]of n)if(Cv(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 Cv(e,t){return t.length===0?!0:t.some(n=>e===n||e.startsWith(`${n}/`))}function Ep(e){return Array.isArray(e)?{files:e}:e}function Rv(e){if(!ov(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!==sv||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=rv(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(yv.test(e.path)){let t=ct({source:e.content,profile:Kt({filePath:e.path,source:e.content})});if(!t.ok)return{ok:!1,errorCode:"ast-error",message:t.diagnostic.message,details:{path:e.path}}}if(xv.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(Sv.test(e.path)){let t=hp({content:e.content,path:e.path,profile:"css"});if(!t.ok)return t}if(bv.test(e.path)){let t=hp({content:e.content,path:e.path,profile:"mdx"});if(!t.ok)return t}if(Ev.test(e.path))try{av(e.content)}catch(t){return{ok:!1,errorCode:"ast-error",message:`YAML parse failed: ${Fe(t)}`,details:{path:e.path}}}return{ok:!0}}function hp({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 xk,SiteEditPatchPlanSchema as Sk}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:Pm(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 Pm(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 iv,composeSiteEditRepeatInstanceKey as sv,getSiteEditSourceDeleteProtectionReason as av,isSiteEditTextSourcePath as cv,parseSiteEditRepeatInstanceKey as lv,SITE_EDIT_SOURCE_DELETE_CAPABILITY as uv,stripSiteEditRepeatInstanceKeys as $e}from"@vcp-dev/contracts";import{parse as dv}from"yaml";import qo 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 Fi from"@babel/traverse";import*as x from"@babel/types";import{createHash as Om}from"node:crypto";import*as Mc 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 Ri(e,t,n,r,o){return{ok:!1,source:e,diagnostic:Kt(t,n,r,o)}}var Am={"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:Mc.parse(t,{sourceType:"module",plugins:Am[n]})}}catch(r){return{ok:!1,source:t,diagnostic:Kt("parse-failed",`AST parse failed: ${r instanceof Error?r.message:String(r)}`)}}}function wi(e,t){return ct({source:e,profile:Oc(t.kind)})}function Ni(e,t){return ct({source:e,profile:Oc(t)})}function Oc(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 Tm from"@babel/parser";import*as hn from"@babel/types";import*as kt from"node:path";var Pi=[".tsx",".ts",".jsx",".js"],_m=Pi.map(e=>`/index${e}`);function Dc(e){let t=[];for(let n of e.program.body)hn.isImportDeclaration(n)&&typeof n.source.value=="string"&<(n.source.value)&&t.push(n.source.value),hn.isExportNamedDeclaration(n)&&n.source&&typeof n.source.value=="string"&<(n.source.value)&&t.push(n.source.value),hn.isExportAllDeclaration(n)&&typeof n.source.value=="string"&<(n.source.value)&&t.push(n.source.value);return Ai(e.program,t),t}function Ai(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"&<(r.value)&&t.push(r.value)}for(let r of Object.values(n))if(Array.isArray(r))for(let o of r)Ai(o,t);else r&&typeof r=="object"&&Ai(r,t)}function lt(e){return e.startsWith("./")||e.startsWith("../")||e.startsWith("@/")}function Ti(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 Fm(e,t){if(Pi.some(n=>e.endsWith(n))&&await t(e))return e;for(let n of Pi){let r=`${e}${n}`;if(await t(r))return r}for(let n of _m){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=Ti(e,t);try{if(!Mm(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 Fm(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 Mm(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:${Om("sha256").update(t).digest("hex")}`,ast:n.ast,imports:Dc(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=_i(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(_i(`${Dm(t)}/${e}`)):Xt(e):!1}function _i(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 Dm(e){let t=_i(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}var Lm=typeof Fi=="function"?Fi:Fi.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 Bm(e){return/^[A-Z]/.test(e)}function Bi(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 jc(e){return x.isJSXIdentifier(e.name)?e.name.name:x.isJSXMemberExpression(e.name)?$c(e.name):x.isJSXNamespacedName(e.name)?`${e.name.namespace.name}:${e.name.name.name}`:"unknown"}function $c(e){return x.isJSXIdentifier(e.object)?`${e.object.name}.${e.property.name}`:x.isJSXMemberExpression(e.object)?`${$c(e.object)}.${e.property.name}`:e.property.name}function jm(e){return e.split(".")[0]??e}function $m(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 Vm(){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 Um(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)&>(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)&>(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 Km(e,t,n){e.set(t,{resolved:!0,value:n})}function ji(e,t){e.set(t,{resolved:!1})}function Vc(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=Vc(r.value,n.path);return o.kind==="resolved"?o.value:void 0}if(x.isCallExpression(e))return Kc(e,t)??void 0}function Uc(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"?Vc(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 Mi(e,t,n,r,o,i){return{file:e,componentName:t,elements:n,regions:r,ordinalTracker:Vm(),parentStack:[],valueScopes:i,importMap:o}}function Di(e,t,n){for(let r of e)for(let o of r.declarations){for(let s of gt(o.id))ji(n,s);if(!x.isIdentifier(o.id)||!o.init||!x.isExpression(o.init))continue;let i=Wt(o.init,t);i!==void 0&&Km(n,o.id.name,i)}}function Jm(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 Xm(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=Uc(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?Kc(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=Uc(o.value.expression,t,n);if(i!==void 0&&typeof i!="string"&&typeof i!="number"){r.push({name:o.name.name,value:Lc(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:Lc(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 Kc(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=Hm(r.key);if(!o)return null;n.push(o)}return n}if(x.isCallExpression(e)){let n=Wm(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 Wm(e){return x.isIdentifier(e)?e.name:x.isMemberExpression(e)&&x.isIdentifier(e.property)?e.property.name:null}function Hm(e){return x.isIdentifier(e)?e.name:x.isStringLiteral(e)?e.value:null}function Gm(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 Ym(e,t){for(let n of t){let r=Gm(e,n);if(r)return r}return null}function Zm(e){return x.isJSXIdentifier(e.name)?e.name.name:null}function Lc(e){return e===null?"null":typeof e=="boolean"?e?"true":"false":JSON.stringify(e)}function Qm(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 Oi(e){return x.isArrowFunctionExpression(e)||x.isFunctionExpression(e)}function qm(e){return e==="render"||e==="itemRender"||e==="rowRender"||e==="children"}function eg(e){return e==="empty"||e==="emptyRender"||e==="loading"||e==="loadingRender"||e==="error"||e==="errorRender"||e==="fallback"||e==="headerRender"||e==="footerRender"}function Bc(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(Bi(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))ji(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 Jc(e.body.body,t,n)}finally{t.valueScopes.pop()}}finally{t.valueScopes.pop()}}function Jc(e,t,n){let r=[];for(let o of e){if(x.isVariableDeclaration(o)){let i=t.valueScopes[t.valueScopes.length-1];i&&Di([o],t,i);continue}r.push(...Li(o,t,n))}return r}function Li(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):Li(e.consequent,t,n),o=e.alternate?x.isBlockStatement(e.alternate)?zt(e.alternate.body,t,n):Li(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 Jc(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 tg(e,t,n,r){let o=Ym(e.openingElement,["items","dataSource","data"]),i={key:t,tag:jc(e.openingElement)};n.parentStack.push(i);try{for(let s of e.openingElement.attributes){if(!x.isJSXAttribute(s))continue;let a=Zm(s);if(!a||!x.isJSXExpressionContainer(s.value))continue;let c=s.value.expression;if(!x.isJSXEmptyExpression(c)){if(qm(a)&&Oi(c)){let l=Gr(c,n,r),u=Bc(o,c,r,n);Yr(n,"repeat-region",t,s,l,u?[u]:void 0);continue}if(eg(a)){let l=Oi(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)||!Oi(s.expression))continue;let a=Gr(s.expression,n,r),c=Bc(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=jc(e.openingElement);if(r==="Fragment"||Bi(e))return qr(e.children,t,n),null;let o=t.parentStack[t.parentStack.length-1]??null,i=o?.key??null,s=Bm(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=Xm(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),tg(e,u,t,n),(!s||e.children.length>0)&&(t.parentStack.push({key:u,tag:r}),ng(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(Bi(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 ng(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 rg(e){return e==="&&"||e==="||"||e==="??"}function eo(e,t,n){if(x.isJSXEmptyExpression(e))return[];let r=Qm(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)&&rg(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 og(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=og(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 Xc(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=Um(r);Lm(r,{"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression"(d){let p=$m(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;Di(Jm(r.program.body),Mi(t,p,i,s,l,[S]),S);let C=new Map;for(let B of m.params)for(let re of gt(B))ji(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)&&Di([B],Mi(t,p,i,s,l,[S,C]),C)}let w=Mi(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 $i(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 zc(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}=Xc(N.module);for(let D of X.elements.values())if(D.importedFrom&<(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,$i(ne,P,Z,te.diagnostic.path)))}if(l.set(P,X),!(B>=i))for(let D of M){if(ig(D))continue;let Z=await Xr(P,D,r);if(!Z.ok){zn(D,P)||m(to(Z.diagnostic,re,$i(ne,P,D,Z.diagnostic.path)));continue}let te=Z.path;if(S.has(te)||Xt(te))continue;let he=$i(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=sg(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 ig(e){return/\.(?:css|scss|sass|less)(?:\?.*)?$/i.test(e)}function sg(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 Wc(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}),Hc(i,r,o,t,e)}}return{nodes:t,rootKeys:[...e.rootKeys]}}function Hc(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}),Hc(s,t,n,r,o))}}import{isSiteEditRuntimeContainerTag as ag,isSiteEditRuntimeVoidElementTag as cg}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 lg(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&&cg(u),m=d||ag(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 Gc(e,t){let n=new Map;for(let r of e.nodes.keys())n.set(r,lg(r,e,t));return n}import{createHash as fs}from"node:crypto";import ss from"@babel/traverse";function Vi(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 Oh}from"node:crypto";import Nl from"node:path";import*as xo from"@babel/parser";import ts from"@babel/generator";import ns from"@babel/traverse";import*as Pt from"@babel/types";import Ui from"@babel/traverse";var wt=typeof Ui=="function"?Ui:Ui.default,no=new WeakMap,Yc=new WeakMap;function yt(e,t){let n=wi(e,t);if(!n.ok)return Ri(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}}:Ri(e,r.diagnostic.code,r.diagnostic.message,t.kind,r.diagnostic.details)}function ie(e,t){return t.kind==="jsx-node"?el(e,t):t.kind==="jsx-attribute"?gg(e,t):t.kind==="value"?hg(e,t):t.kind==="expression"?yg(e,t):t.kind==="directive"?xg(e,t):t.kind==="export"?Sg(e,t):{ok:!1,diagnostic:Kt("unsupported-syntax",`Unsupported locator kind: ${t.kind}`)}}function el(e,t){return t.strategy==="source-range"?ug(e,t):dg(e,t)}function ug(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&&!Ag(r.path,t.expectedIdentity)?ve("jsx-node","locator-miss","JSX node failed expected identity validation"):{ok:!0,match:r}}function dg(e,t){if(t.structuralPath===""){let r=pg(e,t.component);if(r){let o=mg(r);if(o)return o}}let n=null;return wt(e,{JSXElement(r){if(Gn(r)!==t.component||Ji(r)!==t.structuralPath)return;let i=Ee("jsx-node",r);i&&(n=i,r.stop())},JSXFragment(r){if(Gn(r)!==t.component||Ji(r)!==t.structuralPath)return;let i=Ee("jsx-node",r);i&&(n=i,r.stop())}}),!n&&t.expectedRange&&(n=fg(e,t.component,t.expectedRange)),n?{ok:!0,match:n}:ve("jsx-node","locator-miss","JSX node not found for structural-path locator")}function fg(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 pg(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 mg(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 gg(e,t){let n=el(e,t.element);if(!n.ok)return n;let s=n.match.path.get("openingElement").get("attributes").find(c=>Tg(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 hg(e,t){let n=bg(e,t);if(!n.ok)return n;let r=Eg(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 yg(e,t){let n=null;return wt(e,{Identifier(r){if(!Rg(r))return;let o=Qc(r);if(!o||!qc(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=Qc(r);if(!o||!qc(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 xg(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 Sg(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=Xi(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=Xi(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 '${Pg(t)}' not found`)}function bg(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=Xi(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 Eg(e,t){let n=Ki(e);for(let o of t){if(n=Ki(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=>_g(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=Ki(n);let r=Ee("value",n);return r?{ok:!0,match:r}:ve("value","locator-miss","Resolved value has no source range")}function Ki(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 Ji(e){let t=[],n=e,r=e.node;for(;n;){if(n.isJSXElement()){if(!ro(n.node)){let o=tl(n.node.openingElement);o&&(/^[A-Z]/.test(o)?t.unshift(`component:${o}#${Zc(n,o)}`):t.unshift(`${o}#${Zc(n,o)}`))}}else n.isJSXFragment()&&n.node===r&&t.unshift("fragment");if(!n.parentPath||Cg(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 Zc(e,t){let n=Ig(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(tl(s.node.openingElement)===t){if(i.set(s.node,o),s.node===e.node)return o;o++}return i.get(e.node)??0}function Ig(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=Yc.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 Yc.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()&&vg(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 vg(e){return e==="&&"||e==="||"||e==="??"}function tl(e){return e.name.type==="JSXIdentifier"?e.name.name:e.name.type==="JSXMemberExpression"?kg(e.name):null}function kg(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 Cg(e){return!!(e.isFunctionDeclaration()||e.isFunctionExpression()||e.isArrowFunctionExpression())}function Rg(e){return!(!e.isExpression()||e.parentPath?.isMemberExpression({property:e.node}))}function Qc(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 qc(e,t){return e.base===t.base&&wg(e.path,t.path??[])}function wg(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 Ng(e){return e.key.type==="Identifier"?e.key.name:e.key.type==="StringLiteral"?e.key.value:null}function Pg(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 Ag(e,t){return Gn(e)!==t.component?!1:Ji(e)===t.structuralPath}function Tg(e,t){return!e.isJSXAttribute()||e.node.name.type!=="JSXIdentifier"?!1:e.node.name.name===t}function Xi(e,t){return e.get("declarations").find(n=>!n.isVariableDeclarator()||n.node.id.type!=="Identifier"?!1:n.node.id.name===t)}function _g(e,t){return e.isObjectProperty()?Ng(e.node)===t:!1}import zi from"@babel/generator";var Fg=typeof zi=="function"?zi:zi.default;function Mg(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 Og(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 Dg(e,t){return e.split(`
|
|
3
|
+
`).map(r=>Og(r,t)).join(`
|
|
4
|
+
`)}function oo(e){let{ast:t,source:n}=e;try{let r=Mg(n),i=Fg(t,{comments:!0,jsescOption:{minimal:!0,quotes:"single"}},n).code;return r!=="2"&&(i=Dg(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 rl from"@babel/parser";import{arrayExpression as Lg,booleanLiteral as Bg,identifier as jg,jsxAttribute as $g,jsxExpressionContainer as Vg,jsxIdentifier as Ug,nullLiteral as Kg,numericLiteral as Jg,objectExpression as Xg,objectProperty as zg,stringLiteral as ol}from"@babel/types";function nl(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:nl(e),afterSourceHash:nl(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=Ni(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 Wg(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 il(e,t,n){let r=Wg(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 sl(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"?ol(e):typeof e=="number"?Jg(e):typeof e=="boolean"?Bg(e):e===null?Kg():Array.isArray(e)?Lg(e.map(t=>vn(t))):Xg(Object.entries(e).map(([t,n])=>zg(jg(t),vn(n))))}function Hg(e){return typeof e=="string"?ol(e):Vg(vn(e))}function so(e,t){return $g(Ug(e),Hg(t))}function al(e,t){try{let r=rl.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=Gg(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=Yg(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 Gg(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=Zg(r.get("expression"));o.length>0&&t.push(...o)}}return t}function Yg(e,t){let n=e.match(/^\s*/)?.[0]??"",r=e.match(/\s*$/)?.[0]??"";return`${n}${t.trim()}${r}`}function Zg(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 Wi}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?(Qg(o.match.path),de(r.ast,t,{kind:"remove-node",target:"jsx-node",inverse:"insert-child"})):{ok:!1,source:t,diagnostic:o.diagnostic}}function Qg(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(Wi());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(Wi());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(Wi());return}e.remove()}import{cloneNode as lh}from"@babel/types";import Hi from"@babel/traverse";import*as U from"@babel/types";var qg=typeof Hi=="function"?Hi:Hi.default;function ze(e,t,n,r){if(!e.ok)return e;let o=Xe(n);if(!o)return e;let i=eh(t,o,r);return i?{...e,selectionRef:i}:e}function eh(e,t,n){let r=th(e,t);if(!r)return;let o=n.sourceLocator?cl(n.sourceLocator):void 0,i=n.targetParentLocator?cl(n.targetParentLocator):void 0,s=n.file??i?.file??o?.file,a=n.component??rh(r)??i?.component??o?.component;if(!(!s||!a))return{key:Jn(s,a,oh(r))}}function cl(e){return e.strategy==="structural-path"?{file:e.file,component:e.component,structuralPath:e.structuralPath}:e.expectedIdentity}function th(e,t){let n=null;return qg(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)?ll(e.children):e;if(U.isJSXFragment(e))return ll(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 ml(e)?nh(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 ll(e){for(let t of e){let n=Xe(t);if(n)return n}return null}function nh(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=ul(t.consequent);if(n)return n;let r=t.alternate?ul(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 ul(e){return U.isBlockStatement(e)?Zn(e.body):Zn([e])}function rh(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 dl=new WeakMap,fl=new WeakMap,Gi=new WeakMap;function oh(e){let t=dl.get(e.node);if(t!==void 0)return t;let n=[],r=e;for(;r;){if(r.isJSXElement()){let i=ih(r);i&&n.unshift(i)}r=r.parentPath}let o=n.join("/");return dl.set(e.node,o),o}function ih(e){let t=Yi(e.node.openingElement.name);return!t||Cn(e.node)?null:/^[A-Z]/.test(t)?`component:${t}#${pl(e,t)}`:`${t}#${pl(e,t)}`}function pl(e,t){let n=sh(e);if(!n)return 0;let r=Gi.get(n.node)?.get(t)?.get(e.node);if(r!==void 0)return r;let o=Gi.get(n.node);o||(o=new Map,Gi.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(Yi(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 sh(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=fl.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 fl.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())&&ml(e.node)){let t=e.get("arguments"),n=Array.isArray(t)?t[0]:void 0;return n?ah(n):[]}return[]}function ah(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 ml(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=Yi(e.openingElement.name);return t==="Fragment"||t==="React.Fragment"}function Yi(e){return U.isJSXIdentifier(e)?e.name:U.isJSXMemberExpression(e)?gl(e):U.isJSXNamespacedName(e)?`${e.namespace.name}:${e.name.name}`:null}function gl(e){return`${U.isJSXIdentifier(e.object)?e.object.name:gl(e.object)}.${e.property.name}`}function Nt(e,t){if(t.parentPath===e&&t.listKey==="children"&&hl(e))return e;if(!t.parentPath||t.listKey!=="children")return null;let n=t.parentPath;if(!hl(n))return null;let r=n;for(;r&&r!==e;){if(!ch(r)||r.listKey!=="children")return null;r=r.parentPath}return r===e?n:null}function hl(e){return e.isJSXElement()||e.isJSXFragment()}function ch(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=al(t,r.jsx);if(!u.ok)return u.result;let d=lh(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 yl from"@babel/parser";import{cloneNode as uh}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=dh(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=uh(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 dh(e,t){try{let r=yl.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 fh,nullLiteral as Zi}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=fh(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");ph(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 ph(e){if(e.parentPath?.isConditionalExpression()&&(e.key==="consequent"||e.key==="alternate")){e.replaceWith(Zi());return}if(e.parentPath?.isArrowFunctionExpression()&&e.key==="body"){e.replaceWith(Zi());return}if(e.parentPath?.isReturnStatement()&&e.key==="argument"){e.replaceWith(Zi());return}e.remove()}import*as xl from"@babel/parser";import{cloneNode as mh,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=gh(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=mh(l.node,!0);hh(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 gh(e,t){try{let r=xl.parse(`const __VD_EXPR__ = <>{${t}}</>;`,{sourceType:"module",plugins:["jsx","typescript"]}).program.body[0],o=r?.type==="VariableDeclaration"?r.declarations[0]?.init:null,i=o?.type==="JSXFragment"?o.children[0]:void 0;return i?.type!=="JSXExpressionContainer"?{ok:!1,result: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 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()}function uo(e){let{source:t,locator:n,props:r}=e,o=ke(t,"jsx-node");if(!o.ok)return o.result;let i=il(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=sl(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 yh,identifier as Qn,importDeclaration as xh,importDefaultSpecifier as Sh,importNamespaceSpecifier as bh,importSpecifier as Eh,isImportDefaultSpecifier as Sl,isImportNamespaceSpecifier as bl,isImportSpecifier as El,stringLiteral as Ih}from"@babel/types";function Pn(e){let{source:t,moduleSpecifier:n,imports:r}=e,o=r.findIndex(C=>!Th(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=Nh(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=_h(C,v);return P?[P]:[]}))),d=i.imports.filter(C=>!u.has(wl(C)));if(d.length===0)return Yn(t,t,{kind:"add-import",target:"import",inverse:"remove-import"});let p=Ph(c.body),m=d.find(C=>p.has(qi(C)));if(m)return V(t,"unsupported-syntax",`Import local binding already exists: ${qi(m)}`);let g=wh(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(!Cl(vl(C)))return V(t,"unsupported-syntax","Unsupported import specifier combination");let v=l.find(P=>vh(P,C));if(v)kh(v,C);else{let P=xh(Il(C),Ih(n));Ah(c.body,P),l.push(P)}}return de(a,t,{kind:"add-import",target:"import",inverse:"remove-import"})}function vh(e,t){return e.importKind==="type"?!1:Cl(Rh(Ch(e),vl(t)))}function kh(e,t){let n=!1,r=new Set(e.specifiers.map(o=>es(o)));for(let o of Il(t)){let i=es(o);r.has(i)||(e.specifiers.push(o),r.add(i),n=!0)}return Rl(e.specifiers),{changed:n}}function Il(e){let t=e.map(n=>{switch(n.kind){case"named":return Eh(n.local?Qn(n.local):Qn(n.imported),Qn(n.imported));case"default":return Sh(Qn(n.local));case"namespace":return bh(Qn(n.local));default:return n}});return Rl(t),t}function vl(e){let t=kl();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 Ch(e){let t=kl();for(let n of e.specifiers)Sl(n)?t.defaultLocals.add(n.local.name):bl(n)?t.namespaceLocals.add(n.local.name):t.hasNamed=!0;return t}function kl(){return{defaultLocals:new Set,hasNamed:!1,namespaceLocals:new Set}}function Rh(e,t){return{defaultLocals:new Set([...e.defaultLocals,...t.defaultLocals]),hasNamed:e.hasNamed||t.hasNamed,namespaceLocals:new Set([...e.namespaceLocals,...t.namespaceLocals])}}function Cl(e){return e.defaultLocals.size>1||e.namespaceLocals.size>1?!1:!(e.hasNamed&&e.namespaceLocals.size>0)}function Rl(e){let t=[...e.filter(n=>Sl(n)),...e.filter(n=>bl(n)),...e.filter(n=>El(n))];e.splice(0,e.length,...t)}function wh(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 Nh(e){let t=new Map,n=new Map;for(let r of e){let o=wl(r);if(t.has(o))continue;let i=qi(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 Ph(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(yh(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 Ah(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 Th(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 wl(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 qi(e){return e.kind==="named"?e.local??e.imported:e.local}function _h(e,t){return e.importKind==="type"||El(t)&&t.importKind==="type"?null:es(t)}function es(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=>!Mh(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=>Fh(u,d))),l.specifiers.length===0&&a.body.splice(c,1),de(s,t,{kind:"remove-import",target:"import",inverse:"add-import"}))}function Fh(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 Mh(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 Dh=typeof ts=="function"?ts:ts.default;function os(e){let t=Ml(e);if(t)return{ok:!1,error:t};let n=e.projection,r=is(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:Pl(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(Vh(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=Pl(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 Pl(e){let t=$h(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 _l(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 ns=="function"?ns:ns.default)(t,{ExportDefaultDeclaration(i){let s=i.get("declaration"),a=Lh(i,s);if(a){if(a.isArrowFunctionExpression()&&!a.get("body").isBlockStatement()){let c=a.get("body");c.replaceWith(Al(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(Al(l.node,n,e.placement,e.replaceOriginal===!0)),r=!0,c.stop())}}),r&&i.stop()}}}),r?{ok:!0,source:Dh(t,{}).code}:{ok:!1,source:e.source,diagnostic:{message:"Route default return boundary could not be resolved."}}}function Lh(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 Al(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 Fl(e){let t=Ml(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=Ol(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=rs(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||!jh(e.targetPlacement.composition,e.composition))return{ok:!1,error:{code:"CROSS_PAGE_MOVE_UNSUPPORTED",message:"Page-unit move across routes or composition templates is not supported.",diagnostics:[]}};if(e.targetPlacement.documentVersion!==e.expectedDocumentVersion)return{ok:!1,error:{code:"VERSION_STALE",message:"Page-unit target placement belongs to a different document version.",diagnostics:[{code:"DOCUMENT_VERSION_STALE",message:"Page-unit target placement belongs to a different document version."}]}};let c=is(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=rs(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 Tl("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=rs(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?Tl("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 Tl(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 Ml(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&&!Bh(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 Bh(e,t){return e.routeId===t.routeId&&e.effectiveTemplateId===t.effectiveTemplateId}function jh(e,t){return e.routeId===t.routeId&&e.templateId===t.effectiveTemplateId}function $h(e,t){let n=Nl.posix.dirname(e),r=t.replace(/\.(tsx|ts|jsx|js)$/,""),o=Nl.posix.relative(n,r);return o=o.replace(/\\/g,"/"),o.startsWith(".")||(o=`./${o}`),o}function rs(e){return{kind:"jsx-node",strategy:"source-range",sourceRange:e}}function yo(e,t,n){return t==null||n==null?null:`sha256:${Oh("sha256").update(e.slice(t,n)).digest("hex")}`}function Vh(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 Uh=typeof ss=="function"?ss:ss.default;function Ll(e){if(!e.ast)return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","SourceGraph entry AST is required",{reason:"parsed-ast-required"})]);let t=Yh(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=Qh(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=qh(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 Dl(e,t,"virtual-route-root");if(ey(r,t))return ut(e,[Oe("INDIRECT_RETURN_ONLY","Route default export only returns through an indirect function boundary")]);if(ty(r,t)||ny(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=as({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=us(r),s=as({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(oy(e.source,r,s))return Dl(e,t,"starter-placeholder");let a=as({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(ry(r))return ut(e,[Oe("UNSUPPORTED_PAGE_SHAPE","Route default export contains an unsupported JSX shape")]);let o=sy({input:e,source:e.source,expression:r});return So(e,t,o,{kind:"virtual-route-root",sourceKind:"atomic-expression"})}function is(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 Ol(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 Bl(e){return e.ok?Kh(e.projection):Jh(e.projection)}function Kh(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)=>jl(e,u,S,C,e.container.placementKey)),p=d.filter(({member:S})=>S.isBusinessMember).map(({sourceMember:S})=>zh(l,S,u.independent)),m=d.length>0?d:[{sourceMember:{key:`source:${l}:empty`,kind:e.container.kind==="starter-placeholder"?"starter-placeholder":"null-return",containerKey:e.container.placementKey,label:"empty-page",sourceFile:e.entryFile,isAtomic:!0},member:null}];r.set(l,m.map(({sourceMember:S})=>S)),o.set(l,p);let g=m[0]?.sourceMember.key??l;n.push({key:l,containerKey:g,businessMemberKeys:p.map(S=>S.key),isMultiMember:u.memberCount>1})}let i=[...r.values()].flat(),s=[...o.values()].flat(),a=i[0]?.key??null,c=e.placements.map(l=>({kind:"page-composition",placementKey:l.placementKey,documentVersion:e.documentVersion,composition:e.composition,placementUnitKey:l.placementUnitKey,relation:l.relation}));return{status:"supported",version:e.version,composition:e.composition,container:Xh(e,a),sourceMembers:i,businessMembers:s,placementUnits:n,placements:c}}function Jh(e){let t=e.diagnostics.map(Wh);return{status:"unsupported",version:e.version,composition:e.composition,reason:Hh(e.diagnostics),diagnostics:t}}function Xh(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 jl(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)=>jl(e,t,a,c,i))]}function zh(e,t,n){return{key:`business:${e}:${t.key}`,sourceMemberKey:t.key,containerKey:e,label:t.label,isIndependent:n}}function Wh(e){return{code:Gh(e),message:e.message}}function Hh(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 Gh(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 Yh(e){let t=null;return Uh(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=Zh(o.path);i&&(t=i,n.stop())}}),t}function Zh(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 Qh(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 qh(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 ey(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 ty(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 ny(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 ry(e){return e.isJSXSpreadChild()}function oy(e,t,n){return e.includes("DESIGN_PLAN_REPLACE_ME")&&t.isJSXElement()&&n.length>0&&ls(t)}function ls(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(!ls(t))return!1;continue}if(t.isJSXElement()&&!ls(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:ds(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({...us(o,i?.members),sourceRange:Qe(r.node.loc),parentSourceRange:Qe(e.node.loc)});continue}if(o.isJSXSpreadChild()){n=!0;continue}t.push({memberKey:ds(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()&&$l(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({...us(r,o?.members),parentSourceRange:Qe(e.node.loc)})}}return{members:t,unsupported:n}}function us(e,t){let n=e.isJSXElement()&&Tn(e)?t??Tt(e).members:[],r=e.isJSXElement()&&!Tn(e)&&!$l(e);return{memberKey:ds(e.node.type,e.node.start,e.node.end),kind:"jsx-element",nodeType:e.node.type,sourceRange:Qe(e.node.loc),businessMemberCount:r?1:Vl(n),parentSourceRange:Qe(e.parentPath?.node.loc),children:n,isBusinessMember:r,label:iy(e)}}function $l(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 iy(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 Vl(e){return e.reduce((t,n)=>t+n.businessMemberCount,0)}function Eo(e){return e.length===0?0:Math.max(1,Vl(e))}function as(e){let t=Qe(e.containerPath.node.loc),n=Kl(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 sy(e){let t=Qe(e.expression.node.loc),n=Kl(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=ay(e,n,o),s=Vi(i),a={status:"supported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,defaultExportName:Jl(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 ay(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?cs(e.source,p):null,relation:l,containerSourceRange:S,containerSourceHash:S?cs(e.source,S):null,anchorSourceRange:m,anchorSourceHash:m?cs(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 Dl(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=Vi([i]),a={status:"supported",composition:e.composition,route:e.route,entryFile:e.entryFile,version:e.version,documentVersion:e.version,defaultExportName:Jl(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 Ul([e.route,e.entryFile,String(e.version),t,n,r?`${r.startLine}:${r.startColumn}-${r.endLine}:${r.endColumn}`:"no-range"])}function ds(e,t,n){return Ul(["member",e,String(t??-1),String(n??-1)])}function Ul(e){return`pc_${fs("sha256").update(e.join("\0")).digest("hex").slice(0,24)}`}function Kl(e,t,n){return t==null||n==null?null:`sha256:${fs("sha256").update(e.slice(t,n)).digest("hex")}`}function cs(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:${fs("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 Jl(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 ly(e){return e==="api-field"||e==="cms-field"||e==="i18n-message"||e==="config-entry"}var uy=160;function Xl(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 zl(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=Zl(g.textSegments,s),P=Ql(e,t,g,C,v),w=v?py(v):void 0,B=my(i,v),re=g.textSegments.map(M=>({index:M.index,value:M.value,editable:ql(M,C,s?.get(M.index)??null),source:o.get(M.index)??null})),ne=Gl(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:Hl(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 Wl(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=Zl(c.textSegments,i);return{composition:a,key:e,tag:c.tag,componentName:c.componentName,sourceFile:c.sourceFile,sourceLocator:Hl(c),label:c.tag,capabilities:Ql(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:ql(p,u,i?.get(p.index)??null),source:m?{kind:m.kind}:null}}),boundaryKind:c.boundaryKind,isOpaque:c.isOpaque,ancestors:Gl(c,t)}}function Hl(e){return{sourceFile:e.sourceFile,componentName:e.componentName,openingElementRange:dy(e.sourceRange),structuralPath:e.identity.structuralPath,...fy(e.textSegments)}}function Gl(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 dy(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}function fy(e){let t=e.map(n=>n.value.trim()).filter(Boolean).join(" ").replace(/\s+/g," ").trim();return t?{textPreview:t.slice(0,uy)}:{}}function Yl(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 Zl(e,t){if(!t)return null;for(let n of e){let r=t.get(n.index);if(r)return r}return null}function Ql(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&&eu(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 ql(e,t,n){return!e.editable||!t.canUpdateText?!1:n?eu(n.editMode):!0}function eu(e){return e==="direct"||e==="proxy"||e==="upstream"}function py(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 my(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}:ly(t.finalSource.kind)?{kind:"external-entry",file:t.finalSource.file,isProxy:!1,displayPath:t.finalSource.displayPath,sourceType:t.finalSource.externalSource?.sourceType,sourceId:t.finalSource.externalSource?.sourceId}:{kind:"value-path",file:t.finalSource.file,isProxy:t.finalSource.file!==e.file,displayPath:t.finalSource.displayPath}:{kind:e.kind==="route-export"?"route-export":"jsx-node",file:e.file,isProxy:e.isProxy}}function tu(e){let{key:t,element:n,graph:r,provenances:o}=e,i=hy(t,n,r),s=i?.tag??(Gt(n.tag)?n.tag:n.componentName),a=i?.identity.key??nu(n,r)??t,c=Sy(i),l=by(t,n,r,o,i),u=gy(t,n,r,o,a);return{componentName:s,instanceKey:a,templateOwner:xy(i??n,s),...c.length>0?{variantKeys:c}:{},...l.length>0?{slotKeys:l}:{},editableStrategy:u,impactScope:Ey(u),alternativeStrategies:Iy(u)}}function gy(e,t,n,r,o){for(let i of r.values())if(i?.editMode==="upstream")return"upstream";return ps(e,n)?"instance":!Gt(t.tag)&&t.sourceFile!==n.routeId&&o!==e?"template":"instance"}function nu(e,t){if(Gt(e.tag))return e.identity.key;let n=[...t.elements.values()].filter(r=>r.importedFrom===e.sourceFile&&yy(r,e.componentName));return n.length!==1?null:n[0].identity.key}function hy(e,t,n){if(Gt(t.tag))return t;let r=ps(e,n);if(r)return r;let o=nu(t,n);return o?n.elements.get(o)??null:null}function yy(e,t){return e.exportName===t||e.tag===t||e.exportName==="default"}function xy(e,t){return Gt(e.tag)&&e.importedFrom?`${e.importedFrom}#${t}`:`${e.sourceFile}#${t}`}function Sy(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 by(e,t,n,r,o){let i=new Set,s=ps(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 ps(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 Ey(e){switch(e){case"template":return"component-template";case"upstream":return"upstream-source";default:return"current-instance"}}function Iy(e){switch(e){case"template":return["instance"];case"upstream":return["template"];default:return["template"]}}var vy=new Set(["markdown","body","content","value","document"]),ru=[];function iu(e){if(!(!Ry(e.tag)||!e.attributes))for(let t of e.attributes){if(!vy.has(t.name))continue;if(Cy(t))return{kind:"markdown",field:t.name,schema:"markdown",valuePath:t.source?.expression,operationBoundary:ru};let n=ky(t.resolvedValue);if(n==="prosemirror-doc"||n==="node-array")return{kind:"rich-text-json",field:t.name,valuePath:t.source?.expression,schema:n,operationBoundary:ru};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 ky(e){if(e){if(Array.isArray(e)&&e.every(t=>ou(t)))return"node-array";if(ou(e)){if(e.type==="doc"&&Array.isArray(e.content))return"prosemirror-doc";if(Array.isArray(e.content)||Array.isArray(e.children))return"unsupported-json-tree"}}}function ou(e){return!Array.isArray(e)&&typeof e=="object"&&e!==null}function Cy(e){return e.name==="markdown"}function Ry(e){return/^[A-Z]/.test(e)}var wy=["src","alt","poster","caption","width","height"];function su(e){let t=e.attributes?.filter(i=>wy.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=Py(t.map(i=>i.value));return{kind:Ny(e.tag,n),sourceType:o,fields:n,editableFields:[],operationBoundary:[],...Object.keys(r).length>0?{valuePaths:r}:{}}}function Ny(e,t){return e==="img"?"image":e==="video"||t.includes("poster")?"video":"media"}function Py(e){return e.some(t=>t.startsWith("cms:"))?"cms-media-field":e.some(t=>/^(\.?\/|\/)/.test(t))?"local-file-reference":"asset-id"}var ms=["set-class-name-source","apply-style-draft"];function au(e){let t=e.attributes?.find(n=>n.name==="className");if(!t)return{kind:"class-name-source",className:"",sourceKind:"missing",editable:!0,operationBoundary:ms,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:ms,sourcePath:n}}return{kind:"class-name-source",className:t.value,sourceKind:t.resolvedValue===void 0?"static-attribute":"static-expression",editable:!0,operationBoundary:ms}}import{createHash as Ay}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:${Ay("sha256").update(e).digest("hex")}`}function uu(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=Ty(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:lu(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:cu(e.route.source,o),valueRaw:s?cu(e.route.source,s):null,attrRange:lu(o),diagnostics:[]}}function du(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 Ty(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:_y(t.sourceRange)});return!r.ok||r.match.node.type!=="JSXElement"?null:r.match.node}function fu(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 cu(e,t){return t.start==null||t.end==null?"":e.slice(t.start,t.end)}function lu(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 _y(e){return{startLine:e.startLine,startColumn:e.startColumn,endLine:e.endLine,endColumn:e.endColumn}}import*as Ts from"@babel/parser";import Ss from"@babel/traverse";import*as b from"@babel/types";import*as bt from"node:path";import*as yu from"@babel/parser";import ys 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=By(e.node),r=Fy(e.node);if(!n||r===null)return null;let o=e.scope.getBinding(n);return o?Io(o,[...r,...t]):null}return e.isAwaitExpression()||hs(e.node)?_t($y(e.node),t,"awaited or fetched expression"):null}function Fy(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=My(e,t);if(n)return n;let r=Oy(e,t);if(r)return r;let o=Dy(e,t);return o||null}function nr(e){return e?.kind==="api-source"}function My(e,t){if(e.path.isVariableDeclarator()&&G.isIdentifier(e.path.node.id)){let s=e.path.get("init");if(s?.isCallExpression()&&gs(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)&&gu(c)==="data"&&tr(c.value,e.identifier.name)),a=e.path.get("init");if(s&&a?.isCallExpression()&&gs(a.node))return _t(e.identifier.name,t,"query hook data binding")}let n=Ly(e);if(!n||gu(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()||!gs(i.node)?null:_t(e.identifier.name,t,"query hook data binding")}function Oy(e,t){if(e.path.isVariableDeclarator()&&G.isArrayPattern(e.path.node.id)){let a=e.path.get("init");if(!a?.isCallExpression()||!mu(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:pu(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()||!mu(o.node)||n.node.elements.findIndex(a=>a===e.path.node)!==0)return null;let s=n.node.elements[1];return G.isIdentifier(s)&&pu(e,s.name)?_t(e.identifier.name,t,"state setter is updated by API data"):null}function Dy(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"):hs(r.node)?_t(e.identifier.name,t,"fetch-backed binding result"):null:null}function Ly(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 pu(e,t){let n=!1,r=!1;return e.scope.path.traverse({CallExpression(i){hs(i.node)&&(n=!0),(jy(i.node.callee,t)||i.node.arguments.some(s=>G.isIdentifier(s)&&s.name===t))&&(r=!0)}}),n&&r}function gs(e){let t=Co(e.callee);return t==="useQuery"||t==="useSWR"||t==="useSuspenseQuery"}function mu(e){return Co(e.callee)==="useState"}function hs(e){return vo(e,t=>G.isCallExpression(t)&&Co(t.callee)==="fetch")}function By(e){let t=e;for(;G.isMemberExpression(t);)t=t.object;return G.isIdentifier(t)?t.name:null}function gu(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 jy(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 $y(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:Vy(e,t),reason:n}}function Vy(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}var xu=typeof ys=="function"?ys:ys.default;function Su(e,t){let n=Eu(e);if(!n)return{allowed:!0};let r=!1;return xu(n,{CallExpression(o){if(!Iu(o.node,t.sourceRange)||!Uy(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 bu(e,t){let n=Eu(e);if(!n)return{allowed:!0};let r=!1;return xu(n,{JSXExpressionContainer(o){Iu(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 Eu(e){try{return yu.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Uy(e){let t=e.callee;return _n.isMemberExpression(t)&&_n.isIdentifier(t.property)&&t.property.name==="map"}function Iu(e,t){let n=e.loc;return n?hu({line:n.start.line,column:n.start.column},{line:t.startLine,column:t.startColumn})>=0&&hu({line:n.end.line,column:n.end.column},{line:t.endLine,column:t.endColumn})<=0:!1}function hu(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 vu(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(Jy(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=ku(r),i=!1,s=o?o.initBinding&&xs(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=Wy(e);if(n){let r=Ky(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=Xy(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(xs(e)){let[r,...o]=t?.path??[];return!r||r.kind!=="property"?null:{propName:r.name,remainingPath:o,hasDefault:dt(e)}}return null}function Ky(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=ku(r);if(!o)return null;let{initBinding:i,initPathPrefix:s}=o;if(!i)return null;let a=!1,c=xs(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 ku(e){if(e.isIdentifier())return{initBinding:e.scope.getBinding(e.node.name),initPathPrefix:[]};if(!e.isMemberExpression())return null;let t=Hy(e.node);return t?{initBinding:e.scope.getBinding(t.base),initPathPrefix:t.path}:null}function xs(e){return e.path.isIdentifier()&&e.path.key===0&&Array.isArray(e.path.container)&&e.path.parentPath?.isFunction()===!0}function Jy(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentPath}return!1}function Xy(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 Cu(e,t,n){if(e.path.isVariableDeclarator()){let a=e.path.get("id");if(!Array.isArray(a)&&(a.isObjectPattern()||a.isArrayPattern())){let c=Ro(a,e.identifier.name);if(c&&(!n||c.propName===n))return{propName:c.propName,componentName:t,expressionPath:c.expressionPath,displayPath:`${t}.${c.propName}.default`}}}if(e.path.isObjectPattern())for(let a of e.path.get("properties")){if(!a.isObjectProperty())continue;let c=rr(a.node);if(!c||n&&c!==n)continue;let l=a.get("value");if(!l.isAssignmentPattern())continue;let u=l.get("right");if(u.isExpression())return{propName:c,componentName:t,expressionPath:u,displayPath:`${t}.${c}.default`}}let r=zy(e);if(!r)return null;let o=r.parentPath;if(!o?.isObjectProperty())return null;let i=rr(o.node);if(!i||n&&i!==n)return null;let s=r.get("right");return s.isExpression()?{propName:i,componentName:t,expressionPath:s,displayPath:`${t}.${i}.default`}:null}function Ro(e,t){if(e.isObjectPattern()){for(let n of e.get("properties"))if(n.isObjectProperty()){let r=rr(n.node),o=n.get("value");if(o.isAssignmentPattern()){let i=o.get("left"),s=o.get("right");if(r&&!Array.isArray(i)&&qe(i.node,t)&&!Array.isArray(s)&&s.isExpression())return{propName:r,expressionPath:s}}if(!Array.isArray(o)&&(o.isObjectPattern()||o.isArrayPattern())){let i=Ro(o,t);if(i)return i}}else if(n.isRestElement()){let r=n.get("argument");if(!Array.isArray(r)&&(r.isObjectPattern()||r.isArrayPattern())){let o=Ro(r,t);if(o)return o}}}if(e.isArrayPattern())for(let n of e.get("elements")){if(!n)continue;let r=n.isRestElement()&&!Array.isArray(n.get("argument"))?n.get("argument"):n;if(!Array.isArray(r)&&(r.isObjectPattern()||r.isArrayPattern())){let o=Ro(r,t);if(o)return o}}return null}function qe(e,t,n=[]){if(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 zy(e){if(!e.path.isIdentifier())return null;let t=e.path.parentPath;return t?.isAssignmentPattern()&&t.node.left===e.path.node?t:null}function Wy(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 Hy(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 Ss=="function"?Ss:Ss.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 Gy(e){return e.target.kind==="node"?e.target.key:null}function Yy(e){return"kind"in e}function wo(e){return!Yy(e)}function Cs(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 bs(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 _s(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 Ts.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Zy(e){if(e.isNumericLiteral())return!0;if(!e.isUnaryExpression({operator:"-"}))return!1;let t=e.get("argument");return!Array.isArray(t)&&t.isNumericLiteral()}function Qy(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 Vu(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 qy(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=Vu(i.node.name);s&&o(s,i)}}),[...r].sort()}function Ru(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(nd(o.match.path,i.match.path))return{ok:!1,bindingNames:[],reason:"Cannot move node out of its conditional branch"};let s=qy(o.match.path,i.match.path);return s.length>0?{ok:!1,bindingNames:s}:{ok:!0}}function wu(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:As(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:Ds(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 ex(e,t){let n=le(e.node);return n?tx(t).some(r=>{let o=le(r);return r===e.node||!!(o&&o.start===n.start&&o.end===n.end)}):!1}function tx(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)?nx(e)?Nu(e.children):[e]:b.isJSXFragment(e)?Nu(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)&&od(e.operator)?Dt(e.right):[]}function Nu(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 nx(e){let t=e.openingElement.name;return b.isJSXIdentifier(t)?t.name==="Fragment":b.isJSXMemberExpression(t)&&t.property.name==="Fragment"}function rx(e,t){return!!(e&&t&&e.callbackStart<t.callbackStart&&e.callbackEnd>t.callbackEnd)}function Es(e){return e==="Cannot edit repeat-backed child node structure with a generic node operation"}function Pu(e,t,n,r={}){if(!r.preserveConditionalBoundary&&nd(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=>Os(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=Vu(c.node.name);l&&a(l,c)}}),s.size>0?{ok:!1,bindingNames:[...s].sort()}:{ok:!0}}function Au(e,t,n){let r=le(e.node);if(!r)return{ok:!0};let o=new Set(n.callbackPath.node.params.flatMap(s=>Os(s)).map(s=>n.callbackPath.scope.getBinding(s)?.path.node).filter(Boolean)),i=new Set;return Fs(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 ox(e,t){let n=new Set(e.callbackPath.node.params.flatMap(a=>Os(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=ix(l);u&&o(u,c)}}});return r.size>0?{ok:!1,bindingNames:[...r].sort()}:{ok:!0}}function ix(e){let t=e;for(;b.isTSQualifiedName(t);)t=t.left;return b.isIdentifier(t)?t.name:null}function Uu(e,t){let n=le(e.node),r=new Set;return Fs(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 Fs(e,t){e.isIdentifier()&&e.isReferencedIdentifier()&&t(e),e.traverse({ReferencedIdentifier(n){n.isIdentifier()&&t(n)}})}function sx(e){let t=ax(e.ast,e.sourceNode.component,e.targetParent.component);if(!t.ok)return{ok:!1,reason:t.reason};let n=id(t.path,e.targetParentPath);if(!n.ok)return{ok:!1,reason:n.reason};let r=bx({source:e.source,sourceContext:e.sourceContext,callSitePath:t.path,targetParentPath:e.targetParentPath});if(!r.ok)return r;let o=td(r.collectionExpression);return{ok:!0,context:{...e.sourceContext,collectionExpression:r.collectionExpression,collectionNeedsParens:o?Ds(o):!0}}}function ax(e,t,n){let r=Xu(e,t);if(zu(e,r),Wu(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){qu(s,r)&&o.push(s)}}),o.length!==1?{ok:!1,reason:"Cannot move prop-backed repeat child without a single unambiguous component call site"}:Ms(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 cx(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=fx(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=lx(r,{file:e.sourceFile,exportName:n.exportName}),i=[];for(let a of r){let c=Ku({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)||Ms(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 lx(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 ux(i,n))o=r(s)||o}return[...n.values()]}function ux(e,t){let n=[],r=dx(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:Rs(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:Rs(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 Rs(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 dx(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:Rs(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`${Ns(e.file)}#${t}`}function Ot(e){return b.isIdentifier(e)?e.name:e.value}function fx(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 Ku(e){let t=px(e),n=[],r=Wu(e.ast,t);return Lt(e.ast,{JSXElement(o){tt(e.file,e.sourceFile)&&Ms(o)===e.sourceComponent||qu(o,t)&&n.push({file:e.file,path:o})}}),{callSites:n,hasUnsafeReference:r}}function Ju(){return{localBindings:new Set,namespaceMembers:new Map,hasUnsupportedAlias:!1}}function Xu(e,t){let n=Ju();return Lt(e,{Program(r){let o=r.scope.getBinding(t);o&&n.localBindings.add(o),r.stop()}}),n}function px(e){let t=Ju();return tt(e.file,e.sourceFile)&&mx(t,Xu(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=_u(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=_u(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)}}}}}),zu(e.ast,t),t}function mx(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 zu(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&&ws(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&&Yu(n.node.id,o.namespaceMembers,t,n)}}}})}function Wu(e,t){if(t.hasUnsupportedAlias)return!0;let n=!1;return Lt(e,{ReferencedIdentifier(r){if(n){r.stop();return}gx(r)||!r.isIdentifier()||!Hu(r,t)||hx(r,t)||yx(r)||(n=!0,r.stop())}}),n}function gx(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 Hu(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 hx(e,t){let n=e.findParent(c=>c.isVariableDeclarator());if(!n?.isVariableDeclarator())return!1;let r=n.get("init");if(!r?.isExpression()||!Tu(e,r))return!1;let o=Hu(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()&&Tu(e,a)&&!!Qt(a.node,t,a)}function yx(e){let t=e.parentPath;return t?.isExportDefaultDeclaration()&&t.node.declaration===e.node?!0:!!(t?.isExportSpecifier()&&t.node.local===e.node)}function Tu(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 xx(r,t,n);let o=Qu(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?Gu(s,o.slice(1).join(".")):null}function xx(e,t,n){let r=new Set,o=!1;for(let i of e.properties){if(!b.isObjectProperty(i))continue;let s=Zu(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 Gu(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 ws(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 Yu(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&&ws(n,c,{local:!1,namespaceMembers:new Set(t),unsupported:!1})}else n.hasUnsupportedAlias=!0;continue}if(!b.isObjectProperty(o))continue;let i=Zu(o);if(!i){n.hasUnsupportedAlias=!0;continue}let s=Gu(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&&ws(n,c,s);continue}if(b.isObjectPattern(a)&&s.namespaceMembers.size>0){Yu(a,s.namespaceMembers,n,r);continue}n.hasUnsupportedAlias=!0}}function Zu(e){return e.computed?b.isStringLiteral(e.key)||b.isNumericLiteral(e.key)?String(e.key.value):null:Sx(e.key)}function Sx(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 Qu(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?Qu(t):null;return n?[...n,e.property.name]:null}return null}function _u(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 qu(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=ed(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 ed(e){if(b.isJSXIdentifier(e))return[e.name];if(b.isJSXMemberExpression(e)){let t=ed(e.object);return t?[...t,e.property.name]:null}return null}function Ms(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 bx(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=vx(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=Cx(e.callSitePath,c.propName,e.source);if(!u.ok){o=u.reason;return}let d=Ex(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=Uu(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:Rx(e.source,t,[...n.values()])}}function Ex(e,t){if(t.length===0)return e;let n=td(e);if(!n)return null;let r=Ds(n)?`(${e})`:e;for(let o of t){if(o.kind==="property"){r=Ix(o.name)?`${r}.${o.name}`:`${r}[${JSON.stringify(o.name)}]`;continue}r=`${r}[${o.index}]`}return r}function Ix(e){return/^[$A-Z_a-z][$\w]*$/.test(e)}function vx(e,t,n){let r=kx(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 kx(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 Cx(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 Rx(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 td(e){try{let n=Ts.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 wx(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=Fu(s,e.sourceFile,e.targetFile);if(a){let c=e.targetParentPath.scope.getBinding(a.localName);if(c){let u=Fu(c,e.targetFile,e.targetFile);(!u||u.moduleFile!==a.moduleFile||!Nx(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 Fs(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 Nx(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 Fu(e,t,n){let r=Px(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(".")?Cs(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 Px(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 Ns(e)===Ns(t)}function Ns(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 Os(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 Ax(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 Tx(e,t){return{...e,callbackParams:t}}function Mu(e,t){return`${e.collectionNeedsParens?`(${e.collectionExpression})`:e.collectionExpression}${e.mapOperator}((${e.callbackParams.join(", ")}) => ${t})`}function Ds(e){return!(b.isIdentifier(e)||b.isThisExpression(e)||b.isMemberExpression(e)||b.isOptionalMemberExpression(e)||b.isCallExpression(e)||b.isOptionalCallExpression(e))}function nd(e,t){return rd(e,t).length>0}function Is(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()&&!_x(o,n,r)))return!0;o=o.parentPath}return!1}function _x(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 rd(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()&&od(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 Ou(e,t,n,r){let o=rd(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=Fx(a.conditionPath,c);if(s.push(a.conditionPath),a.kind==="logical"){i=`${l} ${a.operator} ${Ox(i)}`;continue}i=a.branch==="consequent"?`${l} ? ${i} : null`:`${l} ? null : ${i}`}return{sourceJsx:i,conditionPaths:s}}function Fx(e,t){return Mx(e.node)?t:`(${t})`}function Mx(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 od(e){return e==="&&"||e==="||"||e==="??"}function Ox(e){return e.trim().startsWith("<")?e:`(${e})`}function id(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=Du(e),i=Du(t);if(!o||!i||!Dx(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=Lx(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())&&Bx(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 Du(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 Dx(e,t){return e.start===t.start&&e.end===t.end}function Lx(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 Bx(e){let t=e.parentPath;if(!t||!t.isCallExpression()&&!t.isOptionalCallExpression()||t.node.arguments[0]!==e.node)return!1;let n=t.node.callee;return(b.isMemberExpression(n)||b.isOptionalMemberExpression(n))&&b.isIdentifier(n.property)&&n.property.name==="map"&&!n.computed}var jx={table:new Set(["caption","colgroup","thead","tbody","tfoot","tr"]),thead:new Set(["tr"]),tbody:new Set(["tr"]),tfoot:new Set(["tr"]),tr:new Set(["th","td"]),ul:new Set(["li"]),ol:new Set(["li"]),select:new Set(["option","optgroup"]),optgroup:new Set(["option"])};function Po(e,t){if(t.kind!=="native-tag")return null;let n=e.tag?.toLowerCase();if(!n||n!==e.tag||n.startsWith("component:"))return null;let r=jx[n];if(!r)return null;let o=t.tag.toLowerCase();return r.has(o)?null:`Cannot insert <${t.tag}> into <${e.tag}>; expected ${[...r].map(i=>`<${i}>`).join(", ")}`}function $x(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 Vx(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 Lu(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 Bu(e,t){if(!t.has(e))return e;let n=2;for(;t.has(`${e}${n}`);)n+=1;return`${e}${n}`}function Ux(e,t){if(!e.component)return{localName:"Component"};let n=e.component,r=_s(e),o=He(t);if(n.exportName!=="default"){let a=o?Vx(o,n.source,n.exportName):null;if(a)return{localName:a};let c=o?Bu(r,Lu(o)):r;return{localName:c,importStep:vs(e,c)}}if(!o)return{localName:r,importStep:vs(e,r)};let i=$x(o,n.source);if(i)return{localName:i};let s=Bu(r,Lu(o));return{localName:s,importStep:vs(e,s)}}function Kx(e,t){if(e.kind==="native-tag")return e.text?`<${e.tag}>${e.text}</${e.tag}>`:`<${e.tag} />`;let n=t??_s(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 Jx(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?Xx(e.props):void 0;return{kind:e.kind,component:{source:e.component.source,exportName:e.component.exportName},...t?{props:t}:{}}}function Xx(e){return Object.fromEntries(Object.entries(e).filter(t=>Ps(t[1])))}function Ps(e){return e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean"?!0:Array.isArray(e)?e.every(Ps):typeof e=="object"?Object.values(e).every(Ps):!1}function zx(e,t){let n=He(e);if(!n||!t.tag||!t.importedFrom||!t.exportName)return Number.POSITIVE_INFINITY;let r=Ku({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 vs(e,t=_s(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 ju(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 Wx(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 Ls(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:Ls(e,t.slice(0,n)),index:r.index}}return null}function ks(e,t){return e.locator?e.collectionPathMap?.[t]?Ls(e.locator,e.collectionPathMap[t]):sr(e.locator)?Gx(e.locator,Yx(t,e.collectionIndexMap)):null:null}function Hx(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:sd(o,t)}function sd(e,t){let[n,...r]=e;if(!n)return t;if(n.kind!=="property")return;let o=sd(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 Gx(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},Ls(e,i)}return null}function Yx(e,t){return t?.[e]??e}function $u(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 Zx(e,t){return Qx(e.root,t.root)&&eS(e.path??[],t.path??[])}function Qx(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&&qx(e.sourceRange,t.sourceRange)}}function qx(e,t){return e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}function As(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 eS(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=ju(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=Gy(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=ks(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=ks(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(!Zy(a.match.path))return{ok:!0,value:r};let c=Qy(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=ks(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||zx(n,t)>1)return null;let r=Cs(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=Su(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"?Ux(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:Kx(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:Jx(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=Hx(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"?$u(0,a.collectionIndexMap):$u(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:As(n,t);if(!o)return t.isRepeatItemRoot===!0;let i=St(this.graph.getFileContent(t.file),o);return i?ex(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:As(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(Is(u,d))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child across statement-level conditional branches"};let g=Ru(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&&!rx(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=wu(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=bs(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(Is(u,d))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child out of a statement-level conditional branch"};let S=Ou(c,u,d,g);for(let w of S.conditionPaths){let B=Au(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=Pu(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=ox(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=sx({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=Uu(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:Mu(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=cx({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=id(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")&&wu(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=bs(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(Is(m,g))return{ok:!1,errorCode:"unsupported-operation",reason:"Cannot move repeat-backed child out of a statement-level conditional branch"};let w=Ou(c,m,g,P);for(let M of w.conditionPaths){let D=Au(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=Pu(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=wx({sourceFile:r.file,targetFile:o.file,sourceContext:C,targetParentPath:g});if(!re.ok)return{ok:!1,errorCode:"unsupported-operation",reason:re.reason};let ne=Ax(C);if(!ne.ok)return{ok:!1,errorCode:"unsupported-operation",reason:ne.reason};let N=Tx(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:Mu(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=ju(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(Wx(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&&!Es(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&&Zx(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=Es(d)?d:p;if(m&&Es(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=Ru(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=bs(this.graph,r)??`<${r.component} />`,p=bu(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:Cs(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 yd from"@babel/parser";import Bs from"@babel/traverse";import*as E from"@babel/types";var xd=typeof Bs=="function"?Bs:Bs.default;function Sd(e){return new Map([...e].map(t=>[t.file,{source:t.source,ast:t.ast}]))}var ad=new WeakMap;function cd(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 bd(e){let{file:t,source:n,segment:r,readFile:o,exists:i}=e,s=e.fileCache??new Map,a=Ys(s,t,n);if(!a)return null;let c=Zs(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 oa({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 NS({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 Ed(e){let{file:t,source:n,readFile:r,exists:o}=e,i=e.fileCache??new Map,s=Ys(i,t,n);if(!s)return null;let a=e.expression!==void 0?(e.sourceRange?Cd(s,n,e.expression,e.sourceRange):null)??ea(s,n,e.expression):e.sourceRange?Zs(s,e.sourceRange):null;if(!a)return null;let c=oS(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 US({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 rS(d,e.expression??fr(c.node,n))}async function Gs(e){let{file:t,source:n,readFile:r,exists:o}=e,i=e.fileCache??new Map,s=Ys(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"?iS({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}):sS({file:t,source:n,ast:s,candidate:e.target.candidate,readFile:r,exists:o,graph:e.graph,fileCache:i,visited:a})}function Id(e){try{return yd.parse(e,{sourceType:"module",plugins:["jsx","typescript"]})}catch{return null}}function Ys(e,t,n){let r=e.get(t);if(r?.source===n)return r.ast;let o=Id(n);return e.set(t,{source:n,ast:o}),o}function Zs(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 tS(e,t){let n=null,r=Number.POSITIVE_INFINITY;for(let o of dr(e).expressions){if(!nS(o.node.loc,t))continue;let i=(o.node.end??0)-(o.node.start??0);i<=r&&(n=o,r=i)}return n}function vd(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=ad.get(e);if(t)return t;let n={expressions:[],jsxElements:[]};return xd(e,{Expression(r){n.expressions.push(r)},JSXElement(r){n.jsxElements.push(r)}}),ad.set(e,n),n}function nS(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=ld({line:e.start.line,column:e.start.column},{line:t.startLine,column:t.startColumn}),r=ld({line:e.end.line,column:e.end.column},{line:t.endLine,column:t.endColumn});return n>=0&&r<=0}function kd(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 ld(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 Dd(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 rS(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 oS(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 qs(e,t);let n=ZS(e);return n?n.path.reduce((r,o)=>o.kind==="property"?`${r}.${o.name}`:`${r}[${o.index}]`,n.base):""}function qs(e,t){return e.start==null||e.end==null?"":t.slice(e.start,e.end)}function ea(e,t,n){let r=null,o=Number.POSITIVE_INFINITY;for(let i of dr(e).expressions){if(qs(i.node,t)!==n)continue;let s=(i.node.end??0)-(i.node.start??0);s<=o&&(r=i,o=s)}return r}function Cd(e,t,n,r){let o=null,i=Number.POSITIVE_INFINITY;for(let s of dr(e).expressions){if(qs(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 iS(e){let{file:t,source:n,ast:r,segment:o,readFile:i,exists:s,fileCache:a,visited:c}=e,l=Zs(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 aS(t,o.value);let p=await oa({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"?md(t,p):Js(t,fr(l.node,n),p):cS({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=Ks(l.node);if(p)return Be(p.code,p.message);let m=l.scope.getBinding(u.base);if(m?.path.isVariableDeclarator()){let g=Ks(m.path.node.init);if(g)return Be(g.code,g.message)}return m?.path.isVariableDeclarator()&&E.isCallExpression(m.path.node.init)?lS("unsupported-expression",Ad(m.path.node.init,e.functionCallContracts)):Be("unsupported-expression",`Unable to resolve provenance for expression "${u.expression}"`)}return d.kind==="external"?md(t,d):Js(t,u.expression,d)}async function sS(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=ea(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=Js(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 aS(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 cS(e){let t=await wd(e);if(t.length===0)return Be("unsupported-expression",`Unsupported expression type: ${e.expression.type}`);if(uS(e.expression))return Rd(t);if(Pd(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 lS(e,t){return Rd([{code:e,message:t}])}function Rd(e){return{finalSource:null,chain:[],confidence:"partial",editMode:"readonly",diagnostics:e}}function uS(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 wd(e){let{expression:t,scope:n,currentFile:r,readFile:o,exists:i,fileCache:s,visited:a,functionCallContracts:c}=e,l=Ks(t);if(l)return[l];if(E.isCallExpression(t))return[{code:"unsupported-expression",message:Ad(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 js(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 js(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 js(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 Ks(e){return Pd(e)?ud("i18n helpers require a static message id string"):gS(e)?ud("CMS helpers require static entry id and field path string arguments"):null}async function js(...e){let t=e[e.length-1],n=e.slice(0,-1),r=[];for(let o of n)r.push(...await wd({...t,expression:o}));return r}function dS(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:[fS(e.sourceType)]}}async function ta(e){for(let n of SS){if(!dd(e.expressionPath,n.helperNames))continue;let r=await n.resolve(e);if(r)return pd(fd(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(!dd(e.expressionPath,n.helperNames))continue;let r=await n.resolve(t);if(r)return pd(fd(r),e.externalAdapters)}return null}function fS(e){return{code:"missing-adapter",message:`No external adapter is registered for ${e}`}}function pS(e){return{code:"external-source-readonly",message:e}}function ud(e){return{code:"unsupported-expression",message:e}}function na(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 dd(e,t){if(!t||t.length===0)return!0;let n=na(e.node);return n?t.includes(n):!1}function fd(e){return"match"in e?{match:e.match,editMode:e.editMode,diagnostics:ur(e.diagnostics??[])}:{match:e,diagnostics:[]}}function pd(e,t){let n=dS(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 mS(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 gS(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 Nd(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 Pd(e){return Nd(e)===null}async function hS(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 yS(e){let t=Nd(e.expressionPath.node);if(typeof t!="string"||t.length===0)return null;let n="en",r=await hS(e.currentFile,n,e.exists);return r?{sourceType:"i18n-message",sourceId:`${n}:${t}`,file:r,displayPath:t}:null}async function xS(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:[pS("API mapping transforms must stay readonly until a reversible mapping strategy is registered")]}:i}var SS=[{helperNames:["getCmsField"],resolve:({expressionPath:e})=>mS(e)},{helperNames:["apiField"],resolve:e=>xS(e)},{helperNames:["t","intl.formatMessage"],resolve:({currentFile:e,expressionPath:t,exists:n})=>yS({currentFile:e,expressionPath:t,exists:n})}];function md(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 Js(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=wS(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 bS=[{helperName:"formatPrice",purity:"pure",sourceArgIndex:0},{helperName:"formatDate",purity:"pure",sourceArgIndex:0},{helperName:"pickLabel",purity:"pure",sourceArgIndex:0}];function ra(e,t){let n=[...bS,...t??[]];for(let r=n.length-1;r>=0;r-=1){let o=n[r];if(o?.helperName===e)return o}return null}function Ad(e,t){let n=e.callee;return E.isIdentifier(n)&&ra(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 oa(e){let t=await ta(e);if(t)return t;let n=await Td({...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 CS(e)}async function Td(e){let t=await nt({...e,allowComposed:!1});return t?.kind==="source"?t.provenance:null}async function nt(e){let t=ES(e.expressionPath),n=kS(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 $s(s,a,c)}if(t.isCallExpression())return IS({...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 $s(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 $s(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 ES(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 IS(e){let t=na(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 $s(...e){let t=null;for(let n of e){if(!n)return null;if(n.kind!=="none"){if(!t){t=n.provenance;continue}if(!vS(t,n.provenance))return null}}return t?{kind:"source",provenance:t}:{kind:"none"}}function vS(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 kS(e,t){return t.start==null||t.end==null?null:`safe-derived:${e}:${t.start}:${t.end}`}async function CS(e){if(!e.expressionPath.isCallExpression())return null;let t=na(e.expressionPath.node);if(!t)return null;let n=ra(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 _d({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 _d(e){let t=await ta({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 oa({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 RS(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=ra(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 _d({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 wS(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 NS(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=Fd(e.expressionPath,t.base);if(n){let l=await Md({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=AS(n.callPath,[...n.basePath,...t.path]);return nr(S)?cd(e.currentFile,S.sourceId,S.displayPath):null}let u=QS(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=vu(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 Td({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 WS({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 RS({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 cd(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 Fd(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()||!PS(s,r)?null:{callPath:s,basePath:i}}function PS(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 Md(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 AS(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 Od({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=kd(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 TS({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=qS(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 TS(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?Ws(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=tS(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 Od(e){return await _S(e)??await FS(e)??await MS(e)}async function _S(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=OS(s);if(!c)return null;let l=[],u=[],d=[];for(let[p,m]of i.value.entries()){let g=DS(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 FS(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=gd(s,0),l=gd(a,i.value.length);if(c===null||l===null)return null;let u=Math.max(0,c<0?i.value.length+c:c),d=Math.max(0,l<0?i.value.length+l:l),p=i.value.map((g,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 gd(e,t){return e?E.isNumericLiteral(e)&&Number.isInteger(e.value)?e.value:null:t}async function MS(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(hd(s,a.name,c.name,d.value,p.value)===void 0)return null;return u.sort((d,p)=>{let m=hd(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 hd(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=Xs(i,t,n,r,o);return typeof s=="number"?s:void 0}function Xs(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=zs(e,t);if(i)return rt(r,i);let s=zs(e,n);return s?rt(o,s):void 0}if(E.isBinaryExpression(e)&&e.operator==="-"){let i=E.isExpression(e.left)?Xs(e.left,t,n,r,o):void 0,s=E.isExpression(e.right)?Xs(e.right,t,n,r,o):void 0;return typeof i=="number"&&typeof s=="number"?i-s:void 0}}function OS(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 DS(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=zs(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 zs(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 LS({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 YS({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 ta({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 Od({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 LS(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=BS(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 BS(e){return E.isIdentifier(e.callee)&&(e.callee.name==="useState"||e.callee.name==="useReducer")?e.callee.name:E.isMemberExpression(e.callee)&&E.isIdentifier(e.callee.property)&&(e.callee.property.name==="useState"||e.callee.property.name==="useReducer")?e.callee.property.name:null}function jS(e){let t=e.getFunctionParent();if(!t)return null;if(t.isFunctionDeclaration()){let s=t.node.id?.name;if(!s)return null;let a=t.parentPath?.isExportDefaultDeclaration()?"default":(t.parentPath?.isExportNamedDeclaration(),s);return{componentName:s,exportName:a}}if(!t.isArrowFunctionExpression()&&!t.isFunctionExpression())return null;let n=t.parentPath;if(!n?.isVariableDeclarator()||!E.isIdentifier(n.node.id))return null;let r=n.node.id.name,o=n.parentPath,i=o?.parentPath?.isExportDefaultDeclaration()?"default":(o?.parentPath?.isExportNamedDeclaration(),r);return{componentName:r,exportName:i}}function $S(e,t){let n=jS(e.path);if(!n)return null;let r=Fn(e,t);return r?{...n,...r}:null}function Mo(e,t){return t.reduce((n,r)=>r.kind==="property"?`${n}.${r.name}`:`${n}[${r.index}]`,e)}function VS(e,t,n,r){return e.importedFrom===t?r?e.exportName===r:!0:e.sourceFile===t&&e.tag===n}async function US(e){let t=JS(e.expressionPath.node);if(!t||!XS(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 KS({...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 KS(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=Fd(e.expressionPath,s.base);if(!a)return null;let c=await Md({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 zS(p)});if(l.some(u=>u===null)||t!==null&&t!==l.length)return null;t=l.length,n??=c.collectionIndexMap,r.push(l)}if(t===null||t===0)return null;let o=[];for(let i=0;i<t;i+=1){let s=[...e.rootPath],a=0;for(let c of e.segments){if(c.kind==="dynamic"){let l=r[a]?.[i];if(!l)return null;s.push(l),a+=1;continue}s.push({...c})}o.push(s)}return{...n?{collectionIndexMap:n}:{},collectionPathMap:o}}function JS(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 XS(e){return e.some(t=>t.kind==="dynamic")}function zS(e){return typeof e=="string"?{kind:"property",name:e}:Number.isInteger(e)?{kind:"index",index:e}:null}async function WS(e){let t=$S(e.binding,e.sourceInfo);if(!t||!e.graph)return null;let n=[...e.graph.elements.values()].filter(l=>VS(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 HS({caller:r,propName:t.propName,remainingPath:t.remainingPath,readFile:e.readFile,fileCache:e.fileCache});if(l)return Vs(l,{componentName:t.componentName,propName:t.propName,file:r.sourceFile})}if(!o?.source){let l=await GS({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 Vs(l,{componentName:t.componentName,propName:t.propName,file:r.sourceFile});let u=Cu(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=Cd(i.ast,i.source,o.source.expression,o.sourceRange)??ea(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?Vs(c.kind==="external"?c:{...c,displayExpression:a.expression},{componentName:t.componentName,propName:t.propName,file:r.sourceFile}):null}async function HS(e){let t=await Bt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=vd(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=kd(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 GS(e){let t=await Bt(e.caller.sourceFile,e.readFile,e.fileCache);if(!t.ast)return null;let n=vd(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 Vs(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 YS(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?Hs(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?Hs(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=Hs(c.ast,n);if(!l)return;if(l.kind==="default-expression"){let m=l.expression;if(!m||!E.isIdentifier(m))return;let g=Ws(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=Ws(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 Ws(e){let t=null;if(xd(e,{Program(n){t=n.scope,n.stop()}}),!t)throw new Error("Unable to determine program scope");return t}function Hs(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 Us(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 Us(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 Us(c.value,t,n,r,o,i,s);u!==void 0&&(a[l]=u)}return a}if(E.isMemberExpression(e)){let a=await Dd(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 Us(e,t,n,r,o,i,s){if(!E.isSpreadElement(e))return await it(e,t,n,r,o,i,s)}async function Dd(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 ZS(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 QS(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 qS(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=Id(o),s={source:o,ast:i};return n.set(e,s),s}import la from"@babel/generator";import{parse as mb}from"@babel/parser";import ua from"@babel/traverse";import*as k from"@babel/types";import*as pt from"@babel/types";import ia from"@babel/generator";import*as ce from"@babel/types";var eb=typeof ia=="function"?ia:ia.default,tb=/(?:token|secret|key|password|authorization|cookie|signature|credential)/i,nb=/^((?:https?:)?\/\/)[^/@\s]+@/i,rb=/(\/(?:token|secret|api[-_]?key|password|credential|signature)\/)[^/?#]+/gi;function Bd(e,t){let n=ft(e.callee);if(!n)return null;if(n==="fetch")return sa(e.arguments[0],"GET",t,["fetch call"]);if(n.startsWith("axios.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if(Ld(r))return sa(e.arguments[0],r,t,["axios client contract"])}if(n.startsWith("ky.")){let r=n.split(".").at(-1)?.toUpperCase()??"GET";if(Ld(r))return sa(e.arguments[0],r,t,["ky client contract"])}return null}function sa(e,t,n,r){if(!e||ce.isSpreadElement(e)||ce.isJSXNamespacedName(e))return ab(t,n,r,"missing url argument");let o=mr(e);return{sourceKind:sb(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(ob(e));if(ce.isBinaryExpression(e)&&e.operator==="+"){let t=mr(e.left),n=mr(e.right);return!t&&!n?void 0:Oo(`${t??aa(e.left)}${n??aa(e.right)}`)}if(ce.isMemberExpression(e)){let t=jd(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 ob(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+=aa(r))}return t}function aa(e){if(ce.isIdentifier(e))return`:${e.name}`;if(ce.isMemberExpression(e)){let t=jd(e);if(t)return`env:${t}`}return`:${ib(e)}`}function ib(e){return eb(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(nb,"$1<redacted>@").replace(rb,"$1<redacted>");if(!r)return o;let i=r.split("&").map(s=>{let[a]=s.split("=");return a?tb.test(a)?`${a}=<redacted>`:`${a}=:${a}`:""}).filter(Boolean).join("&");return i?`${o}?${i}`:o}function sb(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 ab(e,t,n,r){return{sourceKind:"unknown-api",method:e,confidence:"partial",evidence:[{file:t.file,reason:[...n,r].join("; ")}]}}function Ld(e){return["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"].includes(e)}function jd(e){return!ce.isMemberExpression(e.object)||!ce.isIdentifier(e.object.object,{name:"process"})||!cb(e.object.property,"env")?null:ce.isIdentifier(e.property)?e.property.name:ce.isStringLiteral(e.property)?e.property.value:null}function cb(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 lb=new Set(["list","listStrict","get","getStrict","getByUrl","getByUrlStrict","schema","categories"]),ub=new Set(["getConfig","submit"]);function $d(e,t){let n=db(ft(e.callee),t);if(!n)return null;let r="cms.collections.";if(n.startsWith(r)){let i=n.slice(r.length);if(!lb.has(i))return null;let s=ca(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(!ub.has(i))return null;let s=ca(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=ca(e,0)??fb(e,0,"path")??"/cms/:path",s=pb(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 db(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 Vd(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 Ud(e){let t=ft(e.callee);return typeof t=="string"&&t.startsWith("cms.field.")}function ca(e,t){let n=e.arguments[t];return pt.isStringLiteral(n)?n.value:null}function fb(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 pb(e){return/^\/collections\/([^/]+)(?:\/|$)/.exec(e)?.[1]??null}var fa=typeof ua=="function"?ua:ua.default,_N=typeof la=="function"?la:la.default,gb={maxFunctionDepth:8,maxImportDepth:6},hb=new Set(["src","href","alt","poster","content","title","aria-label"]);async function Hd(e){let t=e.fileCache??new Map,n=ga(e.file,e.source,t),r={file:e.file,analysis:n,readFile:e.readFile,exists:e.exists,fileCache:t,options:{...gb,...e.options},variableCache:new Map,functionDepth:0,importDepth:0,paramSources:new Map,resolvingVariables:new Set,resolvingComponentProps:new Set,scopeVariables:lf(n,e.element.componentName)};await Gd(e.element.componentName,e.graph,r);let o=[];o.push(...await Eb(e.element,e.graph,r),...await Ib(e.element,e.graph,r));for(let s of e.element.textSegments){let a=await vb(s,e.element,e.graph,r);a&&o.push(Bo(a,"text","children"))}for(let s of e.element.attributes??[]){let a=bb(s,e.element);if(!a)continue;let c=await Qd(s.source,e.element,e.graph,r);c&&o.push(Bo(c,a,s.name))}let i=Bb(o).sort(af);return{hasDynamicData:i.length>0,bindings:i}}async function Gd(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 Yd(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 Zd(l.sourceFile,n);if(!d)continue;let p=$o(d,n,{importDepth:n.importDepth+1});p.paramSources.clear(),p.scopeVariables=lf(d,l.componentName),await Gd(l.componentName,t,p);let m=await yb(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=of(u);d.length===1&&c.set(l,d[0])}Sb(o,c,n)}async function Yd(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 Zd(e,r))?.imports.get(t);if(!s||!lt(s.source))return!1;let a=await ff(e,s.source,r.exists);return a?a===n?!0:Yd(a,s.importedName,n,r,o):!1}async function yb(e,t){let n=new Map;fa(t.analysis.ast,{JSXElement(o){if(xb(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 xb(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 Zd(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 ga(e,r,t.fileCache)}function Sb(e,t,n){if(k.isIdentifier(e)){t.size>0&&n.paramSources.set(e.name,ma(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 bb(e,t){return e.name==="dangerouslySetInnerHTML"?"richtext":hb.has(e.name)?"attribute":t.importedFrom||/^[A-Z]/.test(t.tag)?"component-prop":null}async function Eb(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 Ib(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 vb(e,t,n,r){return Qd(e.source,t,n,r)}async function Qd(e,t,n,r){let o=await kb(e,t,n,r);return o||jo(e,r)}async function kb(e,t,n,r){if(!e)return null;let o=Cb(e.base,t,n);if(!o)return null;let i=await jo(o.collectionSource,r);return i?xr(i,e.path,!0):null}function Cb(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 qd(e.base,t);return n?xr(n,e.path,!1):null}async function qd(e,t){let n=t.paramSources.get(e);if(n)return Ne(n);if(t.variableCache.has(e))return jb(t.variableCache.get(e)??null);if(t.resolvingVariables.has(e))return null;t.resolvingVariables.add(e);let r=await Rb(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 uf(i,t);if(s){let a=$o(s,t,{importDepth:t.importDepth+1}),c=df(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 Rb(e,t){let n=t.analysis.stateSetters.get(e);if(!n)return null;let r=[];fa(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 qd(e.name,t);if(k.isMemberExpression(e)||k.isOptionalMemberExpression(e)){let n=k.isMemberExpression(e)?Vd(e,{file:t.file}):null;if(n)return rf(n);let r=await wb(e,t);if(!r)return null;let o=Db(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 ef(e,t);if(k.isObjectExpression(e)){let n=await tf(e,t);return Object.keys(n).length>0?ma(n,t.file):null}if(k.isConditionalExpression(e)){let n=await Ce(e.consequent,t),r=await Ce(e.alternate,t);return yr(Jd(n,r))}if(k.isLogicalExpression(e)){let n=await Ce(e.left,t),r=await Ce(e.right,t);return yr(Jd(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 wb(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 ef(e,t){let n=$d(e,{file:t.file,imports:t.analysis.imports});if(n)return rf(n);if(Ud(e)){let d=e.arguments[0];if(d&&k.isExpression(d))return yr(await Ce(d,t))}let r=await Nb(e,t);if(r)return r;let o=Bd(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 Tb(e,t);if(i)return i;let s=await _b(e,t);if(s)return s;let a=await Fb(e,t);if(a)return a;let c=await Mb(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=of(l);return u.length===1?yr(u[0]):null}async function Nb(e,t){let n=ft(e.callee);if(n!=="useQuery"&&n!=="useSuspenseQuery"&&n!=="useInfiniteQuery"&&n!=="useSWR")return null;if(n==="useSWR"){let i=Ab(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=Pb(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)?ef(o,t):null}function Pb(e,t){for(let n of e.properties){if(!k.isObjectProperty(n)||!k.isExpression(n.value))continue;if(nf(n)===t)return n.value}return null}function Ab(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 Tb(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 _b(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 Fb(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 Mb(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 uf(r,t);if(!o)return null;let i=$o(o,t,{importDepth:t.importDepth+1}),s=df(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&&da(c,Lb(u),r)});let o=Ob(e),i=null,s,a=!1;for(let c of o){if(k.isObjectExpression(c)){s={...s??{},...await tf(c,r)},i=i??ma(s,n.file);continue}let l=await Ce(c,r);if(l){if(!i){i=l;continue}let u=pa(i,l);if(!u){a=!0,i=null;continue}i=u}}return{returnSource:a?null:i,...s?{objectReturnMap:s}:{}}}function da(e,t,n){if(k.isIdentifier(e)){n.paramSources.set(e.name,Ne(t));return}if(k.isAssignmentPattern(e)){da(e.left,t,n);return}if(k.isObjectPattern(e))for(let r of e.properties){if(!k.isObjectProperty(r)||r.computed||!k.isIdentifier(r.key))continue;let o=xr(t,[{kind:"property",name:r.key.name}],!0),i=k.isAssignmentPattern(r.value)?r.value.left:r.value;da(i,o,n)}}function Ob(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 tf(e,t){let n={};for(let r of e.properties){if(!k.isObjectProperty(r))continue;let o=nf(r);if(!o||!k.isExpression(r.value))continue;let i=await Ce(r.value,t);i&&(n[o]=i)}return n}function nf(e){return k.isIdentifier(e.key)&&!e.computed?e.key.name:k.isStringLiteral(e.key)?e.key.value:null}function Db(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,Kd(t)),o)}return o.valuePath=gr(o.valuePath,Kd(t)),o}function Kd(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 rf(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 Lb(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 Jd(e,t){return e?t?pa(e,t):Ne(e):t?Ne(t):null}function pa(e,t){if(Lo(e)!==Lo(t))return null;let n=cf(e.confidence,t.confidence)<=0?e.confidence:t.confidence;return{...e,confidence:n,evidence:[...e.evidence,...t.evidence]}}function of(e){let t=new Map;for(let n of e){let r=Lo(n),o=t.get(r);t.set(r,o?pa(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 ma(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 sf(e){let t=[...e].sort(af),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 Bb(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 af(e,t){return Xd(e.targetKind)-Xd(t.targetKind)||cf(e.confidence,t.confidence)||zd(e.sourceKind)-zd(t.sourceKind)||e.targetName.localeCompare(t.targetName)}function Xd(e){return{"repeat-region":0,"conditional-region":1,text:2,richtext:3,attribute:4,"component-prop":5}[e]}function zd(e){return e.startsWith("vcp-cms-")?0:e==="site-api-route"?1:e==="external-api"?2:3}function cf(e,t){let n={exact:0,"safe-derived":1,partial:2,unknown:3};return n[e]-n[t]}function ga(e,t,n){let r=n.get(e);if(r?.source===t)return r;let o=mb(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 fa(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)&&Wd(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)&&Wd(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 Wd(e){return k.isFunctionExpression(e)||k.isArrowFunctionExpression(e)}function lf(e,t){let n=e.functions.get(t)??e.functions.get("default");return n?e.functionVariables.get(n):void 0}async function uf(e,t){let n=await ff(t.file,e.source,t.exists);if(!n)return null;let r=await t.readFile(n);return ga(n,r,t.fileCache)}function df(e,t){return e.isDefault?t.functions.get("default")??t.functions.get(e.localName)??null:t.functions.get(e.importedName)??null}async function ff(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 jb(e){return e?Ne(e):null}function Ne(e){return{...e,evidence:e.evidence.map(t=>({...t})),...e.fieldMap?{fieldMap:Object.fromEntries(Object.entries(e.fieldMap).map(([t,n])=>[t,Ne(n)]))}:{}}}var $b=50,Vb=8*1024*1024;function hf(e,t={}){let n=[],r=[],o=t.externalAdapters??[],i=Math.max(0,t.maxUndoEntries??$b),s=Math.max(0,t.maxUndoBytes??Vb);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=gf(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=gf(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(", ")}: ${mf(Z)}`,rolledBack:!1,instanceConflict:pf(Z)};let he=pf(Z);return{ok:!1,reason:`${he?"MATERIALIZATION_INSTANCE_CONFLICT: ":""}Writeback failed and committed files were restored: ${mf(Z)}`,rolledBack:!0,instanceConflict:he}}return{ok:!0,snapshots:N.map(Ub)}}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 pf(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="EEXIST"}function Ub(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 mf(e){return e instanceof Error?e.message:String(e)}function gf(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 Kb(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 Kb(e,t){let{request:n}=e;if(n.newAttrRaw!==null&&!fu(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:du({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 yf(){let e=new Set;return{emit(t){for(let n of Array.from(e))try{n(t)}catch{}},subscribe(t){return e.add(t),()=>{e.delete(t)}}}}import{randomUUID as Jb}from"node:crypto";import Vo from"node:fs/promises";import ha from"node:path";import{setTimeout as Xb}from"node:timers/promises";var zb={async mkdir(e,t){await Vo.mkdir(e,t)},async writeFile(e,t,n){await Vo.writeFile(e,t,n)},async rename(e,t){await Vo.rename(e,t)},async rm(e,t){await Vo.rm(e,t)}},Wb=new Set(["EACCES","EBUSY","EPERM"]),Hb=[10,20,40,80,160];async function Gb(e,t,n){for(let r of Hb)try{await e.rename(t,n);return}catch(o){if(!Yb(o))throw o;await Xb(r)}await e.rename(t,n)}function Yb(e){return e instanceof Error&&"code"in e&&typeof e.code=="string"&&Wb.has(e.code)}async function Uo(e,t,n=zb){let r=ha.dirname(e),o=ha.basename(e),i=ha.join(r,`.${o}.${process.pid}.${Jb()}.tmp`),s=!1;try{await n.mkdir(r,{recursive:!0}),await n.writeFile(i,t,"utf8"),await Gb(n,i,e),s=!0}finally{if(!s)try{await n.rm(i,{force:!0})}catch{}}}import{randomBytes as dE}from"node:crypto";import Et from"node:path";import{parse as fE}from"@babel/parser";import pE from"@babel/traverse";import{COMPONENT_I18N_FILE_SUFFIX as Jo,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as Ef,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as mE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as gE,SiteEditMaterializationSchema as hE,parseComponentI18nResourcesJson as yE}from"@vcp-dev/contracts";var Sf=/#[0-9a-fA-F]{3,8}\b|\b(?:rgba?|hsla?|hwb|oklch|oklab|lab|lch|color)\s*\(/i,bf=/\b(?:bg-black|bg-white|text-white|text-black)(?:\b|\/)/g,Zb=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke)-\[#(?:[0-9a-fA-F]{3,8})\](?:\/\d+)?/g,Qb=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*#[0-9a-fA-F]{3,8}[^'"]*['"]/g,qb=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*rgba?\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,eE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,tE=/\b(?:color|backgroundColor|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*rgba?\([^)]+\)[^'"]*['"]/gi,nE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*(?:oklch|lab|lch|hsla?)\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,rE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*(?:oklch|lab|lch|hsla?)\([^)]+\)[^'"]*['"]/gi,oE=/\b(?:bg|text|border|ring|outline|decoration|divide|from|via|to|fill|stroke|shadow)-\[[^\]]*color-mix\([^\]]+\)[^\]]*\](?:\/\d+)?/gi,iE=/\b(?:color|backgroundColor|backgroundImage|background|borderColor|boxShadow|textShadow)\s*:\s*['"][^'"]*color-mix\([^'"]*['"]/gi,sE=/\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,aE=/var\(\s*--(?:_|private-|vcp-)[^)]+\)/gi,cE=/#[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,Zb),...Ge(e,Qb),...Ge(e,qb),...Ge(e,t.includeRgbBackgroundImage?eE:tE),...t.includeExtendedColorFunctions?[...Ge(e,nE),...Ge(e,rE)]:[]]),r=Ko([...Ge(e,oE),...Ge(e,iE)]).filter(o=>t.colorMixPolicy==="always"||Sf.test(o));return n.push(...r.filter(o=>!n.includes(o))),t.rejectTailwindPalette&&n.push(...Ge(e,sE).filter(o=>!n.includes(o))),t.rejectAnyRawColorLiteral&&n.push(...Ge(e,cE).filter(o=>!n.includes(o))),{hardCodedSurfaceHits:Ko(Ge(e,bf)),hardCodedSurfaceOccurrences:uE(e),rawColorHits:n,privateTokenHits:t.rejectPrivateTokens?Ko(Ge(e,aE)):[]}}function Ge(e,t){return e.match(new RegExp(t.source,t.flags))??[]}var xf=160,lE=/((?:[a-z][a-z0-9-]*(?:\[[^\]]*\])?:)+)$/;function uE(e){let t=new RegExp(bf.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=lE.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>xf?`${m.slice(0,xf-1)}\u2026`:m})}return o}function Ko(e){return[...new Set(e)]}var Sa="components/site/generated",If="{{$INSTANCE}}",Xo=5,xE=/^[a-z][a-z0-9-]{0,48}$/,SE=/^[a-f0-9]{8}$/,vf=/\.tsx?$/,bE=/\.json$/,EE=/\.(?:tsx?|json)$/,IE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,vE=["react","react/","next","next/","lucide-react","react-i18next","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],ya=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),xa=pE,kE=typeof xa=="function"?xa:xa.default;function CE(e){let t=Array.isArray(e.manifest.files)?e.manifest.files:[];if(t.length>Ef)return{ok:!1,error:{code:"MATERIALIZATION_LIMIT_EXCEEDED",message:"Static prefab file count exceeds the reusable limit."}};let n=DE(t);if(n)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Static prefab resolves duplicate target path: ${n}`,path:n}};let r=hE.safeParse(e.manifest);if(!r.success)return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Static prefab manifest failed schema validation."}};let o=FE(e.generatedRoot);if(!o)return{ok:!1,error:{code:"MATERIALIZATION_PATH_INVALID",message:`Generated root must be ${Sa}.`,path:e.generatedRoot}};if(!Pf(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=Rf(r.data.files),s=Rf(e.controlledFiles);if(!LE(i,s))return{ok:!1,error:{code:"MATERIALIZATION_DATA_UNSUPPORTED",message:"Controlled file list must exactly match the manifest file templates."}};if(i.size>Ef)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>mE)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>gE?{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 RE(e){let t=CE(e);if(!t.ok)return t;let n=t.data.generatedRoot,r=Pf(e.manifest.instanceBaseName),o=Math.max(1,Math.min(Xo,e.maxAttempts??Xo));for(let i=0;i<o;i+=1){let s=ME(e.instanceNameGenerator?.()??dE(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=Tf(n,a),l=wE({manifest:e.manifest,generatedRoot:n,instanceName:a,instanceRoot:c,allowedExternalImports:e.allowedExternalImports??vE});if(!l.ok)return l;if(!await NE(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 Nf(e){let t=Math.max(1,Math.min(Xo,e.maxAttempts??Xo));for(let n=0;n<t;n+=1){let r=await RE({...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 wE(e){let t=[],n=new Set;for(let i of e.manifest.files){let s=kf({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=kf({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=PE(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 NE(e,t,n){if(await e(t))return!0;for(let r of n)if(await e(r.path))return!0;return!1}function kf(e){if(e.pathTemplate.split(If).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(If,e.instanceName),n=OE(t);return n?Tf(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||!EE.test(n)||IE.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 PE(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(bE.test(d.path)){if(d.path.endsWith(Jo)){let g=yE(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=fE(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(!vf.test(d.path))continue;let p=s.get(d.path),m=null;if(kE(p,{ImportDeclaration(g){let S=Cf({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=AE({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=Cf({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=wf(g.node);S&&ya.has(S)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${S}.`,file:d.path},g.stop())},OptionalMemberExpression(g){let S=wf(g.node);S&&ya.has(S)&&(m??={code:"MATERIALIZATION_DATA_UNSUPPORTED",message:`Static prefab files cannot depend on ${S}.`,file:d.path},g.stop())},Identifier(g){g.isReferencedIdentifier()&&ya.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(!vf.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(!TE(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 _E(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:Sa,instanceRoot:"",entry:{path:"",export:{kind:"default"}},files:[]}}}function Cf(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 AE(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 TE(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 _E(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 FE(e){let t=Af(e);return t===Sa?t:null}function ME(e){let t=e.trim().toLowerCase();return SE.test(t)?t:null}function Pf(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 xE.test(t)?t:null}function Af(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 OE(e){let t=Af(e);return!t||t!==e?null:t}function Tf(...e){return Et.posix.join(...e)}function Rf(e){return new Set(e.map(t=>t.pathTemplate))}function DE(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 LE(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function wf(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 BE}from"node:crypto";import zo from"node:path";import{parse as ka}from"@babel/parser";import jE from"@babel/traverse";import*as Lf from"@babel/types";import{COMPONENT_I18N_FILE_SUFFIX as Ea,PageResourceArtifactSchema as $E,SITE_EDIT_MATERIALIZATION_MAX_FILE_COUNT as VE,SITE_EDIT_MATERIALIZATION_MAX_FILE_CONTENT_BYTES as UE,SITE_EDIT_MATERIALIZATION_MAX_TOTAL_CONTENT_BYTES as KE,parseComponentI18nResourcesJson as JE}from"@vcp-dev/contracts";var Ia="{{$INSTANCE}}",XE=/\{\{\$PAGE_ROUTE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,zE=/\{\{\$PAGE_TITLE:([a-zA-Z0-9][a-zA-Z0-9_-]*)\}\}/g,va="components/site/generated",WE=/\.(?:tsx?|json)$/,HE=/(?:^|\/)(?:layout|provider|globals?|[^/]+\.config)\.tsx?$/i,GE=["react","react/","next","next/","lucide-react","@/components/ui/","@/components/site/","@/lib/","@/hooks/"],YE=new Set(["document","eval","fetch","Function","globalThis","localStorage","location","module","navigator","process","require","sessionStorage","window","__dirname","__filename","exports"]),ba=jE,ZE=typeof ba=="function"?ba:ba.default;async function Ca(e){let t=$E.safeParse(e.artifact);if(!t.success)return se("Page resource artifact failed contract validation.");let n=t.data,r=e.randomHex??(()=>BE(4).toString("hex")),o=Math.max(1,Math.min(e.maxAttempts??5,5)),i=cI(r());if(!i)return se("Random instance suffix must be 8 lowercase hex chars.");let s=`${lI(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=_f({materialization:w.materialization,packageInstanceId:s,routeByPage:a,titleByPage:c});if(!B.ok)return B;for(let re of B.files){let ne=Mf(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=_f({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=Mf(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(nI(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=qE(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?Ca({...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=eI(u);return P||(u.sort((w,B)=>w.file.localeCompare(B.file)),{ok:!0,packageInstanceId:s,pages:l,files:u})}function _f(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:Ff(o.pathTemplate,e.packageInstanceId);if(!s)return se("Materialization path cannot be mapped into the package namespace.",o.pathTemplate);let a=QE(o.content,e.packageInstanceId,e.routeByPage,e.titleByPage);if(!a.ok)return a;let c=i&&e.pageTitle!==void 0?rI(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??Ff(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 QE(e,t,n,r){let o,i=e.replace(XE,(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(zE,(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(Ia,t);return a.includes("{{$PAGE_ROUTE:")||a.includes("{{$PAGE_TITLE:")||a.includes("{{$INSTANCE}}")?se("Materialization contains an unresolved placeholder."):{ok:!0,data:a}}function Ff(e,t){let n=`${va}/${t}`;if(e.split(Ia).length>2)return null;let o=e.replace(Ia,t),i=`${va}/${t}/`,s=o.startsWith(i)?o:`${n}/${o}`,a=zo.posix.normalize(s);return a!==s||!a.startsWith(`${n}/`)||!WE.test(a)||HE.test(a)?null:a}function Mf(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 qE(e,t,n,r,o,i){let s=new Set(e.map(m=>m.file)),a=`${va}/${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(Ea)&&!JE(m.content).success)return se("Materialization component i18n resources are invalid.",m.file);continue}try{let S=ka(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=sI(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(ZE(S,{Identifier(v){v.isReferencedIdentifier()&&YE.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||!tI(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=Df(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 Df(m,c))d.add(g);if(d.size!==e.length)return se("Every materialization file must be reachable from a package entry.");let p=aI(e,l,c);return p||{ok:!0}}function eI(e){if(e.length>VE)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>UE)return se("Page resource file exceeds the content byte limit.",n.file);t+=r}return t>KE?se("Page resource exceeds the aggregate content byte limit."):null}function tI(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 nI(e,t){let n;try{n=ka(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||!oI(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 rI(e,t,n){let r;try{r=ka(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&&iI(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&&Lf.isExpression(t)?t:null}function oI(e){return e.type==="Identifier"&&e.name==="path"||e.type==="StringLiteral"&&e.value==="path"}function iI(e){return e.type==="Identifier"&&e.name==="title"||e.type==="StringLiteral"&&e.value==="title"}function sI(e,t,n,r){if(t.startsWith(`@/${r}/`)){let s=t.slice(2),a=Of(s,n);return a?{allowed:!0,internalPath:a}:{allowed:!1}}if(!t.startsWith("."))return{allowed:GE.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=Of(o,n);return i&&(i.startsWith(`${r}/`)||i.startsWith("app/"))?{allowed:!0,internalPath:i}:{allowed:!1}}function Of(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 aI(e,t,n){let r=new Set(e.map(o=>o.file));for(let o of e){if(!o.file.endsWith(Ea))continue;let i=o.file.slice(0,-Ea.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 Df(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 cI(e){return/^[a-f0-9]{8}$/.test(e)?e:null}function lI(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 uI,parseComponentI18nResourcesJson as dI,resolveSiteTextDirection as fI,SiteLocaleSchema as pI}from"@vcp-dev/contracts";var mI=["i18next","react-i18next"],gI="components/ui/site-locale-provider.tsx",hI="components/ui/component-i18n-provider.tsx",Bf="app/layout.tsx";async function wa(e){let t=e.files.filter(p=>p.path.endsWith(uI));if(t.length===0)return{ok:!0};for(let p of["package.json",Bf,gI,hI])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=jf(n)&&jf(n.dependencies)?n.dependencies:{},o=mI.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(Bf),s=Ra(i,"html","lang"),a=Ra(i,"html","dir"),c=Ra(i,"SiteLocaleProvider","locale"),l=pI.safeParse(s);if(!l.success||!a||!c||s!==c||a!==fI(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=dI(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 Ra(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 jf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function sn(e){return{ok:!1,message:e}}import{parse as MI}from"@babel/parser";import{HOME_PAGE_URL_PATH as OI}from"@vcp-dev/contracts";import{parse as KP}from"@babel/parser";import{parse as cP}from"@babel/parser";import{FormBlockIdSchema as uP,FormSpecV1Schema as dP}from"@vcp-dev/contracts";var br="components/site/generated/forms",fP=`${br}/vcp-form-runtime.tsx`,Ho="[A-Za-z0-9][A-Za-z0-9_-]{0,127}",pP=new RegExp(`^${br}/form-(${Ho})\\.spec\\.ts$`),mP=new RegExp(`^${br}/form-(${Ho})\\.tsx$`),gP=new RegExp(`^@/${br}/form-(${Ho})$`),hP=new RegExp(`(?:^|/)${br}/form-(${Ho})(?:\\.tsx?)?$`);var yP=Symbol("invalid-literal");import{createHash as bP}from"node:crypto";import{posix as IP}from"node:path";import{parse as kP}from"@babel/parser";import{FormSpecV1Schema as RP}from"@vcp-dev/contracts";var wP=Symbol("dynamic");import{parse as AP}from"@babel/parser";import{parse as yI}from"@babel/parser";var $f=["page","anchor","external","email","phone","group","file"],xI=["link","cta"],Uf=["description","badge","iconKey"],Na=["label","targetType","href","role","openInNewTab","nofollow","children",...Uf],SI=new Set(Na);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 bI(e){let t=e;if(t?.type==="Identifier")return t.name;if(t?.type==="StringLiteral"&&typeof t.value=="string")return t.value}function Vf(e){let t=e;return t?.type==="BooleanLiteral"&&typeof t.value=="boolean"?t.value:void 0}function Pa(e){let t=[],n;try{n=yI(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=Kf(i,`NAV_ITEMS[${s}]`,t);a&&o.push(a)}),{items:o,diagnostics:t}}function Kf(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=bI(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||!$f.includes(i))return n.push({severity:"fatal",path:`${t}.targetType`,message:`targetType must be one of ${$f.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 Uf){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))SI.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 ${Na.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=Kf(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&&(xI.includes(c)?s.role=c:n.push({severity:"warning",path:`${t}.role`,message:"role ignored: not link/cta"})),r.openInNewTab!==void 0){let l=Vf(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=Vf(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 EI}from"@babel/parser";function vr(e){return Array.isArray(e)?e:[]}function Jf(e){let t=e;for(;t?.type==="TSAsExpression"||t?.type==="TSSatisfiesExpression";)t=t.expression;return t?.type==="ArrayExpression"?t:void 0}function Aa(e,t){let n=Xf(t);if(!n)return{status:"unsupported",source:e};let r;try{r=EI(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=Jf(o[0]?.init);if(!i)return{status:"unsupported",source:e};if(Pa(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(vI(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=II(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 II(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 Jf(t.value)}}function Xf(e){let t=e.trim();return t.startsWith("/")?t==="/"?t:t.replace(/\/+$/,""):null}function vI(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"&&Xf(n??"")===t}import QP from"node:fs";import eA from"node:path";var kI=/^page\.(?:tsx|ts|jsx|js|mjs|cjs)$/;function kr(e){let t=e.map(r=>FI(r.path)),n=CI(t);return n?t.filter(r=>wI(n,r)).map(r=>({routeId:NI(n,r),entryFile:r})).sort((r,o)=>r.routeId.localeCompare(o.routeId)):[]}function Go(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 CI(e){return e.some(r=>r.startsWith("app/")&&!RI(r))?"app":e.some(r=>r.startsWith("src/app/"))?"src/app":null}function RI(e){return e.startsWith("app/_vcp/")||e.startsWith("src/app/_vcp/")}function wI(e,t){if(!t.startsWith(`${e}/`))return!1;let n=t.slice(t.lastIndexOf("/")+1);return kI.test(n)?t.slice(e.length+1,-n.length-1).split("/").filter(Boolean).every(r=>!r.startsWith("_")):!1}function NI(e,t){let n=t.slice(e.length+1).split("/").slice(0,-1).map(AI).filter(r=>!!r);return n.length===0?"/":`/${n.join("/")}`}function PI(e){return e.startsWith("(")&&e.endsWith(")")}function AI(e){return!e||e.startsWith("@")||e.startsWith("_")||PI(e)?null:TI(e)}function TI(e){return e.replace(/^\((?:\.|\.\.|\.\.\.)\)/,"")}function _I(e){let t=e.trim();return!t||t==="/"?"":(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function FI(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}var DI="components/site/generated/",Cr=[".tsx",".ts",".jsx",".js"];function zf(e){if(e.expectedUrlPath===OI)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])=>t.has(p.replace(/\\/g,"/"))?LI(m)===e.expectedUrlPath:!1);if(n.length===0)return{ok:!1,code:"ROUTE_NOT_FOUND",message:"No route uniquely matches PAGE_SEO.path."};if(n.length>1)return{ok:!1,code:"ROUTE_AMBIGUOUS",message:"Multiple routes match PAGE_SEO.path."};let[r]=n[0],o=jI(e.files);if(!o.ok)return o.error;let i=o.graph,s=KI(r,i),a=JI(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=Aa(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 LI(e){let t;try{t=MI(e,{sourceType:"module",plugins:["typescript","jsx"]})}catch{return null}for(let n of Ta(t.program.body)){let r=n.type==="ExportNamedDeclaration"?n.declaration:n;if(r?.type==="VariableDeclaration")for(let o of Ta(r.declarations)){let i=o.id;if(i?.type!=="Identifier"||i.name!=="PAGE_SEO")continue;let s=BI(o.init);if(s?.type!=="ObjectExpression")return null;for(let a of Ta(s.properties)){if(a.type!=="ObjectProperty"||a.computed)continue;let c=a.key,l=a.value;if((c?.name==="path"||c?.value==="path")&&l?.type==="StringLiteral"&&typeof l.value=="string")return l.value}return null}}return null}function Ta(e){return Array.isArray(e)?e:[]}function BI(e){let t=e;for(;t?.type==="TSAsExpression"||t?.type==="TSSatisfiesExpression"||t?.type==="ParenthesizedExpression";)t=t.expression;return t}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")||!$I(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(VI(c))continue;let l=Ti(r,c),u=UI(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 $I(e){let t=e.toLowerCase();return Cr.some(n=>t.endsWith(n))}function VI(e){return!!(/\.([a-z0-9]+)$/i.exec(e)&&!Cr.some(n=>e.endsWith(n)))}function UI(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 KI(e,t){let n=new Set,r=[...t.get(e)??[]];for(;r.length>0;){let o=r.pop();!o.startsWith(DI)||n.has(o)||(n.add(o),r.push(...t.get(o)??[]))}return n}function JI(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 XI}from"@vcp-dev/contracts";var zI={affectedCompositions:[]};function Qf(e){let t=null,n=new WeakMap;async function r(){return t??=WI(e),t}return{async prepareAppend(o){let i=await e.readIndex(),s=await e.stageAppend(Yf(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);Wf(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(Wf(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(Yf(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 Wf(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 WI(e){let t=await e.readIndex(),n=await Promise.all(t.undoIds.map(async o=>Hf(e,o))),r=await Promise.all(t.redoIds.map(async o=>Hf(e,o)));return{undo:n.reverse(),redo:r.reverse(),entryIds:[...t.entryIds],cursor:t.cursor}}async function Hf(e,t){let n=await e.readEntry(t),r=HI(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 Gf(e,n,r.preSnapshots),postSnapshots:await Gf(e,n,r.postSnapshots)}}async function Gf(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(ZI(r,o.blobName))).toString("utf8"):"";return{file:o.file,content:i,version:o.version,exists:o.exists,...o.sha256?{sha256:o.sha256}:{}}}))}function Yf(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=GI(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 HI(e){if(!ep(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:qf(t.provenance)}:{},preSnapshots:Zf(t.preSnapshots,"preSnapshots"),postSnapshots:Zf(t.postSnapshots,"postSnapshots")}}function GI(e){if(e.provenance!==void 0)return qf(e.provenance);if(e.composition)return{initiatingComposition:e.composition,affectedCompositions:[]}}function qf(e){let t=XI.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 Zf(e,t){return e.map((n,r)=>{if(!ep(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&&!YI(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 YI(e){return/^sha256:[0-9a-f]{64}$/.test(e)}function ZI(e,t){let n=e.get(t);if(!n)throw new Error(`durable history blob is missing: ${t}`);return n}function ep(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import tp from"node:path";function Fa(){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 rp(e,t,n){let r=[],o=new Set;for(let i of e.intents){let s=tv(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 Yo(e){let t=()=>QI(e);return e.mutex?e.mutex.runExclusive(t):t()}async function QI(e){let t=await rp(e.plan,e.overlay,e.exists);if(!t.ok)return{ok:!1,stage:"precheck",reason:t.reason,error:t,recoveryRequired:!1};let n=qI(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 _a({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 _a({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 _a({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 np("swap",l,"Live state swap failed after durable publish.")}try{await e.finalizeCandidate?.(c)}catch(l){return np("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 qI(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 _a(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:ev(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 np(e,t,n){return{ok:!1,stage:e,reason:n,error:t,recoveryRequired:!0}}function ev(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 tv(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)||tp.isAbsolute(e))return{ok:!1,code:"unsafe-path",path:e,reason:`Unsafe file path: ${e}`};let t=tp.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 Ma(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 op(e,t){for(let n of t){if(n.exists===!1){e.delete(n.file);continue}e.set(n.file,n.content)}}function Oa(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 ip(e){return{path:e.path,code:e.code,message:e.message,...e.details?{details:JSON.parse(JSON.stringify(e.details))}:{}}}function nv(e){return e.map(t=>`${t.code} (${t.path}): ${t.message}`).join("; ")}var Rr=class extends Error{constructor(t){let n=t.map(ip);super(nv(n)),this.name="RouteBuildDiagnosticsError",this.diagnostics=n}};function sp(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(ip)}:{routeId:e,message:n}}function Da(e){return e.map(({routeId:t,message:n})=>`${t}: ${n}`).join("; ")}function ap(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 Zo,SiteEditCompositionContextSchema as rv,SiteEditCompositionSelectorSchema as ov}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 cp(e,t){throw new Pe("INVALID_COMPOSITION",e,{value:t})}function Qo(e){let t=rv.safeParse(e);return t.success?t.data:cp("Invalid SiteEditCompositionContext.",e)}function lp(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=Zo(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=Zo(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=ov.safeParse(l);if(!u.success)return cp("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=Zo(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=Zo(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 fv=/^(?:src\/)?app\/.*\/?page\.[cm]?[jt]sx?$/,pv=["layout.tsx","layout.ts","layout.jsx","layout.js","layout.mjs","layout.cjs"],up=32,dp=256;function mv(e){return{expectedIndexDigest:e.digest,publishedIndexDigest:e.digest,publishedCursor:e.cursor,publishedCurrentId:e.currentId}}var fp={maxEntries:50,maxBytes:8*1024*1024};function gv(){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 hv(){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>fp.maxEntries||yv(e)>fp.maxBytes;)e.shift()}}function yv(e){return e.reduce((t,n)=>t+xv(n),0)}function xv(e){return pp(e.preSnapshots)+pp(e.postSnapshots)+Sv(e.provenance)}function Sv(e){return e?new TextEncoder().encode(JSON.stringify(e)).byteLength:0}function pp(e){return e.reduce((t,n)=>t+n.file.length+n.content.length,0)}function mp(e,t){return{key:iv(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 bv(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 ti=class extends Error{constructor(t){super(t.reason),this.result=t}},an=class extends Error{constructor(t){super(Da(t)),this.failedRoutes=t}};function gp(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 Ev=/\.(?:[cm]?[jt]sx?)$/i,Iv=/\.json$/i,vv=/\.(?:css|scss|sass)$/i,kv=/\.mdx$/i,Cv=/\.ya?ml$/i;function Rv(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 wv(e){return{kind:e.isProxy?"component-proxy":"jsx-node",file:e.file,componentName:e.componentName,isProxy:e.isProxy}}function Nv(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=Ep(await e.listFiles(r)),i=new Map(o.files.map(a=>[a.path,a]));for(let[a,c]of n)if(Pv(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 Pv(e,t){return t.length===0?!0:t.some(n=>e===n||e.startsWith(`${n}/`))}function Ep(e){return Array.isArray(e)?{files:e}:e}function Av(e){if(!cv(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!==uv||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=av(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(Ev.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(Iv.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(vv.test(e.path)){let t=hp({content:e.content,path:e.path,profile:"css"});if(!t.ok)return t}if(kv.test(e.path)){let t=hp({content:e.content,path:e.path,profile:"mdx"});if(!t.ok)return t}if(Cv.test(e.path))try{dv(e.content)}catch(t){return{ok:!1,errorCode:"ast-error",message:`YAML parse failed: ${Fe(t)}`,details:{path:e.path}}}return{ok:!0}}function hp({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
|
-
`||p==="\r"))return
|
|
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
|
|
13
|
-
`||p==="\r"}if(s)return Bn(t,`Unterminated block comment in ${t}.`);if(o)return Bn(t,`Unterminated string literal in ${t}.`);if(c)return Bn(t,`Unterminated MDX code fence in ${t}.`);let u=r.at(-1);return u?Bn(t,`Unclosed token "${u.char}" in ${t}.`):{ok:!0}}function Bn(e,t){return{ok:!1,errorCode:"ast-error",message:t,details:{path:e}}}function wr(e){let t="idle",n=e.fileSystem??dv(),r=yf(),o=lp({compositions:e.compositions,initialDocumentVersions:e.initialDocumentVersions}),i=new Map,s=new Map,a=new Set,c=null,l=e.history??(e.historyStore?Qf(e.historyStore):fv()),u=hf(n,{externalAdapters:e.externalAdapters}),d=new Map,p=new Set,m=0,g=e.historyStore?.recoveryRequired??!1,S=_a(),C=B();function v(f){return(Go.isAbsolute(f)?Go.relative(e.projectRoot,f):f).replace(/\\/g,"/").replace(/^\.\//,"")}function P(f,y){let h=Go.posix.dirname(f),I=y.replace(/\.(?:tsx?|jsx?)$/i,""),R=Go.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(ap({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=mp(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=xd(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 Un=await Sd({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:bi,capabilities:Ei})=>({sourceType:Ze,adapterId:bi,capabilities:Ei})),functionCallContracts:e.functionCallContracts,fileCache:F}),Re=await zs({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:bi,capabilities:Ei})=>({sourceType:Ze,adapterId:bi,capabilities:Ei})),functionCallContracts:e.functionCallContracts,fileCache:F}),pn=Iv(Un);Ie.set(pe.index,pn),Y.set(pe.index,Un),ge.set(pe.index,Re),_.push({editable:pe.editable,source:pn})}let j=new Map;if(Q)for(let pe of K.attributes??[]){let Un=await bd({file:K.sourceFile,source:Q,sourceRange:pe.sourceRange,expression:pe.source?.expression??pe.value,sourceInfo:pe.source,readFile:Re=>n.readFile(Re),exists:T,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Re,adapterId:pn,capabilities:Ze})=>({sourceType:Re,adapterId:pn,capabilities:Ze})),functionCallContracts:e.functionCallContracts,fileCache:F});j.set(pe.name,Un)}let z=Gl(vv(me.writeTarget),_),oe=eu({key:$,element:K,graph:f,provenances:ge}),Se=ou(K),Je=iu(K),dn=su(K),fn=Q?await Hd({element:K,graph:f,file:K.sourceFile,source:Q,readFile:pe=>n.readFile(pe),exists:T,fileCache:L}):void 0,$t=f.regions.find(pe=>pe.kind==="conditional-region"&&pe.childKeys.includes($)),Te,Vn=$t?.sourceCandidates?.[0];if(Q&&$t&&Vn?.kind==="conditional-branch"){let pe=await zs({file:K.sourceFile,source:Q,target:{kind:"conditional-branch",candidate:Vn},readFile:Re=>n.readFile(Re),exists:T,graph:f,externalSourceResolvers:e.externalSourceResolvers,externalAdapters:e.externalAdapters?.map(({sourceType:Re,adapterId:pn,capabilities:Ze})=>({sourceType:Re,adapterId:pn,capabilities:Ze})),functionCallContracts:e.functionCallContracts,fileCache:F});Te={currentBranch:$t.childKeys.indexOf($)<=0?"then":"else",availableBranches:$t.childKeys.length>1?["then","else"]:["then"],conditionExpression:Vn.conditionExpression,provenance:{finalSource:pe.finalSource?{kind:pe.finalSource.kind,file:pe.finalSource.file,displayPath:pe.finalSource.displayPath}:null,chain:pe.chain.map(Re=>({kind:Re.kind,file:Re.file,displayName:Re.displayName,canEditHere:Re.canEditHere})),confidence:pe.confidence,editMode:pe.editMode,diagnostics:pe.diagnostics.map(Re=>({code:Re.code,message:Re.message}))}}}A.set($,{textSources:Ie,textTargets:Y,elementPropertyTargets:j,provenances:ge,writeTarget:z,componentSemantic:oe,contentModel:Se,mediaModel:Je,styleSource:dn,conditional:Te,dynamicData:fn})}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??Fa(d,[]),A=await xe(I.entryFile),{graph:F,allSources:L,diagnostics:T,parsedModules:$,entryModule:K}=await Xc(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 Cr(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,Vn]of L)Ma(R,Te,Vn,dp);let Ie=await Et(I.composition,I.entryFile,L,R);F.routeId=I.routeId,F.composition=I.composition;let Y=zc(F),ge=Hc(Y,F),_=await D(F,Y,L,R,$),j=sm(F,ge,_),z=im(_),oe=Bv(Jl(F,Y,ge,{canUpdateTextByKey:j,dynamicDataSummaryByKey:z}),F,_),Se=Dl({route:I.routeId,composition:I.composition,entryFile:I.entryFile,version:Q,source:y,ast:K?.ast}),Je=Ll(Se);Se.ok&&Nv(oe,F,Se.projection);let dn={...oe,composition:I.composition,...Ie?{styleContext:Ie}:{},pageComposition:Je},fn=new Set([I.entryFile,...L.keys()]);if(Ie){fn.add(Ie.entryCss.path);for(let Te of Ie.stylesheets)fn.add(Te.path)}let $t={...I,dependencyFiles:fn,graph:F,topology:Y,capabilities:ge,document:dn,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:hv(dn),detailProjections:_,fileVersions:me,styleContext:Ie};if(h.publish===!1)return $t;Ln(d,R);for(let Te of R.keys())p.delete(Te);return ne(I,fn),Object.assign(I,$t),I}async function xe(f){let y=[];for(let h of _v(f))typeof n.exists=="function"&&await n.exists(h)&&y.push({file:h,source:await n.readFile(h)});return y}async function Et(f,y,h,I){let R=[];for(let[$,K]of h){if(La($)){R.push($);continue}for(let me of Mv(K)){let Q=Sp($,me);Q&&R.push(Q)}}if(!R.length){for(let $ of Fv(y))if(await gc($)){R.push($);break}}let A=new Map,F=kp(R).slice(0,up);for(;F.length>0&&A.size<up;){let $=F.shift();if(A.has($)||!La($))continue;let K=await It($,I);if(K!==null){A.set($,{path:$,content:K});for(let me of Ov(K)){let Q=Sp($,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 It(f,y){let h=y.get(f);if(h!==void 0)return h;if(!await gc(f))return null;let I=await n.readFile(f);return Ma(y,f,I,dp),I}async function gc(f){return typeof n.exists=="function"?n.exists(f):!1}function im(f){let y=new Map;for(let[h,I]of f)I.dynamicData?.bindings.length&&y.set(h,sf(I.dynamicData.bindings));return y}function sm(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||am(K)});I.set(R,T)}return I}function am(f){return f.editMode==="direct"||f.editMode==="proxy"||f.editMode==="upstream"}async function Lr(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())hc(T,h)&&R.add(T.key);let A=!I&&R.size===0&&h.some(xp),F=y.publish===!1?Fa(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({...sp(T.routeId,K),composition:T.composition})}return L}function cn(f){let y=[...new Set(f)],h=X(y);if(h.size>0&&M(y))return[...h];for(let I of i.values())hc(I,y)&&h.add(I.key);return[...h]}function cm(f){let y=new Set(cn(f));return o.entries.filter(h=>y.has(h.key)).map(h=>h.context)}function lm(f){return[...new Set(cn(f))].sort((h,I)=>h<I?-1:h>I?1:0).map(h=>o.getByKey(h)?.context).filter(h=>h!==void 0)}function um(f,y){let h=new Set(cn(y)),I=f.provenance?.affectedCompositions??[];if(I.length===0)return h;let R=new Set(I.map(A=>o.resolveContext(A).key));if(R.size!==h.size||[...R].some(A=>!h.has(A)))throw new Error("History provenance does not match the affected composition index.");return R}function dm(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(cn(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 gi(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 hc(f,y){return y.some(h=>f.dependencyFiles.has(h)||f.entryFile===h||f.graph?.fileIndex.has(h))}function yc(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 fm();let h=[...a];a.clear();let I=await xc(h);if(I.length===0)continue;let R=cn(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 Lr(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&&yc([])}})())}async function fm(){for(;m>0;)await new Promise(f=>setTimeout(f,0))}async function xc(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(!wv(R))try{if(await n.exists(h))continue}catch{continue}p.add(h),y.push(h)}}return y}function Sc(f){op(d,f);for(let y of f)y.exists===!1?p.add(y.file):p.delete(y.file)}function bc(f){p.clear();for(let y of f)p.add(y)}async function Ec(f){let y=await xc(f);if(y.length===0)return;let h=cn(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 Lr(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 pm(f,y){let h=$n(f,y);if(!h?.graph)return;let I=$e(f)??f,R=h.graph.elements.get(I);R&&await Ec([R.sourceFile])}async function Ic(f){let y=new Set;if(f.target.kind==="node"){let h=$n(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 Ec(y)}async function mm(f){if(f.params.kind!=="source-edit")return hi(f,"invalid-params","source-edit requires source-edit params");for(let y of f.params.edits){let h=Rv(y);if(!h.ok)return hi(f,h.errorCode,h.message,h.details)}m+=1;try{let y=await bm(f.params.edits);if(!y.ok)return hi(f,y.errorCode,y.message,y.details);await Ic(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 un({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 gm(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 Ra({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 ka({artifact:f.params.artifact,exists:I=>n.exists(I)});return h.ok?await un({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 hm(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=Ep(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=zf({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 un({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 ym(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 Ra({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 Nf({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=wm(T.instanceName),Y=ts({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,Tc(Y.error.code),Y.error.message,{diagnostics:Y.error.diagnostics})};let ge=Y.plan.returnStep?Tl({source:$,jsx:Y.plan.returnStep.node.jsx,placement:Y.plan.returnStep.placement,...Y.plan.returnStep.replaceOriginal?{replaceOriginal:!0}:{}}):Y.plan.insertStep?.parentLocator?kn({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 _=wn({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 un({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 xm(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=_l({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,Tc(A.error.code),A.error.message,{diagnostics:A.error.diagnostics});let F=A.plan.rewriteStep.kind==="move-node"?Rn({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}:{}}):In({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 Sm({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 un({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 Sm(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),_=Nn({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 bm(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=Em(f);if(y.length===0)return{ok:!0};let h=kv(n,f),I=wr({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 Em(f){return f.map(h=>h.path).some(xp)?[...i.keys()]:[]}function hi(f,y,h,I){let R=Rr(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 yi(f){let y=[];for(let h of new Set(f))y.push(await Im(h));return y}async function Im(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 vc(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 kc(f){return!f||!e.historyStore||await e.historyStore.writeTransactionJournal(f),f}async function ln(f){f&&e.historyStore&&await e.historyStore.clearTransactionJournal(f.transactionId)}async function xi(f,y){let h=[];try{for(let I of f)await Cc(I),typeof n.bumpVersion=="function"&&n.bumpVersion(I.file),h.push(I.file)}catch(I){let R=await vm(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(km)}}async function Cc(f){if(f.exists===!1){await n.deleteFile(f.file);return}await n.writeFile(f.file,f.content)}async function vm(f){let y=[];for(let h of f)try{await Cc(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 km(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 un(f){return S.runExclusive(()=>Cm(f))}async function Cm(f){let y=f.filePlan.edits.map(_=>_.file),h=o.resolveSelector(f.request.composition).context,I=f.historyPolicy==="none"?void 0:{initiatingComposition:h,affectedCompositions:lm(y)},R=await yi(y),A=new Map(R.filter(_=>_.exists!==!1).map(_=>[_.file,_.content])),F=wc(),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?uv(await e.historyStore.readIndex()):null;if(e.historyStore&&!j)throw new Error("Durable history did not provide an exact index transition.");return Q=await vc(f.request.id,R,K,j),Q=await kc(Q),{history:_,historyTransition:j}},reverify:async()=>{},writeCandidate:async()=>{let _=await u.executeFilePlan(f.filePlan);if(!_.ok)throw new Zo(_);return{postSnapshots:await yi(_.affectedFiles),affectedFiles:_.affectedFiles,internalResultVersion:_.resultVersion}},validateCandidate:async({candidate:_,receipt:j})=>{let z=await Lr(j.affectedFiles,{changed:!0,minimumVersion:j.internalResultVersion,publish:!1,excludedCompositionKeys:$});if(z.failedRoutes.length>0)throw new on(z.failedRoutes);let oe=Nc(F,z.candidateRouteStates??[]),Se=Math.max(j.internalResultVersion,...z.rebuiltRoutes.map(Je=>Je.version));return{..._,rebuild:z,routeSnapshots:oe,resultVersion:Se,...gp(f.selectionRef,oe.map(Je=>Je.state.document))?{selectionRef:gp(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&&Br(_.routeSnapshots),_.rebuild?.candidateSourceCache&&Ln(d,_.rebuild.candidateSourceCache),Sc(j.postSnapshots)},finalizeCandidate:async()=>{await ln(Q);for(let _ of $)i.delete(_)},emitCommitted:({candidate:_,published:j})=>{gi(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 xi(R,j.postSnapshots);if(!z.ok)throw new Error(z.reason)}Br(F),Ln(d,L),bc(T),_?.history&&await l.discardPrepared?.(_.history),await ln(Q)}});if(Y.ok)return Y.published;if(Y.stage==="precheck"||Y.stage==="build")try{await ln(Q)}catch(_){let j=await jr(Fe(_));return ee(f.request,j,"Unable to clear an uncommitted transaction journal.")}if(Y.recoveryRequired){let _=await jr(Y.reason);return ee(f.request,_===O.RECOVERY_PERSIST_FAILED?_:O.ROLLBACK_FAILED,Y.reason)}let ge=Y.error;return ge instanceof Zo?{...ee(f.request,Rr(ge.result.errorCode),ge.result.reason),...ge.result.affectedFiles?{affectedFiles:ge.result.affectedFiles}:{}}:ge instanceof on?ee(f.request,O.ROUTE_REBUILD_FAILED,`Route rebuild failed and source was rolled back: ${Oa(ge.failedRoutes)}`,{failedRoutes:ge.failedRoutes}):ee(f.request,Ac(Y.stage),Fe(ge))}async function Rc(f){return S.runExclusive(async()=>{let y=f==="undo"?await l.prepareUndo():await l.prepareRedo();return y?Rm(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 Rm(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}=dm(h,A),T=await yi(A),$=new Map(T.filter(z=>z.exists!==!1).map(z=>[z.file,z.content])),K=he(L),me=wc(),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 vc(`${f}:${h.operationId}`,T,I,y.historyTransition),Y=await kc(Y),y),reverify:async()=>{},writeCandidate:async()=>{let z=await xi(I,R);if(!z.ok)throw new Error(z.reason);return{snapshots:z.snapshots}},validateCandidate:async({candidate:z})=>{_=um(h,A);let oe=await Lr(A,{changed:!0,minimumVersion:K+1,publish:!1,affectedCompositionKeys:_});if(oe.failedRoutes.length>0)throw new on(oe.failedRoutes);let Se=Nc(me,oe.candidateRouteStates??[]),Je=Math.max(K+1,...oe.rebuiltRoutes.map(dn=>dn.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&&Br(z.routeSnapshots),z.rebuild?.candidateSourceCache&&Ln(d,z.rebuild.candidateSourceCache),Sc(oe.snapshots)},finalizeCandidate:async()=>{await ln(Y)},emitCommitted:({candidate:z,published:oe})=>gi(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 xi(R,oe.snapshots);if(!Se.ok)throw new Error(Se.reason)}Br(me),Ln(d,Q),bc(Ie),z&&await l.discardPrepared?.(z),await ln(Y)}});if(j.ok)return j.published;if(j.stage==="precheck"||j.stage==="build")try{await ln(Y)}catch(z){let oe=await jr(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 jr(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 on?O.ROUTE_REBUILD_FAILED:Ac(j.stage),message:Fe(j.error),...j.error instanceof on?{details:{failedRoutes:j.error.failedRoutes}}:{}}}}function wc(){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 Nc(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 Br(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 Si(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 $n(f,y){let h=i.get(o.resolveSelector(y).key)??null;return!h||!Pc(h,f)?null:h}function Pc(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 Ac(f){return f==="validate"?O.ROUTE_REBUILD_FAILED:f==="publish"?O.HISTORY_COMMIT_FAILED:O.WRITE_IO_ERROR}async function jr(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 wm(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 Tc(f){return f==="VERSION_STALE"?O.VERSION_STALE:f==="CROSS_PAGE_MOVE_UNSUPPORTED"?O.CROSS_PAGE_MOVE_UNSUPPORTED:O.UNSUPPORTED_OPERATION}async function _c(f){if(f.target.kind==="route"){let h=i.get(o.resolveSelector(f.target.composition).key)??null;return h?(h.graph||await Si(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 Si(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 Si(y.key),Pc(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=mp(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=$n(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=zl(I,h.graph,h.topology,h.capabilities,R.textSources,R.provenances,R.dynamicData);return f===I?A:Jv(A,f,h.document??null,h.documentIndex?.entriesByKey)}}throw new Error(`Key not found: ${f}`)},getRenderDetail(f,y){let h=$n(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=Xl(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:Kv(A,f,h.document??null,h.documentIndex?.entriesByKey)}}throw new Error(`Key not found: ${f}`)},getClassNameSource(f,y){let h=$n(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 lu({key:I,route:{composition:h.composition,routeId:h.routeId,graph:h.graph,source:A}})},refreshSourceForKey:pm,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 mm(f);if(f.kind==="insert-page-resource")return gm(f);if(f.kind==="delete-page-source")return hm(f);let y=await _c(f);if("ok"in y)return y;await Ic(f);let h=await _c(f);if("ok"in h)return h;let I=h;if(f.target.kind==="page-unit"){let L=f;return f.kind==="insert-child"?ym(L,I):f.kind==="move-node"||f.kind==="remove-node"?xm(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=Av(I,I.graph,I.capabilities,d,i),A=await new Ao(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:Rr(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,Rr(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 gi($,{rebuiltRoutes:[],failedRoutes:[]}),$}let L=await u.prepareRewritePlan(F);return L.ok?await un({request:f,filePlan:L.filePlan,...L.selectionRef?{selectionRef:L.selectionRef}:{}}):ee(f,Rr(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 Rc("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 Rc("redo")}finally{m-=1}},notifyFileChanged(f){yc([f])},getAffectedCompositions(f){return cm(f)},subscribe(f){return r.subscribe(f)}}}function wv(e){return e instanceof Error&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR")}function Nv(e,t,n){let r=new Map,o=new Map;for(let s of t.elements.values()){if(s.sourceFile!==n.entryFile||!s.importedFrom||!/^[A-Z]/.test(s.tag))continue;let a=n.placements.find(l=>l.members.some(u=>u.sourceRange!==null&&Da(s.sourceRange,u.sourceRange)));if(!a)continue;let c=a.placementUnitKey;if(r.set(`${s.importedFrom}#${s.tag}`,c),s.exportName==="default"){let l=o.get(s.importedFrom)??new Set;l.add(c),o.set(s.importedFrom,l)}s.exportName&&s.exportName!=="default"&&s.exportName!==s.tag&&r.set(`${s.importedFrom}#${s.exportName}`,c)}let i=n.placements.find(s=>s.placementKey===n.container.placementKey&&s.relation==="append");for(let s of e.entries){let a=$e(s.key)??s.key,c=t.elements.get(s.key)??t.elements.get(a);if(!c)continue;if(c.sourceFile===n.entryFile){if(n.container.sourceRange&&Da(c.sourceRange,n.container.sourceRange)&&i){s.pageCompositionUnitKey=i.placementUnitKey;continue}let d=n.placements.find(p=>p.members.some(m=>m.sourceRange!==null&&(Da(c.sourceRange,m.sourceRange)||Pv(m.sourceRange,c.sourceRange))));if(d){s.pageCompositionUnitKey=d.placementUnitKey;continue}}let l=r.get(`${c.sourceFile}#${c.componentName}`);if(l){s.pageCompositionUnitKey=l;continue}let u=o.get(c.sourceFile);u?.size===1&&(s.pageCompositionUnitKey=u.values().next().value)}}function Da(e,t){return e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}function Pv(e,t){return yp(e.startLine,e.startColumn,t.startLine,t.startColumn)<=0&&yp(e.endLine,e.endColumn,t.endLine,t.endColumn)>=0}function yp(e,t,n,r){return e!==n?e-n:t-r}function Av(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 bp(e.detailProjections?.get(p.baseKey)?.textTargets.get(d)??null,p.repeatIndex)},async getElementPropertyWriteTarget(u,d){let p=c(u);return bp(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=iv(u);return d?{baseKey:d.baseKey,repeatIndex:$v(e.document??null,u,d.baseKey,e.documentIndex)??jv(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 Tv={"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 Rr(e){return Tv[e]}function Fe(e){return e instanceof Error&&e.message?e.message:String(e)}function xp(e){return/\.(?:[cm]?[jt]sx?|css|scss|sass|mdx|json)$/i.test(e)}function _v(e){let t=sn(e);if(!cv.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=>lv.map(a=>`${s}/${a}`))}function Fv(e){let n=sn(e).startsWith("src/app/")?"src/app":"app";return[`${n}/globals.css`,`${n}/global.css`]}function Mv(e){return Ip(e,/\bimport\s+(?:[^'";]+?\s+from\s+)?["']([^"']+\.css(?:\?[^"']*)?)["']/g)}function Ov(e){return Ip(e,/@import\s+(?:url\(\s*)?["']([^"']+)["']/g)}function Ip(e,t){let n=[];for(let r of e.matchAll(t)){let o=vp(r[1]??"");o&&n.push(o)}return n}function Sp(e,t){let n=vp(t);return!n||n.startsWith("tailwindcss")||n.startsWith("http:")||n.startsWith("https:")?null:n.startsWith("@/")?sn(`src/${n.slice(2)}`):n.startsWith("./")||n.startsWith("../")?sn(`${Dv(e)}/${n}`):n.startsWith("/")?sn(n.slice(1)):La(n)?sn(n):null}function vp(e){return e.split(/[?#]/,1)[0]?.trim()??""}function La(e){return/\.css$/i.test(e)}function Dv(e){let t=sn(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}function kp(e){return Array.from(new Set(e))}function sn(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 Lv(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 Yo(e){return e?.map(t=>({...t}))}function bp(e,t){if(t===null||e?.kind!=="value-binding"||e.sourceKind!=="repeat-template")return e;let n=e.collectionIndexMap?.[t]??t,r=Yo(e.collectionPathMap?.[t])??Yo(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:Yo(e.path),locator:e.locator?{...e.locator,path:r}:e.locator,collectionIndexMap:e.collectionIndexMap?[...e.collectionIndexMap]:void 0,collectionPathMap:e.collectionPathMap?.map(o=>Yo(o)??[])}}function Bv(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)=>nv(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=kp([...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 Vv(P))w.length<=g.length||Uv(w,g)&&S.add(w[g.length])}}return S.size>0?S.size:Lv(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 jv(e){let t=e.parts.at(-1);return typeof t?.repeatIndex=="number"?t.repeatIndex:null}function $v(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 Vv(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 Uv(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 Kv(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 Jv(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 Ua from"node:path";import{TextDecoder as Xv}from"node:util";import{SITE_EDIT_SOURCE_ALLOWED_APP_FILES as Rp,SITE_EDIT_SOURCE_ALLOWED_DIRS as wp,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as Np,SiteEditCompositionContextSchema as zv,SiteEditSourceFileResponseSchema as Ba,SiteEditSourceLocationSchema as Wv,SiteEditSourcePathSchema as Qo,SiteEditSourceTreeResponseSchema as Hv,isSiteEditTextSourcePath as Gv}from"@vcp-dev/contracts";var Yv=[...Np,...Rp,...wp];function Ka(e){if(!e.composition)throw new Error("Composition unavailable for source access policy.");return zv.parse(e.composition)}var ja=2e3,$a=12,Va=24*1024*1024,Cp=512*1024,Zv=new Set(["image/avif","image/gif","image/jpeg","image/png","image/webp","image/x-icon"]),Qv={".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"},qv={".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"},ek=new Xv("utf-8",{fatal:!0});async function qo(e,t={}){let n=Ka(t),{files:r,truncated:o}=await ck(e,t),i=dk(r.map(s=>s.metadata));return Hv.parse({composition:n,nodes:i,defaultPath:fk(r.map(s=>s.metadata)),totalFiles:r.length,...o?{truncated:o}:{}})}async function ei(e,t,n={}){let r=Ka(n),o=Qo.parse(t.path),i=await rk(e,o,n);if(!i)throw new Error(`Source file not found: ${o}`);if(Ja(o)){let a=Tp(o),c=await ik(e,{path:o,sizeBytes:i.sizeBytes,mimeType:a});return Ba.parse({composition:r,path:o,kind:"binary",language:null,sizeBytes:i.sizeBytes,mimeType:a,readonly:!0,...c})}let s=await tk(e,o);return s.ok?Ba.parse({composition:r,path:o,kind:"text",language:_p(o),sizeBytes:s.sizeBytes,contentHash:ue(s.content),readonly:!1,content:s.content}):Ba.parse({composition:r,path:o,kind:"binary",language:null,sizeBytes:s.sizeBytes,mimeType:"application/octet-stream",readonly:!0,previewUnavailableReason:"unsupported-mime"})}async function tk(e,t){if(e.readFileBytes){let o=await e.readFileBytes(t),i=nk(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 nk(e){if(e.includes(0))return null;try{return ek.decode(e)}catch{return null}}async function rk(e,t,n){if(!sk(t,n))return null;let r=await ok(e,t);return r?{path:t,sizeBytes:r.sizeBytes}:null}async function ok(e,t){if(e.getFileInfo)return e.getFileInfo(t);if(e.listFiles){let o=Pp(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(Ja(t))return{path:t,sizeBytes:0};let n=await e.readFile(t);return{path:t,sizeBytes:Buffer.byteLength(n,"utf8")}}async function ik(e,t){if(!Zv.has(t.mimeType))return{previewUnavailableReason:"unsupported-mime"};if(t.sizeBytes>Cp)return{previewUnavailableReason:"too-large"};if(!e.readFileBytes)return{previewUnavailableReason:"bytes-unavailable"};let n=await e.readFileBytes(t.path);return n.byteLength>Cp?{previewUnavailableReason:"too-large"}:{contentBase64:Buffer.from(n).toString("base64")}}function sk(e,t){return Np.some(n=>n===e)||Rp.some(n=>n===e)||wp.some(n=>e===n||e.startsWith(`${n}/`))?!0:!e.startsWith("app/")&&!e.startsWith("src/app/")?!1:(t.routeEntryFiles??[]).some(n=>{let r=Qo.safeParse(n);return r.success&&r.data===e})}function ti(e,t){if(!t.sourceLocator)throw new Error(`Source location not available for key: ${e.key}`);return Wv.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 Pp(e){return Array.isArray(e)?{files:e}:e}function ak(e){return["max-files","max-depth","max-total-bytes"].filter(n=>e.includes(n))}async function ck(e,t){if(!e.listFiles)throw new Error("Source file listing is unavailable.");let n=Pp(await e.listFiles({roots:lk(t),maxFiles:ja+1,maxDepth:$a,maxTotalBytes:Va+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=Qo.safeParse(a.path);if(!c.success)continue;let l=c.data;if(l.split("/").length>$a){o.add("max-depth");continue}if(r.size>=ja){o.add("max-files");break}if(i+a.sizeBytes>Va){o.add("max-total-bytes");break}r.set(l,{path:l,sizeBytes:a.sizeBytes,metadata:uk(l,a.sizeBytes,Ka(t))}),i+=a.sizeBytes}return{files:[...r.values()].sort((a,c)=>a.path.localeCompare(c.path)),...o.size>0?{truncated:{reasons:ak([...o]),maxFiles:ja,maxDepth:$a,maxTotalBytes:Va}}:{}}}function lk(e){let t=new Set(Yv);for(let n of e.routeEntryFiles??[]){let r=Qo.safeParse(n);r.success&&(r.data.startsWith("app/")||r.data.startsWith("src/app/"))&&t.add(r.data)}return[...t]}function uk(e,t,n){return Ja(e)?{composition:n,path:e,kind:"binary",language:null,sizeBytes:t,mimeType:Tp(e),readonly:!0}:{composition:n,path:e,kind:"text",language:_p(e),sizeBytes:t,readonly:!1}}function dk(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 Ap(t)}function Ap(e){return e.map(t=>t.kind==="directory"?{...t,children:Ap(t.children)}:t).sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}function fk(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 Ja(e){return!Gv(e)}function Tp(e){let t=Ua.posix.extname(e).toLowerCase();return!t&&Ua.posix.basename(e).toLowerCase()==="favicon"?"image/x-icon":Qv[t]??"application/octet-stream"}function _p(e){let t=Ua.posix.extname(e).toLowerCase();return qv[t]??"plaintext"}var ni=class{constructor(t){this.options=t,this.fileSystem=new qn(t.files),this.engine=this.createEngine(this.fileSystem)}get status(){return this.engine.status}initializeComposition(t){return this.engine.initializeComposition(t)}getDocument(t){return Vr(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 Ur(this.engine.getObjectEditContext(t,n))}getClassNameSource(t,n){return this.engine.getClassNameSource(t,n)}getSourceTree(t){return qo(this.fileSystem,{composition:this.engine.getCompositionContext(t),routeEntryFiles:this.options.compositions.map(n=>n.entryFile)})}getSourceFile(t){return ei(this.fileSystem,t,{composition:this.engine.getCompositionContext(t.composition),routeEntryFiles:this.options.compositions.map(n=>n.entryFile)})}resolveSourceLocation(t){return ti(t,this.engine.getRenderDetail(t.key,t.composition))}async planOperation(t){let n=mk.safeParse(t);if(!n.success)return{result:$r(t,n.error.issues.map(i=>i.message))};let r=new qn(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:Vt(i)},a=r.getChangedFiles();if(a.length===0)return{result:s};let c=gk.parse({siteId:t.siteId,baseSnapshotId:t.baseSnapshotId,operationId:t.id,reason:`site-edit:${t.kind}`,patches:a.map(l=>hk(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 wr({projectRoot:"/snapshot",fileSystem:t,compositions:this.options.compositions,onEvent:r&&this.options.onEvent?o=>{let i=Kr(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 hk(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 yk(e){return new ni(e)}import{SiteEditOperationRequestSchema as bk}from"@vcp-dev/contracts";import st from"node:fs/promises";import Me from"node:path";import{SITE_EDIT_SOURCE_ALLOWED_DIRS as xk,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as Sk}from"@vcp-dev/contracts";var ri=class{constructor(t){this.options=t,this.fileSystem=this.createFileSystem(),this.engine=wr({...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 qo(this.fileSystem,{composition:this.engine.getCompositionContext(t),routeEntryFiles:this.engine.getCompositionEntryFiles()})}getSourceFile(t){return ei(this.fileSystem,t,{composition:this.engine.getCompositionContext(t.composition),routeEntryFiles:this.engine.getCompositionEntryFiles()})}resolveSourceLocation(t){return ti(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 Bo(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??[...Sk,...xk],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 Xa(e){return new ri(e)}var oi=class{constructor(t){this.options=t,this.listeners=new Set,this.engine=Xa({projectRoot:t.projectRoot,fileSystem:t.fileSystem,compositions:t.compositions,onEvent:n=>{let r=Kr(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:Vr(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:Ur(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=bk.safeParse(r);if(!o.success)return $r(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:Vt(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:Vt(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:Vt(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 Ek(e){return new oi(e)}import{createHash as Ik,randomUUID as rc}from"node:crypto";import ye from"node:fs/promises";import be from"node:path";var Ye=1,Wa=1,vk=2,kk="index.json",Ck="recovery.json",Rk="transaction-journal.json",wk="document-version.json",si={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 Up(e,t={}){let n=Vk(e),r=Jk(t.limits),o=za(n),i=Uk(n),s=await Le(i),a=await Le(o)||s;a||(await Fk(n),await Mk(n)),a||await Xk(n);let c=await Ve(n),l=new Set(a?(await di(n)).map(d=>d.stageId):[]);a||await Nr(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 $p(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 $p(n);await Pr(Gp(n),{schemaVersion:1,version:Math.max(p,d)})},async stageAppend(d,p={}){await u();let m=await Mp(d,r),g={schemaVersion:Wa,stageId:rc(),entryId:m.entryId,blobIds:m.blobs.map(S=>S.digest)};try{await Op(n,m),await Ak(n,g,p.durableManifest!==!1)}catch(S){try{await Lp(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(),Za(d);let p=await Ga(n,d);p&&await Lp(n,p)},async previewStagedAppend(d,p){return await u(),(await Fp(n,r,d,p)).transition},async previewCursor(d,p){await u();let m=await Ve(n);return Qa(m,p),Ha(d,m.entryIds.length),Kp(m,m.entryIds,d)},async publishStagedAppend(d,p,m){if(await u(),ai(d,"entryId"),m){Za(m);let S=await Ga(n,m);if(!S||S.entryId!==d)throw new W(J.INVALID_SCHEMA,"history stage does not match the published entry")}let g=await Fp(n,r,d,p);return jp({rootDir:n,previousDigest:g.current.digest,entryIds:g.entryIds,cursor:g.cursor,afterWrite:async()=>{m?await ci(n,m):await _k(n,d),await Nr(n,g.entryIds)}})},async append(d){await u();let p=await Ve(n),m=await Mp(d,r),g=[...p.entryIds];p.cursor<g.length-1&&g.splice(p.cursor+1),g.push(m.entryId);try{await Op(n,m);let S=await Jp(n,g,r);return await ic(n,S.entryIds,S.cursor),await Nr(n,S.entryIds),Ve(n)}catch(S){throw await Nr(n,p.entryIds),S}},async readEntry(d){return ai(d,"entryId"),Tr(n,d)},async readBlob(d){ai(d,"blobId");let p=await pc(n,d),m=await Bt(p,J.NOT_FOUND,"blob");return sc(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 Qa(m,p),Ha(d,m.entryIds.length),jp({rootDir:n,previousDigest:m.digest,entryIds:m.entryIds,cursor:d})},async markRecoveryRequired(d){await Le(o)||await Pr(za(n),{schemaVersion:Ye,reason:Kk(d),createdAt:new Date().toISOString()})},async clearRecoveryRequired(){await ye.rm(za(n),{force:!0})},async readTransactionJournal(){return await Le(i)?ii(i):null},async writeTransactionJournal(d){await u(),Yp(d);try{await Pr(i,d)}catch(m){let g=await ii(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 ii(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 ii(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 ci(n,p),l.delete(p);await Ok(n);let d=await Ve(n);await Nr(n,d.entryIds)}}}async function Fp(e,t,n,r){ai(n,"entryId");let o=await Ve(e);Qa(o,r);let i=await Tr(e,n),s=[...o.entryIds];o.cursor<s.length-1&&s.splice(o.cursor+1),s.push(i.id);let a=await Jp(e,s,t);return{current:o,entryIds:a.entryIds,cursor:a.cursor,transition:Kp(o,a.entryIds,a.cursor)}}function Kp(e,t,n){return Ha(n,t.length),{expectedIndexDigest:e.digest,publishedIndexDigest:Nk(t,n),publishedCursor:n,publishedCurrentId:t[n]??null}}function Nk(e,t){return jt(Ue({schemaVersion:Ye,entryIds:e,cursor:t}))}function Ha(e,t){if(!Number.isInteger(e)||e<-1||e>=t)throw new W(J.INVALID_SCHEMA,`history cursor is out of bounds: ${e}`)}function Pk(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 Mp(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=$k(c.data),u=jt(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=jt(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 Op(e,t){let n=lc(e,t.entryId),r={id:t.entryId,...t.entryBody},o=[...t.blobs.map(a=>Dp(uc(e,a.digest),a.bytes,{kind:"blob",digest:a.digest},fc(e,a.digest))),Dp(n,Ue(r),{kind:"entry",digest:t.entryId},dc(e,t.entryId))],s=(await Promise.allSettled(o)).find(a=>a.status==="rejected");if(s)throw s.reason}async function Dp(e,t,n,r){let o=await tc(e)??(r?await tc(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 Wp(e,t)}async function Jp(e,t,n){let r=[...t],o=r.length-1;for(;;){if((await zp(e,r)).totalBytes<=n.maxSessionBytes&&r.length<=n.maxEntries)return{entryIds:r,cursor:o};if(o<=0||r.length===0)throw new W(J.CAPACITY_EXCEEDED,"history store exceeds capacity limits and the current entry cannot be trimmed");r.shift(),o-=1}}async function Ak(e,t,n){oc(t);let r=cc(e,t.stageId);if(n){await Pr(r,t);return}await jk(r,t)}async function Ga(e,t){let n=await tc(cc(e,t));if(n===null)return null;let r=_r(Buffer.from(n).toString("utf8"),`history stage ${t}`),o=oc(r);if(o.stageId!==t)throw new W(J.INVALID_SCHEMA,`history stage id mismatch: ${t}`);return o}async function di(e){let t=[];for(let n of await ui(ac(e))){if(!n.endsWith(".json"))continue;let r=n.slice(0,-5);Za(r);let o=await Ga(e,r);o&&t.push(o)}return t}async function Lp(e,t){oc(t);let n=await Ve(e),r=(await di(e)).filter(s=>s.stageId!==t.stageId),o=new Set(n.entryIds),i=new Set;for(let s of n.entryIds){let a=await Tr(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 Bp(lc(e,t.entryId),dc(e,t.entryId));for(let s of t.blobIds)i.has(s)||await Bp(uc(e,s),fc(e,s));await ci(e,t.stageId),await nc(Fr(e)),await nc(Mr(e))}async function ci(e,t){await Ya(cc(e,t)),await Tk(e)}async function Tk(e){try{await ye.rmdir(ac(e))}catch(t){if(Or(t)||at(t)&&t.code==="ENOTEMPTY")return;throw t}}async function _k(e,t){for(let n of await di(e))n.entryId===t&&await ci(e,n.stageId)}async function Ya(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 Bp(e,t){await Ya(e),await Ya(t)}function oc(e){if(!at(e)||e.schemaVersion!==Wa||typeof e.stageId!="string"||!Xp(e.stageId)||!Ke(e.entryId))throw new W(J.INVALID_SCHEMA,"history stage schema is invalid");let t=Hp(e.blobIds,"history stage blobIds");return{schemaVersion:Wa,stageId:e.stageId,entryId:e.entryId,blobIds:t}}function Za(e){if(!Xp(e))throw new W(J.INVALID_PATH,"history stageId must be a UUID")}function Xp(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 Nr(e,t){let n=new Set(t),r=new Set;for(let c of t){let l=await Tr(e,c);for(let u of l.blobs)r.add(u.digest)}for(let c of await di(e)){n.add(c.entryId);for(let l of c.blobIds)r.add(l)}let o=Fr(e),i=await ui(o);for(let c of i){if(!c.endsWith(".json"))continue;let l=Vp(c.slice(0,-5));l&&!n.has(l)&&await li(be.join(o,c))}let s=Mr(e),a=await ui(s);for(let c of a){let l=Vp(c);l&&!r.has(l)&&await li(be.join(s,c))}}async function Ve(e){let t=fi(e),n=await Bt(t,J.NOT_FOUND,"index"),r=_r(Buffer.from(n).toString("utf8"),"index"),o=Dk(r),i=[...o.entryIds],{totalBytes:s}=await zp(e,i),a=i.slice(0,o.cursor+1).reverse(),c=i.slice(o.cursor+1);return{schemaVersion:Ye,digest:o.digest,entryIds:i,cursor:o.cursor,currentId:i[o.cursor]??null,undoIds:a,redoIds:c,totalBytes:s}}async function zp(e,t){let n=0,r=new Set,o=fi(e),i=await Bt(o,J.NOT_FOUND,"index");n+=i.byteLength;for(let s of t){let a=await Tr(e,s),c=await Zp(e,s),l=await Bt(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 pc(e,u.digest),p=await Bt(d,J.NOT_FOUND,"blob");sc(p,u.digest,d),n+=p.byteLength}}return{totalBytes:n}}async function Tr(e,t){let n=await Zp(e,t),r=await Bt(n,J.NOT_FOUND,"entry"),o=_r(Buffer.from(r).toString("utf8"),`entry ${t}`),i=Lk(o);if(i.id!==t)throw new W(J.ENTRY_CORRUPT,`entry id mismatch for ${t}`);if(jt(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 pc(e,a.digest),l=await Bt(c,J.NOT_FOUND,"blob");sc(l,a.digest,c)}return i}async function ic(e,t,n){let r={schemaVersion:Ye,digest:jt(Ue({schemaVersion:Ye,entryIds:t,cursor:n})),entryIds:t,cursor:n};await Pr(fi(e),r)}function Qa(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 jp(e){let t=jt(Ue({schemaVersion:Ye,entryIds:e.entryIds,cursor:e.cursor}));try{return await ic(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 Fk(e){await ye.mkdir(e,{recursive:!0}),await ye.mkdir(Fr(e),{recursive:!0}),await ye.mkdir(Mr(e),{recursive:!0}),await ye.mkdir(Ar(e),{recursive:!0})}async function Mk(e){await ye.rm(Ar(e),{recursive:!0,force:!0}),await ye.mkdir(Ar(e),{recursive:!0})}async function Ok(e){let t=Ar(e);await ye.mkdir(t,{recursive:!0});for(let n of await ui(t))n!=="stages"&&await ye.rm(be.join(t,n),{recursive:!0,force:!0})}function Dk(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=Hp(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=jt(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 Lk(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=ec(e.manifest,"entry.manifest"),o=Bk(e.blobs);return{id:t,schemaVersion:Ye,kind:n,manifest:r,blobs:o}}function Bk(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 Pr(e,t){await Wp(e,Ue(t))}async function jk(e,t){let n=be.dirname(e),r=be.basename(e),o=be.join(n,`.${r}.${process.pid}.${rc()}.tmp`);await ye.mkdir(n,{recursive:!0});try{await ye.writeFile(o,Ue(t),{flag:"wx"}),await ye.rename(o,e)}finally{await li(o)}}async function Wp(e,t){let n=be.dirname(e),r=be.basename(e),o=be.join(n,`.${r}.${process.pid}.${rc()}.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 nc(n)}finally{await li(o)}}function Ue(e){return Buffer.from(JSON.stringify(qa(e)),"utf8")}function qa(e){if(Array.isArray(e))return e.map(t=>qa(t));if(at(e)){let t={};for(let n of Object.keys(e).sort())t[n]=qa(e[n]);return t}return e}function _r(e,t){try{return JSON.parse(e)}catch(n){throw new W(J.INVALID_JSON,`${t} is not valid JSON`,{cause:n})}}function ec(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=>ec(n,t));if(at(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=ec(o,t);return n}break}throw new W(J.INVALID_JSON,`${t} must be JSON-serializable`)}function Hp(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 ai(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 jt(e){return`sha256:${Ik("sha256").update(e).digest("hex")}`}function $k(e){return typeof e=="string"?Buffer.from(e,"utf8"):Buffer.from(e)}async function Bt(e,t,n){try{return await ye.readFile(e)}catch(r){throw new W(t,`${n} not found: ${e}`,{cause:r})}}async function tc(e){try{return await ye.readFile(e)}catch(t){if(Or(t))return null;throw t}}function sc(e,t,n){if(jt(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(Or(t))return!1;throw t}}async function li(e){try{await ye.rm(e,{force:!0,recursive:!0})}catch{}}async function nc(e){try{let t=await ye.open(e,"r");try{await t.sync()}finally{await t.close()}}catch{}}async function ui(e){try{return await ye.readdir(e)}catch(t){if(Or(t))return[];throw t}}function Vk(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 fi(e){return be.join(e,kk)}function za(e){return be.join(e,Ck)}function Uk(e){return be.join(e,Rk)}function Gp(e){return be.join(e,wk)}async function $p(e){try{let t=await ye.readFile(Gp(e),"utf8"),n=_r(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(Or(t))return 0;throw t}}async function ii(e){let t=await Bt(e,J.RECOVERY_PENDING,"transaction journal"),n=_r(Buffer.from(t).toString("utf8"),"transaction journal");return Yp(n),n}function Yp(e){if(!at(e)||e.schemaVersion!==vk||typeof e.transactionId!="string"||e.transactionId.length===0||typeof e.operationId!="string"||e.operationId.length===0||!["prepared","files-written","history-published"].includes(e.phase)||!Pk(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 Kk(e){return e.replace(/[\r\n]+/g," ").slice(0,512)}function Fr(e){return be.join(e,"entries")}function Mr(e){return be.join(e,"blobs")}function Ar(e){return be.join(e,"tmp")}function ac(e){return be.join(Ar(e),"stages")}function cc(e,t){return be.join(ac(e),`${t}.json`)}function lc(e,t){return be.join(Fr(e),`${qp(t)}.json`)}function uc(e,t){return be.join(Mr(e),qp(t))}function dc(e,t){return be.join(Fr(e),`${t}.json`)}function fc(e,t){return be.join(Mr(e),t)}async function Zp(e,t){return Qp(lc(e,t),dc(e,t))}async function pc(e,t){return Qp(uc(e,t),fc(e,t))}async function Qp(e,t){return await Le(e)?e:await Le(t)?t:e}function qp(e){return e.slice(7)}function Vp(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 Or(e){return typeof e=="object"&&e!==null&&"code"in e&&e.code==="ENOENT"}function Jk(e){return{maxEntries:e?.maxEntries??si.maxEntries,maxSessionBytes:e?.maxSessionBytes??si.maxSessionBytes,maxEntryBytes:e?.maxEntryBytes??si.maxEntryBytes}}async function Xk(e){let t=fi(e);await Le(t)||await ic(e,[],-1)}import{createHash as zk}from"node:crypto";import{computeSiteEditCompositionKey as tm,ManagedPageTemplateRouteManifestV1Schema as Wk}from"@vcp-dev/contracts";var Hk="app/_vcp/page-templates/runtime.tsx",nm=".vcp/page-templates/routes/",Gk="app/_vcp/page-templates/routes/",Ae=class extends Error{constructor(t,n,r){super(n),this.code=t,this.details=r,this.name="PageTemplateManagedSourceError"}};function jn(e){let t=Xo(e);return zk("sha256").update(t,"utf8").digest("hex").slice(0,16)}function mi(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function Dr(e,t){let n=jn(e),r=`${Gk}${n}`,o=mi(t);return{routeRoot:r,manifestFile:`${nm}${n}.json`,runtimeFile:Hk,registryFile:`${r}/registry.ts`,templateEntryFile:`${r}/templates/${o}/page.tsx`}}function rm(e){let t=tC(e),n=new Map;for(let r of t){let o=mi(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 mc(e){let t=Xo(e.routeId),n=om(e.files),r=Dr(t,""),o=n.get(r.manifestFile);if(o===void 0)return null;let i=qk(t,r.manifestFile,o);return eC({routeId:t,manifest:i,files:n}),i}function Yk(e){let t=Xo(e.selector.routeId),n=an(e.canonicalEntryFile),r=mc({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(an(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:an(i.entry_file)};return{...a,mode:"delegated",effectiveEntryFile:a.entryFile}}function Zk(e){let t=om(e.files),n=[...t.keys()].map(l=>({path:l})),r=vr(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=jn(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=>Dr(l.routeId,"").manifestFile));for(let l of t.keys())if(l.startsWith(nm)&&l.endsWith(".json")&&!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=mc({routeId:l.routeId,files:t});if(u===null){let d={routeId:l.routeId};a.push(Qk(d,l.entryFile));continue}for(let d of[...u.templates].sort(nC)){let p={routeId:l.routeId,effectiveTemplateId:d.template_id},m={context:p,entryFile:an(d.entry_file)};a.push({key:tm(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)=>rC(l.composition,u.composition)||pi(l.key,u.key)).map(({composition:l})=>l)}function Qk(e,t){return{key:tm(e),composition:{context:e,entryFile:t}}}function om(e){let t=new Map;if(iC(e)){for(let n of e)em(t,n.path,n.content);return t}for(let[n,r]of e)em(t,n,r);return t}function em(e,t,n){let r=an(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 qk(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=Wk.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 eC(e){let{routeId:t,manifest:n,files:r}=e,o=Dr(t,""),i=vr([...r.keys()].map(l=>({path:l}))).filter(l=>l.routeId===t);if(n.route_id!==t&&pt(t,"route-id-mismatch",o.manifestFile),n.route_key!==jn(t)&&pt(t,"route-key-mismatch",o.manifestFile),i.length!==1)throw new Ae("PAGE_TEMPLATE_ROUTE_AMBIGUOUS",`Managed page-template route ${JSON.stringify(t)} has ${i.length} canonical entries.`,{reason:i.length===0?"canonical-entry-missing":"duplicate-route-id",routeId:t,candidates:i.map(l=>l.entryFile)});let s=an(n.canonical_entry_file);(s!==i[0].entryFile||!r.has(s))&&pt(t,"canonical-entry-mismatch",s),n.default_template_id!==`vcp-default:${jn(t)}`&&pt(t,"default-template-id-mismatch",o.manifestFile),rm(n.templates);let a=new Set,c=new Set;for(let l of n.templates){let u=Dr(t,l.template_id),d=an(l.entry_file),p=mi(l.template_id);l.safe_name!==p&&pt(t,"safe-name-mismatch",o.manifestFile,{templateId:l.template_id}),a.has(l.safe_name)&&pt(t,"duplicate-safe-name",o.manifestFile,{templateId:l.template_id}),a.add(l.safe_name),c.has(d)&&pt(t,"duplicate-entry-file",o.manifestFile,{templateId:l.template_id}),c.add(d),oC(d,u.routeRoot)||pt(t,"entry-outside-route-root",d,{templateId:l.template_id}),d!==u.templateEntryFile&&pt(t,"entry-path-mismatch",d,{templateId:l.template_id}),r.has(d)||pt(t,"template-entry-missing",d,{templateId:l.template_id})}}function pt(e,t,n,r={}){throw new Ae("PAGE_TEMPLATE_MANAGED_SOURCE_INVALID",`Managed page-template source for ${JSON.stringify(e)} failed validation (${t}).`,{reason:t,routeId:e,path:n,...r})}function tC(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 nC(e,t){return+(t.kind==="default")-+(e.kind==="default")||pi(e.template_id,t.template_id)}function rC(e,t){let n=pi(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:${jn(e.context.routeId)}`,a=r===s;return Number(o===s)-Number(a)||pi(r,o)}function pi(e,t){return e<t?-1:e>t?1:0}function oC(e,t){return e.startsWith(`${t}/`)}function an(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function iC(e){return Array.isArray(e)}export{W as FileHistoryStoreError,Ae as PageTemplateManagedSourceError,oi as PreviewFileSystemSiteEditEngineRuntime,Sf as SITE_EDIT_RAW_COLOR_LITERAL_RE,ni as SnapshotSiteEditEngineRuntime,rm as assertNoPageTemplateSafeNameCollision,Dr as computeManagedPageTemplatePaths,jn as computePageTemplateRouteKey,mi as computePageTemplateSafeName,Ek as createPreviewSiteEditEngineRuntime,yk as createSiteEditEngineRuntime,Up as openFileHistoryStore,mc as parseManagedPageTemplateManifest,Yk as resolveManagedPageTemplateComposition,Zk as scanSiteEditCompositionsFromFiles,xr as scanSiteEditThemeStyleViolations};
|
|
11
|
+
`||p==="\r"))return jn(t,`Unterminated string literal in ${t}.`);l=p===`
|
|
12
|
+
`||p==="\r";continue}if(p==="/"&&m==="*"){s=!0,d+=1,l=!1;continue}if(n==="mdx"&&p==="/"&&m==="/"){a=!0,d+=1,l=!1;continue}if(p==="'"||p==='"'||n==="mdx"&&p==="`"){o=p,l=!1;continue}if(p==="{"||p==="("||p==="["){r.push({char:p,offset:d}),l=!1;continue}if(p==="}"||p===")"||p==="]"){let g=p==="}"?"{":p===")"?"(":"[",S=r.pop();if(!S||S.char!==g)return jn(t,`Unexpected closing token "${p}" in ${t}.`);l=!1;continue}l=p===`
|
|
13
|
+
`||p==="\r"}if(s)return jn(t,`Unterminated block comment in ${t}.`);if(o)return jn(t,`Unterminated string literal in ${t}.`);if(c)return jn(t,`Unterminated MDX code fence in ${t}.`);let u=r.at(-1);return u?jn(t,`Unclosed token "${u.char}" in ${t}.`):{ok:!0}}function jn(e,t){return{ok:!1,errorCode:"ast-error",message:t,details:{path:e}}}function Nr(e){let t="idle",n=e.fileSystem??gv(),r=yf(),o=lp({compositions:e.compositions,initialDocumentVersions:e.initialDocumentVersions}),i=new Map,s=new Map,a=new Set,c=null,l=e.history??(e.historyStore?Qf(e.historyStore):hv()),u=hf(n,{externalAdapters:e.externalAdapters}),d=new Map,p=new Set,m=0,g=e.historyStore?.recoveryRequired??!1,S=Fa(),C=B();function v(f){return(qo.isAbsolute(f)?qo.relative(e.projectRoot,f):f).replace(/\\/g,"/").replace(/^\.\//,"")}function P(f,y){let h=qo.posix.dirname(f),I=y.replace(/\.(?:tsx?|jsx?)$/i,""),R=qo.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(ap({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=mp(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=Sd(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 bd({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:ki,capabilities:Ci})=>({sourceType:Ze,adapterId:ki,capabilities:Ci})),functionCallContracts:e.functionCallContracts,fileCache:F}),we=await Gs({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:ki,capabilities:Ci})=>({sourceType:Ze,adapterId:ki,capabilities:Ci})),functionCallContracts:e.functionCallContracts,fileCache:F}),gn=Rv(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 Ed({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=Yl(wv(me.writeTarget),_),oe=tu({key:$,element:K,graph:f,provenances:ge}),Se=iu(K),Je=su(K),pn=au(K),mn=Q?await Hd({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 Gs({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??Ma(d,[]),A=await xe(I.entryFile),{graph:F,allSources:L,diagnostics:T,parsedModules:$,entryModule:K}=await zc(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)Oa(R,Te,Un,dp);let Ie=await It(I.composition,I.entryFile,L,R);F.routeId=I.routeId,F.composition=I.composition;let Y=Wc(F),ge=Gc(Y,F),_=await D(F,Y,L,R,$),j=am(F,ge,_),z=sm(_),oe=Uv(Xl(F,Y,ge,{canUpdateTextByKey:j,dynamicDataSummaryByKey:z}),F,_),Se=Ll({route:I.routeId,composition:I.composition,entryFile:I.entryFile,version:Q,source:y,ast:K?.ast}),Je=Bl(Se);Se.ok&&_v(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:bv(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 Dv(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(Ba($)){R.push($);continue}for(let me of Bv(K)){let Q=Sp($,me);Q&&R.push(Q)}}if(!R.length){for(let $ of Lv(y))if(await hc($)){R.push($);break}}let A=new Map,F=kp(R).slice(0,up);for(;F.length>0&&A.size<up;){let $=F.shift();if(A.has($)||!Ba($))continue;let K=await vt($,I);if(K!==null){A.set($,{path:$,content:K});for(let me of jv(K)){let Q=Sp($,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 hc(f))return null;let I=await n.readFile(f);return Oa(y,f,I,dp),I}async function hc(f){return typeof n.exists=="function"?n.exists(f):!1}function sm(f){let y=new Map;for(let[h,I]of f)I.dynamicData?.bindings.length&&y.set(h,sf(I.dynamicData.bindings));return y}function am(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||cm(K)});I.set(R,T)}return I}function cm(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())yc(T,h)&&R.add(T.key);let A=!I&&R.size===0&&h.some(xp),F=y.publish===!1?Ma(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({...sp(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())yc(I,y)&&h.add(I.key);return[...h]}function lm(f){let y=new Set(un(f));return o.entries.filter(h=>y.has(h.key)).map(h=>h.context)}function um(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 dm(f,y){let h=new Set(un(y)),I=f.provenance?.affectedCompositions??[];if(I.length===0)return h;let R=new Set(I.map(A=>o.resolveContext(A).key));if(R.size!==h.size||[...R].some(A=>!h.has(A)))throw new Error("History provenance does not match the affected composition index.");return R}function fm(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 Si(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 yc(f,y){return y.some(h=>f.dependencyFiles.has(h)||f.entryFile===h||f.graph?.fileIndex.has(h))}function xc(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 pm();let h=[...a];a.clear();let I=await Sc(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&&xc([])}})())}async function pm(){for(;m>0;)await new Promise(f=>setTimeout(f,0))}async function Sc(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(!Tv(R))try{if(await n.exists(h))continue}catch{continue}p.add(h),y.push(h)}}return y}function bc(f){op(d,f);for(let y of f)y.exists===!1?p.add(y.file):p.delete(y.file)}function Ec(f){p.clear();for(let y of f)p.add(y)}async function Ic(f){let y=await Sc(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 mm(f,y){let h=Vn(f,y);if(!h?.graph)return;let I=$e(f)??f,R=h.graph.elements.get(I);R&&await Ic([R.sourceFile])}async function vc(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 Ic(y)}async function gm(f){if(f.params.kind!=="source-edit")return bi(f,"invalid-params","source-edit requires source-edit params");for(let y of f.params.edits){let h=Av(y);if(!h.ok)return bi(f,h.errorCode,h.message,h.details)}m+=1;try{let y=await Em(f.params.edits);if(!y.ok)return bi(f,y.errorCode,y.message,y.details);await vc(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 hm(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 wa({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 Ca({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 ym(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=Ep(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=zf({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 xm(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 wa({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 Nf({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=Nm(T.instanceName),Y=os({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,_c(Y.error.code),Y.error.message,{diagnostics:Y.error.diagnostics})};let ge=Y.plan.returnStep?_l({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 Sm(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=Fl({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,_c(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 bm({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 bm(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 Em(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=Im(f);if(y.length===0)return{ok:!0};let h=Nv(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 Im(f){return f.map(h=>h.path).some(xp)?[...i.keys()]:[]}function bi(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 Ei(f){let y=[];for(let h of new Set(f))y.push(await vm(h));return y}async function vm(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 kc(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 Cc(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 Ii(f,y){let h=[];try{for(let I of f)await Rc(I),typeof n.bumpVersion=="function"&&n.bumpVersion(I.file),h.push(I.file)}catch(I){let R=await km(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(Cm)}}async function Rc(f){if(f.exists===!1){await n.deleteFile(f.file);return}await n.writeFile(f.file,f.content)}async function km(f){let y=[];for(let h of f)try{await Rc(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 Cm(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(()=>Rm(f))}async function Rm(f){let y=f.filePlan.edits.map(_=>_.file),h=o.resolveSelector(f.request.composition).context,I=f.historyPolicy==="none"?void 0:{initiatingComposition:h,affectedCompositions:um(y)},R=await Ei(y),A=new Map(R.filter(_=>_.exists!==!1).map(_=>[_.file,_.content])),F=Nc(),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 Yo({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?mv(await e.historyStore.readIndex()):null;if(e.historyStore&&!j)throw new Error("Durable history did not provide an exact index transition.");return Q=await kc(f.request.id,R,K,j),Q=await Cc(Q),{history:_,historyTransition:j}},reverify:async()=>{},writeCandidate:async()=>{let _=await u.executeFilePlan(f.filePlan);if(!_.ok)throw new ti(_);return{postSnapshots:await Ei(_.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=Pc(F,z.candidateRouteStates??[]),Se=Math.max(j.internalResultVersion,...z.rebuiltRoutes.map(Je=>Je.version));return{..._,rebuild:z,routeSnapshots:oe,resultVersion:Se,...gp(f.selectionRef,oe.map(Je=>Je.state.document))?{selectionRef:gp(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),bc(j.postSnapshots)},finalizeCandidate:async()=>{await dn(Q);for(let _ of $)i.delete(_)},emitCommitted:({candidate:_,published:j})=>{Si(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 Ii(R,j.postSnapshots);if(!z.ok)throw new Error(z.reason)}jr(F),Bn(d,L),Ec(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 ti?{...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: ${Da(ge.failedRoutes)}`,{failedRoutes:ge.failedRoutes}):ee(f.request,Tc(Y.stage),Fe(ge))}async function wc(f){return S.runExclusive(async()=>{let y=f==="undo"?await l.prepareUndo():await l.prepareRedo();return y?wm(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 wm(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}=fm(h,A),T=await Ei(A),$=new Map(T.filter(z=>z.exists!==!1).map(z=>[z.file,z.content])),K=he(L),me=Nc(),Q=new Map(d),Ie=new Set(p),Y=null,ge=!1,_,j=await Yo({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 kc(`${f}:${h.operationId}`,T,I,y.historyTransition),Y=await Cc(Y),y),reverify:async()=>{},writeCandidate:async()=>{let z=await Ii(I,R);if(!z.ok)throw new Error(z.reason);return{snapshots:z.snapshots}},validateCandidate:async({candidate:z})=>{_=dm(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=Pc(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),bc(oe.snapshots)},finalizeCandidate:async()=>{await dn(Y)},emitCommitted:({candidate:z,published:oe})=>Si(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 Ii(R,oe.snapshots);if(!Se.ok)throw new Error(Se.reason)}jr(me),Bn(d,Q),Ec(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:Tc(j.stage),message:Fe(j.error),...j.error instanceof an?{details:{failedRoutes:j.error.failedRoutes}}:{}}}}function Nc(){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 Pc(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 vi(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||!Ac(h,f)?null:h}function Ac(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 Tc(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 Nm(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 _c(f){return f==="VERSION_STALE"?O.VERSION_STALE:f==="CROSS_PAGE_MOVE_UNSUPPORTED"?O.CROSS_PAGE_MOVE_UNSUPPORTED:O.UNSUPPORTED_OPERATION}async function Fc(f){if(f.target.kind==="route"){let h=i.get(o.resolveSelector(f.target.composition).key)??null;return h?(h.graph||await vi(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 vi(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 vi(y.key),Ac(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=mp(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=Wl(I,h.graph,h.topology,h.capabilities,R.textSources,R.provenances,R.dynamicData);return f===I?A:Hv(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=zl(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:Wv(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 uu({key:I,route:{composition:h.composition,routeId:h.routeId,graph:h.graph,source:A}})},refreshSourceForKey:mm,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 gm(f);if(f.kind==="insert-page-resource")return hm(f);if(f.kind==="delete-page-source")return ym(f);let y=await Fc(f);if("ok"in y)return y;await vc(f);let h=await Fc(f);if("ok"in h)return h;let I=h;if(f.target.kind==="page-unit"){let L=f;return f.kind==="insert-child"?xm(L,I):f.kind==="move-node"||f.kind==="remove-node"?Sm(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=Mv(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 Si($,{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 wc("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 wc("redo")}finally{m-=1}},notifyFileChanged(f){xc([f])},getAffectedCompositions(f){return lm(f)},subscribe(f){return r.subscribe(f)}}}function Tv(e){return e instanceof Error&&"code"in e&&(e.code==="ENOENT"||e.code==="ENOTDIR")}function _v(e,t,n){let r=new Map,o=new Map;for(let s of t.elements.values()){if(s.sourceFile!==n.entryFile||!s.importedFrom||!/^[A-Z]/.test(s.tag))continue;let a=n.placements.find(l=>l.members.some(u=>u.sourceRange!==null&&La(s.sourceRange,u.sourceRange)));if(!a)continue;let c=a.placementUnitKey;if(r.set(`${s.importedFrom}#${s.tag}`,c),s.exportName==="default"){let l=o.get(s.importedFrom)??new Set;l.add(c),o.set(s.importedFrom,l)}s.exportName&&s.exportName!=="default"&&s.exportName!==s.tag&&r.set(`${s.importedFrom}#${s.exportName}`,c)}let i=n.placements.find(s=>s.placementKey===n.container.placementKey&&s.relation==="append");for(let s of e.entries){let a=$e(s.key)??s.key,c=t.elements.get(s.key)??t.elements.get(a);if(!c)continue;if(c.sourceFile===n.entryFile){if(n.container.sourceRange&&La(c.sourceRange,n.container.sourceRange)&&i){s.pageCompositionUnitKey=i.placementUnitKey;continue}let d=n.placements.find(p=>p.members.some(m=>m.sourceRange!==null&&(La(c.sourceRange,m.sourceRange)||Fv(m.sourceRange,c.sourceRange))));if(d){s.pageCompositionUnitKey=d.placementUnitKey;continue}}let l=r.get(`${c.sourceFile}#${c.componentName}`);if(l){s.pageCompositionUnitKey=l;continue}let u=o.get(c.sourceFile);u?.size===1&&(s.pageCompositionUnitKey=u.values().next().value)}}function La(e,t){return e.startLine===t.startLine&&e.startColumn===t.startColumn&&e.endLine===t.endLine&&e.endColumn===t.endColumn}function Fv(e,t){return yp(e.startLine,e.startColumn,t.startLine,t.startColumn)<=0&&yp(e.endLine,e.endColumn,t.endLine,t.endColumn)>=0}function yp(e,t,n,r){return e!==n?e-n:t-r}function Mv(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 bp(e.detailProjections?.get(p.baseKey)?.textTargets.get(d)??null,p.repeatIndex)},async getElementPropertyWriteTarget(u,d){let p=c(u);return bp(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=lv(u);return d?{baseKey:d.baseKey,repeatIndex:Jv(e.document??null,u,d.baseKey,e.documentIndex)??Kv(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 Ov={"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 Ov[e]}function Fe(e){return e instanceof Error&&e.message?e.message:String(e)}function xp(e){return/\.(?:[cm]?[jt]sx?|css|scss|sass|mdx|json)$/i.test(e)}function Dv(e){let t=cn(e);if(!fv.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=>pv.map(a=>`${s}/${a}`))}function Lv(e){let n=cn(e).startsWith("src/app/")?"src/app":"app";return[`${n}/globals.css`,`${n}/global.css`]}function Bv(e){return Ip(e,/\bimport\s+(?:[^'";]+?\s+from\s+)?["']([^"']+\.css(?:\?[^"']*)?)["']/g)}function jv(e){return Ip(e,/@import\s+(?:url\(\s*)?["']([^"']+)["']/g)}function Ip(e,t){let n=[];for(let r of e.matchAll(t)){let o=vp(r[1]??"");o&&n.push(o)}return n}function Sp(e,t){let n=vp(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(`${$v(e)}/${n}`):n.startsWith("/")?cn(n.slice(1)):Ba(n)?cn(n):null}function vp(e){return e.split(/[?#]/,1)[0]?.trim()??""}function Ba(e){return/\.css$/i.test(e)}function $v(e){let t=cn(e),n=t.lastIndexOf("/");return n>=0?t.slice(0,n):""}function kp(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 Vv(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 ei(e){return e?.map(t=>({...t}))}function bp(e,t){if(t===null||e?.kind!=="value-binding"||e.sourceKind!=="repeat-template")return e;let n=e.collectionIndexMap?.[t]??t,r=ei(e.collectionPathMap?.[t])??ei(e.locator?.path);if(r)for(let o=r.length-1;o>=0;o-=1){let i=r[o];if(i.kind==="index"){i.index=n;break}}return{...e,path:ei(e.path),locator:e.locator?{...e.locator,path:r}:e.locator,collectionIndexMap:e.collectionIndexMap?[...e.collectionIndexMap]:void 0,collectionPathMap:e.collectionPathMap?.map(o=>ei(o)??[])}}function Uv(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)=>sv(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=kp([...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 Xv(P))w.length<=g.length||zv(w,g)&&S.add(w[g.length])}}return S.size>0?S.size:Vv(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 Kv(e){let t=e.parts.at(-1);return typeof t?.repeatIndex=="number"?t.repeatIndex:null}function Jv(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 Xv(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 Wv(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 Hv(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 Ka from"node:path";import{TextDecoder as Gv}from"node:util";import{SITE_EDIT_SOURCE_ALLOWED_APP_FILES as Rp,SITE_EDIT_SOURCE_ALLOWED_DIRS as wp,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as Np,SiteEditCompositionContextSchema as Yv,SiteEditSourceFileResponseSchema as ja,SiteEditSourceLocationSchema as Zv,SiteEditSourcePathSchema as ni,SiteEditSourceTreeResponseSchema as Qv,isSiteEditTextSourcePath as qv}from"@vcp-dev/contracts";var ek=[...Np,...Rp,...wp];function Ja(e){if(!e.composition)throw new Error("Composition unavailable for source access policy.");return Yv.parse(e.composition)}var $a=2e3,Va=12,Ua=24*1024*1024,Cp=512*1024,tk=new Set(["image/avif","image/gif","image/jpeg","image/png","image/webp","image/x-icon"]),nk={".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"},rk={".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"},ok=new Gv("utf-8",{fatal:!0});async function ri(e,t={}){let n=Ja(t),{files:r,truncated:o}=await fk(e,t),i=gk(r.map(s=>s.metadata));return Qv.parse({composition:n,nodes:i,defaultPath:hk(r.map(s=>s.metadata)),totalFiles:r.length,...o?{truncated:o}:{}})}async function oi(e,t,n={}){let r=Ja(n),o=ni.parse(t.path),i=await ak(e,o,n);if(!i)throw new Error(`Source file not found: ${o}`);if(Xa(o)){let a=Tp(o),c=await lk(e,{path:o,sizeBytes:i.sizeBytes,mimeType:a});return ja.parse({composition:r,path:o,kind:"binary",language:null,sizeBytes:i.sizeBytes,mimeType:a,readonly:!0,...c})}let s=await ik(e,o);return s.ok?ja.parse({composition:r,path:o,kind:"text",language:_p(o),sizeBytes:s.sizeBytes,contentHash:ue(s.content),readonly:!1,content:s.content}):ja.parse({composition:r,path:o,kind:"binary",language:null,sizeBytes:s.sizeBytes,mimeType:"application/octet-stream",readonly:!0,previewUnavailableReason:"unsupported-mime"})}async function ik(e,t){if(e.readFileBytes){let o=await e.readFileBytes(t),i=sk(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 sk(e){if(e.includes(0))return null;try{return ok.decode(e)}catch{return null}}async function ak(e,t,n){if(!uk(t,n))return null;let r=await ck(e,t);return r?{path:t,sizeBytes:r.sizeBytes}:null}async function ck(e,t){if(e.getFileInfo)return e.getFileInfo(t);if(e.listFiles){let o=Pp(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(Xa(t))return{path:t,sizeBytes:0};let n=await e.readFile(t);return{path:t,sizeBytes:Buffer.byteLength(n,"utf8")}}async function lk(e,t){if(!tk.has(t.mimeType))return{previewUnavailableReason:"unsupported-mime"};if(t.sizeBytes>Cp)return{previewUnavailableReason:"too-large"};if(!e.readFileBytes)return{previewUnavailableReason:"bytes-unavailable"};let n=await e.readFileBytes(t.path);return n.byteLength>Cp?{previewUnavailableReason:"too-large"}:{contentBase64:Buffer.from(n).toString("base64")}}function uk(e,t){return Np.some(n=>n===e)||Rp.some(n=>n===e)||wp.some(n=>e===n||e.startsWith(`${n}/`))?!0:!e.startsWith("app/")&&!e.startsWith("src/app/")?!1:(t.routeEntryFiles??[]).some(n=>{let r=ni.safeParse(n);return r.success&&r.data===e})}function ii(e,t){if(!t.sourceLocator)throw new Error(`Source location not available for key: ${e.key}`);return Zv.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 Pp(e){return Array.isArray(e)?{files:e}:e}function dk(e){return["max-files","max-depth","max-total-bytes"].filter(n=>e.includes(n))}async function fk(e,t){if(!e.listFiles)throw new Error("Source file listing is unavailable.");let n=Pp(await e.listFiles({roots:pk(t),maxFiles:$a+1,maxDepth:Va,maxTotalBytes:Ua+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=ni.safeParse(a.path);if(!c.success)continue;let l=c.data;if(l.split("/").length>Va){o.add("max-depth");continue}if(r.size>=$a){o.add("max-files");break}if(i+a.sizeBytes>Ua){o.add("max-total-bytes");break}r.set(l,{path:l,sizeBytes:a.sizeBytes,metadata:mk(l,a.sizeBytes,Ja(t))}),i+=a.sizeBytes}return{files:[...r.values()].sort((a,c)=>a.path.localeCompare(c.path)),...o.size>0?{truncated:{reasons:dk([...o]),maxFiles:$a,maxDepth:Va,maxTotalBytes:Ua}}:{}}}function pk(e){let t=new Set(ek);for(let n of e.routeEntryFiles??[]){let r=ni.safeParse(n);r.success&&(r.data.startsWith("app/")||r.data.startsWith("src/app/"))&&t.add(r.data)}return[...t]}function mk(e,t,n){return Xa(e)?{composition:n,path:e,kind:"binary",language:null,sizeBytes:t,mimeType:Tp(e),readonly:!0}:{composition:n,path:e,kind:"text",language:_p(e),sizeBytes:t,readonly:!1}}function gk(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 Ap(t)}function Ap(e){return e.map(t=>t.kind==="directory"?{...t,children:Ap(t.children)}:t).sort((t,n)=>t.kind!==n.kind?t.kind==="directory"?-1:1:t.name.localeCompare(n.name))}function hk(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 Xa(e){return!qv(e)}function Tp(e){let t=Ka.posix.extname(e).toLowerCase();return!t&&Ka.posix.basename(e).toLowerCase()==="favicon"?"image/x-icon":nk[t]??"application/octet-stream"}function _p(e){let t=Ka.posix.extname(e).toLowerCase();return rk[t]??"plaintext"}var si=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 ri(this.fileSystem,{composition:this.engine.getCompositionContext(t),routeEntryFiles:this.options.compositions.map(n=>n.entryFile)})}getSourceFile(t){return oi(this.fileSystem,t,{composition:this.engine.getCompositionContext(t.composition),routeEntryFiles:this.options.compositions.map(n=>n.entryFile)})}resolveSourceLocation(t){return ii(t,this.engine.getRenderDetail(t.key,t.composition))}async planOperation(t){let n=xk.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=Sk.parse({siteId:t.siteId,baseSnapshotId:t.baseSnapshotId,operationId:t.id,reason:`site-edit:${t.kind}`,patches:a.map(l=>bk(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 bk(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 Ek(e){return new si(e)}import{SiteEditOperationRequestSchema as kk}from"@vcp-dev/contracts";import st from"node:fs/promises";import Me from"node:path";import{SITE_EDIT_SOURCE_ALLOWED_DIRS as Ik,SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES as vk}from"@vcp-dev/contracts";var ai=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 ri(this.fileSystem,{composition:this.engine.getCompositionContext(t),routeEntryFiles:this.engine.getCompositionEntryFiles()})}getSourceFile(t){return oi(this.fileSystem,t,{composition:this.engine.getCompositionContext(t.composition),routeEntryFiles:this.engine.getCompositionEntryFiles()})}resolveSourceLocation(t){return ii(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??[...vk,...Ik],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 za(e){return new ai(e)}var ci=class{constructor(t){this.options=t,this.listeners=new Set,this.engine=za({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=kk.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 Ck(e){return new ci(e)}import{createHash as Rk,randomUUID as oc}from"node:crypto";import ye from"node:fs/promises";import be from"node:path";var Ye=1,Ha=1,wk=2,Nk="index.json",Pk="recovery.json",Ak="transaction-journal.json",Tk="document-version.json",ui={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 Up(e,t={}){let n=Xk(e),r=Hk(t.limits),o=Wa(n),i=zk(n),s=await Le(i),a=await Le(o)||s;a||(await Lk(n),await Bk(n)),a||await Gk(n);let c=await Ve(n),l=new Set(a?(await gi(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 $p(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 $p(n);await Ar(Gp(n),{schemaVersion:1,version:Math.max(p,d)})},async stageAppend(d,p={}){await u();let m=await Mp(d,r),g={schemaVersion:Ha,stageId:oc(),entryId:m.entryId,blobIds:m.blobs.map(S=>S.digest)};try{await Op(n,m),await Mk(n,g,p.durableManifest!==!1)}catch(S){try{await Lp(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(),Qa(d);let p=await Ya(n,d);p&&await Lp(n,p)},async previewStagedAppend(d,p){return await u(),(await Fp(n,r,d,p)).transition},async previewCursor(d,p){await u();let m=await Ve(n);return qa(m,p),Ga(d,m.entryIds.length),Kp(m,m.entryIds,d)},async publishStagedAppend(d,p,m){if(await u(),di(d,"entryId"),m){Qa(m);let S=await Ya(n,m);if(!S||S.entryId!==d)throw new W(J.INVALID_SCHEMA,"history stage does not match the published entry")}let g=await Fp(n,r,d,p);return jp({rootDir:n,previousDigest:g.current.digest,entryIds:g.entryIds,cursor:g.cursor,afterWrite:async()=>{m?await fi(n,m):await Dk(n,d),await Pr(n,g.entryIds)}})},async append(d){await u();let p=await Ve(n),m=await Mp(d,r),g=[...p.entryIds];p.cursor<g.length-1&&g.splice(p.cursor+1),g.push(m.entryId);try{await Op(n,m);let S=await Jp(n,g,r);return await sc(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 di(d,"entryId"),_r(n,d)},async readBlob(d){di(d,"blobId");let p=await mc(n,d),m=await jt(p,J.NOT_FOUND,"blob");return ac(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 qa(m,p),Ga(d,m.entryIds.length),jp({rootDir:n,previousDigest:m.digest,entryIds:m.entryIds,cursor:d})},async markRecoveryRequired(d){await Le(o)||await Ar(Wa(n),{schemaVersion:Ye,reason:Wk(d),createdAt:new Date().toISOString()})},async clearRecoveryRequired(){await ye.rm(Wa(n),{force:!0})},async readTransactionJournal(){return await Le(i)?li(i):null},async writeTransactionJournal(d){await u(),Yp(d);try{await Ar(i,d)}catch(m){let g=await li(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 li(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 li(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 fi(n,p),l.delete(p);await jk(n);let d=await Ve(n);await Pr(n,d.entryIds)}}}async function Fp(e,t,n,r){di(n,"entryId");let o=await Ve(e);qa(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 Jp(e,s,t);return{current:o,entryIds:a.entryIds,cursor:a.cursor,transition:Kp(o,a.entryIds,a.cursor)}}function Kp(e,t,n){return Ga(n,t.length),{expectedIndexDigest:e.digest,publishedIndexDigest:_k(t,n),publishedCursor:n,publishedCurrentId:t[n]??null}}function _k(e,t){return $t(Ue({schemaVersion:Ye,entryIds:e,cursor:t}))}function Ga(e,t){if(!Number.isInteger(e)||e<-1||e>=t)throw new W(J.INVALID_SCHEMA,`history cursor is out of bounds: ${e}`)}function Fk(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 Mp(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=Jk(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 Op(e,t){let n=uc(e,t.entryId),r={id:t.entryId,...t.entryBody},o=[...t.blobs.map(a=>Dp(dc(e,a.digest),a.bytes,{kind:"blob",digest:a.digest},pc(e,a.digest))),Dp(n,Ue(r),{kind:"entry",digest:t.entryId},fc(e,t.entryId))],s=(await Promise.allSettled(o)).find(a=>a.status==="rejected");if(s)throw s.reason}async function Dp(e,t,n,r){let o=await nc(e)??(r?await nc(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 Wp(e,t)}async function Jp(e,t,n){let r=[...t],o=r.length-1;for(;;){if((await zp(e,r)).totalBytes<=n.maxSessionBytes&&r.length<=n.maxEntries)return{entryIds:r,cursor:o};if(o<=0||r.length===0)throw new W(J.CAPACITY_EXCEEDED,"history store exceeds capacity limits and the current entry cannot be trimmed");r.shift(),o-=1}}async function Mk(e,t,n){ic(t);let r=lc(e,t.stageId);if(n){await Ar(r,t);return}await Kk(r,t)}async function Ya(e,t){let n=await nc(lc(e,t));if(n===null)return null;let r=Fr(Buffer.from(n).toString("utf8"),`history stage ${t}`),o=ic(r);if(o.stageId!==t)throw new W(J.INVALID_SCHEMA,`history stage id mismatch: ${t}`);return o}async function gi(e){let t=[];for(let n of await mi(cc(e))){if(!n.endsWith(".json"))continue;let r=n.slice(0,-5);Qa(r);let o=await Ya(e,r);o&&t.push(o)}return t}async function Lp(e,t){ic(t);let n=await Ve(e),r=(await gi(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 Bp(uc(e,t.entryId),fc(e,t.entryId));for(let s of t.blobIds)i.has(s)||await Bp(dc(e,s),pc(e,s));await fi(e,t.stageId),await rc(Mr(e)),await rc(Or(e))}async function fi(e,t){await Za(lc(e,t)),await Ok(e)}async function Ok(e){try{await ye.rmdir(cc(e))}catch(t){if(Dr(t)||at(t)&&t.code==="ENOTEMPTY")return;throw t}}async function Dk(e,t){for(let n of await gi(e))n.entryId===t&&await fi(e,n.stageId)}async function Za(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 Bp(e,t){await Za(e),await Za(t)}function ic(e){if(!at(e)||e.schemaVersion!==Ha||typeof e.stageId!="string"||!Xp(e.stageId)||!Ke(e.entryId))throw new W(J.INVALID_SCHEMA,"history stage schema is invalid");let t=Hp(e.blobIds,"history stage blobIds");return{schemaVersion:Ha,stageId:e.stageId,entryId:e.entryId,blobIds:t}}function Qa(e){if(!Xp(e))throw new W(J.INVALID_PATH,"history stageId must be a UUID")}function Xp(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 gi(e)){n.add(c.entryId);for(let l of c.blobIds)r.add(l)}let o=Mr(e),i=await mi(o);for(let c of i){if(!c.endsWith(".json"))continue;let l=Vp(c.slice(0,-5));l&&!n.has(l)&&await pi(be.join(o,c))}let s=Or(e),a=await mi(s);for(let c of a){let l=Vp(c);l&&!r.has(l)&&await pi(be.join(s,c))}}async function Ve(e){let t=hi(e),n=await jt(t,J.NOT_FOUND,"index"),r=Fr(Buffer.from(n).toString("utf8"),"index"),o=$k(r),i=[...o.entryIds],{totalBytes:s}=await zp(e,i),a=i.slice(0,o.cursor+1).reverse(),c=i.slice(o.cursor+1);return{schemaVersion:Ye,digest:o.digest,entryIds:i,cursor:o.cursor,currentId:i[o.cursor]??null,undoIds:a,redoIds:c,totalBytes:s}}async function zp(e,t){let n=0,r=new Set,o=hi(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 Zp(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 mc(e,u.digest),p=await jt(d,J.NOT_FOUND,"blob");ac(p,u.digest,d),n+=p.byteLength}}return{totalBytes:n}}async function _r(e,t){let n=await Zp(e,t),r=await jt(n,J.NOT_FOUND,"entry"),o=Fr(Buffer.from(r).toString("utf8"),`entry ${t}`),i=Vk(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 mc(e,a.digest),l=await jt(c,J.NOT_FOUND,"blob");ac(l,a.digest,c)}return i}async function sc(e,t,n){let r={schemaVersion:Ye,digest:$t(Ue({schemaVersion:Ye,entryIds:t,cursor:n})),entryIds:t,cursor:n};await Ar(hi(e),r)}function qa(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 jp(e){let t=$t(Ue({schemaVersion:Ye,entryIds:e.entryIds,cursor:e.cursor}));try{return await sc(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 Lk(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 Bk(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 mi(t))n!=="stages"&&await ye.rm(be.join(t,n),{recursive:!0,force:!0})}function $k(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=Hp(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 Vk(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=tc(e.manifest,"entry.manifest"),o=Uk(e.blobs);return{id:t,schemaVersion:Ye,kind:n,manifest:r,blobs:o}}function Uk(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 Wp(e,Ue(t))}async function Kk(e,t){let n=be.dirname(e),r=be.basename(e),o=be.join(n,`.${r}.${process.pid}.${oc()}.tmp`);await ye.mkdir(n,{recursive:!0});try{await ye.writeFile(o,Ue(t),{flag:"wx"}),await ye.rename(o,e)}finally{await pi(o)}}async function Wp(e,t){let n=be.dirname(e),r=be.basename(e),o=be.join(n,`.${r}.${process.pid}.${oc()}.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 rc(n)}finally{await pi(o)}}function Ue(e){return Buffer.from(JSON.stringify(ec(e)),"utf8")}function ec(e){if(Array.isArray(e))return e.map(t=>ec(t));if(at(e)){let t={};for(let n of Object.keys(e).sort())t[n]=ec(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 tc(e,t){if(e===null)return null;switch(typeof e){case"boolean":case"number":case"string":return e;case"object":if(Array.isArray(e))return e.map(n=>tc(n,t));if(at(e)){let n={};for(let[r,o]of Object.entries(e))n[r]=tc(o,t);return n}break}throw new W(J.INVALID_JSON,`${t} must be JSON-serializable`)}function Hp(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 di(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:${Rk("sha256").update(e).digest("hex")}`}function Jk(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 nc(e){try{return await ye.readFile(e)}catch(t){if(Dr(t))return null;throw t}}function ac(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 pi(e){try{await ye.rm(e,{force:!0,recursive:!0})}catch{}}async function rc(e){try{let t=await ye.open(e,"r");try{await t.sync()}finally{await t.close()}}catch{}}async function mi(e){try{return await ye.readdir(e)}catch(t){if(Dr(t))return[];throw t}}function Xk(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 hi(e){return be.join(e,Nk)}function Wa(e){return be.join(e,Pk)}function zk(e){return be.join(e,Ak)}function Gp(e){return be.join(e,Tk)}async function $p(e){try{let t=await ye.readFile(Gp(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 li(e){let t=await jt(e,J.RECOVERY_PENDING,"transaction journal"),n=Fr(Buffer.from(t).toString("utf8"),"transaction journal");return Yp(n),n}function Yp(e){if(!at(e)||e.schemaVersion!==wk||typeof e.transactionId!="string"||e.transactionId.length===0||typeof e.operationId!="string"||e.operationId.length===0||!["prepared","files-written","history-published"].includes(e.phase)||!Fk(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 Wk(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 cc(e){return be.join(Tr(e),"stages")}function lc(e,t){return be.join(cc(e),`${t}.json`)}function uc(e,t){return be.join(Mr(e),`${qp(t)}.json`)}function dc(e,t){return be.join(Or(e),qp(t))}function fc(e,t){return be.join(Mr(e),`${t}.json`)}function pc(e,t){return be.join(Or(e),t)}async function Zp(e,t){return Qp(uc(e,t),fc(e,t))}async function mc(e,t){return Qp(dc(e,t),pc(e,t))}async function Qp(e,t){return await Le(e)?e:await Le(t)?t:e}function qp(e){return e.slice(7)}function Vp(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 Hk(e){return{maxEntries:e?.maxEntries??ui.maxEntries,maxSessionBytes:e?.maxSessionBytes??ui.maxSessionBytes,maxEntryBytes:e?.maxEntryBytes??ui.maxEntryBytes}}async function Gk(e){let t=hi(e);await Le(t)||await sc(e,[],-1)}import{createHash as Yk}from"node:crypto";import{computeSiteEditCompositionKey as tm,ManagedPageTemplateRouteManifestV1Schema as Zk}from"@vcp-dev/contracts";var Qk="app/_vcp/page-templates/runtime.tsx",nm=".vcp/page-templates/routes/",qk="app/_vcp/page-templates/routes/";function rm(e){return e.startsWith(nm)&&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=Go(e);return Yk("sha256").update(t,"utf8").digest("hex").slice(0,16)}function xi(e){return e.replace(/[^A-Za-z0-9_-]/g,"_")}function Lr(e,t){let n=$n(e),r=`${qk}${n}`,o=xi(t);return{routeRoot:r,manifestFile:`${nm}${n}.json`,runtimeFile:Qk,registryFile:`${r}/registry.ts`,templateEntryFile:`${r}/templates/${o}/page.tsx`}}function om(e){let t=iC(e),n=new Map;for(let r of t){let o=xi(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 gc(e){let t=Go(e.routeId),n=im(e.files),r=Lr(t,""),o=n.get(r.manifestFile);if(o===void 0)return null;let i=rC(t,r.manifestFile,o);return oC({routeId:t,manifest:i,files:n}),i}function eC(e){let t=Go(e.selector.routeId),n=ln(e.canonicalEntryFile),r=gc({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 tC(e){let t=im(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(rm(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=gc({routeId:l.routeId,files:t});if(u===null){let d={routeId:l.routeId};a.push(nC(d,l.entryFile));continue}for(let d of[...u.templates].sort(sC)){let p={routeId:l.routeId,effectiveTemplateId:d.template_id},m={context:p,entryFile:ln(d.entry_file)};a.push({key:tm(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)=>aC(l.composition,u.composition)||yi(l.key,u.key)).map(({composition:l})=>l)}function nC(e,t){return{key:tm(e),composition:{context:e,entryFile:t}}}function im(e){let t=new Map;if(lC(e)){for(let n of e)em(t,n.path,n.content);return t}for(let[n,r]of e)em(t,n,r);return t}function em(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 rC(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=Zk.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 oC(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),om(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=xi(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),cC(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 iC(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 sC(e,t){return+(t.kind==="default")-+(e.kind==="default")||yi(e.template_id,t.template_id)}function aC(e,t){let n=yi(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)||yi(r,o)}function yi(e,t){return e<t?-1:e>t?1:0}function cC(e,t){return e.startsWith(`${t}/`)}function ln(e){return e.replace(/\\/g,"/").replace(/^\.\//,"")}function lC(e){return Array.isArray(e)}export{W as FileHistoryStoreError,Ae as PageTemplateManagedSourceError,ci as PreviewFileSystemSiteEditEngineRuntime,Sf as SITE_EDIT_RAW_COLOR_LITERAL_RE,si as SnapshotSiteEditEngineRuntime,om as assertNoPageTemplateSafeNameCollision,Lr as computeManagedPageTemplatePaths,$n as computePageTemplateRouteKey,xi as computePageTemplateSafeName,Ck as createPreviewSiteEditEngineRuntime,Ek as createSiteEditEngineRuntime,rm as isManagedPageTemplateManifestPath,Up as openFileHistoryStore,gc as parseManagedPageTemplateManifest,eC as resolveManagedPageTemplateComposition,tC as scanSiteEditCompositionsFromFiles,Sr as scanSiteEditThemeStyleViolations};
|