{
  "version": 3,
  "sources": ["../../src/app/ai/agents/evals2/scenarios/cms/cmsDetailPageNavigation.eval.ts"],
  "sourcesContent": ["import { assert } from \"@framerjs/shared\"\nimport type { VekterEngine } from \"document/VekterEngine.ts\"\nimport type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport type { NodeID } from \"document/models/CanvasTree/nodes/NodeID.ts\"\nimport { isRichTextNode, isWebPageNode } from \"document/models/CanvasTree/nodes/utils/nodeCheck.ts\"\nimport type { DynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { withLink } from \"document/models/CanvasTree/traits/WithLink.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport { isLinkToWebPage, type Link } from \"document/models/CanvasTree/traits/utils/Link.ts\"\nimport { nextItemVariableId, previousItemVariableId } from \"document/utils/CollectionItemVariables.ts\"\nimport { getNestedVariableId } from \"utils/collectionReferenceUtils.ts\"\nimport { agentEvalAsset } from \"../../harness/asset.ts\"\nimport { createEvalExportZipFixture } from \"../../harness/fixture.ts\"\n\nconst requestId = \"OMYUywKL5\"\nconst detailPageId = \"V7zcbtxKl\"\nconst slugVariableId = \"HFgEpgxdw\"\n\nfunction getLinks(node: CanvasNode): (Link | DynamicValue)[] {\n\tif (isRichTextNode(node)) return node.getLinks(false).filter(link => link !== undefined)\n\tif (!withLink(node)) return []\n\n\tconst link = node.getLink()\n\treturn link ? [link] : []\n}\n\nfunction findDetailPageNavigationLinkNodeIds(engine: VekterEngine, navigationVariableId: VariableID): NodeID[] {\n\tconst expectedVariableId = getNestedVariableId(navigationVariableId, slugVariableId)\n\tconst detailPage = engine.tree.getNodeWithTrait(detailPageId, isWebPageNode)\n\tassert(detailPage?.isLoaded(), `Expected detail page '${detailPageId}' to be loaded.`)\n\n\tconst nodeIds: NodeID[] = []\n\tfor (const node of detailPage.getPrimaryVariant().walk()) {\n\t\tconst links = getLinks(node)\n\t\tif (links.length === 0) continue\n\n\t\tconst hasNavigationLink = links.some(link => {\n\t\t\tif (!isLinkToWebPage(link)) return false\n\t\t\tif (link.webPageId !== detailPageId) return false\n\n\t\t\tconst pathVariable = link.pathVariables?.[slugVariableId]\n\t\t\treturn (\n\t\t\t\tisVariableReference(pathVariable) &&\n\t\t\t\tpathVariable.id === expectedVariableId &&\n\t\t\t\tpathVariable.providerId === detailPageId\n\t\t\t)\n\t\t})\n\t\tif (hasNavigationLink) nodeIds.push(node.id)\n\t}\n\n\treturn nodeIds\n}\n\nfunction expectDetailPageNavigationLink(engine: VekterEngine, navigationVariableId: VariableID): void {\n\tconst nodeIds = findDetailPageNavigationLinkNodeIds(engine, navigationVariableId)\n\tassert(nodeIds.length > 0, `Expected a detail-page link using '${navigationVariableId}'.`)\n}\n\nevaluation(\n\t\"CMS: Link Detail Page Previous And Next Entries\",\n\tcreateEvalExportZipFixture(\n\t\t\"cms-detail-page-previous-next-links-export\",\n\t\tagentEvalAsset(\"./detail-page-previous-next-links-export.zip\"),\n\t\t{\n\t\t\truntimeTarget: \"cli\",\n\t\t},\n\t),\n\t{\n\t\tid: \"cms-detail-page-previous-next-links\",\n\t\trequestId,\n\t\tstepIndex: 0,\n\t\tmaxSteps: 5,\n\t},\n\t({ current, engine, report, tools }) => {\n\t\ttools.reportReplayChecks(report, { requestId, stepIndex: 0 })\n\n\t\treport.correctness.required(\"previous entry link targets the previous CMS item\", () => {\n\t\t\texpectDetailPageNavigationLink(engine, previousItemVariableId)\n\t\t})\n\t\treport.correctness.required(\"next entry link targets the next CMS item\", () => {\n\t\t\texpectDetailPageNavigationLink(engine, nextItemVariableId)\n\t\t})\n\t\treport.correctness.forbidden(\"does not create a code-component workaround\", () => {\n\t\t\texpect(current?.request.codeFileChanges ?? []).toHaveLength(0)\n\t\t})\n\t},\n)\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,IAAM,YAAY;AAClB,IAAM,eAAe;AACrB,IAAM,iBAAiB;AAEvB,SAAS,SAAS,MAA2C;AAC5D,MAAI,eAAe,IAAI,EAAG,QAAO,KAAK,SAAS,KAAK,EAAE,OAAO,CAAAA,UAAQA,UAAS,MAAS;AACvF,MAAI,CAAC,SAAS,IAAI,EAAG,QAAO,CAAC;AAE7B,QAAM,OAAO,KAAK,QAAQ;AAC1B,SAAO,OAAO,CAAC,IAAI,IAAI,CAAC;AACzB;AAEA,SAAS,oCAAoC,QAAsB,sBAA4C;AAC9G,QAAM,qBAAqB,oBAAoB,sBAAsB,cAAc;AACnF,QAAM,aAAa,OAAO,KAAK,iBAAiB,cAAc,aAAa;AAC3E,SAAO,YAAY,SAAS,GAAG,yBAAyB,YAAY,iBAAiB;AAErF,QAAM,UAAoB,CAAC;AAC3B,aAAW,QAAQ,WAAW,kBAAkB,EAAE,KAAK,GAAG;AACzD,UAAM,QAAQ,SAAS,IAAI;AAC3B,QAAI,MAAM,WAAW,EAAG;AAExB,UAAM,oBAAoB,MAAM,KAAK,UAAQ;AAC5C,UAAI,CAAC,gBAAgB,IAAI,EAAG,QAAO;AACnC,UAAI,KAAK,cAAc,aAAc,QAAO;AAE5C,YAAM,eAAe,KAAK,gBAAgB,cAAc;AACxD,aACC,oBAAoB,YAAY,KAChC,aAAa,OAAO,sBACpB,aAAa,eAAe;AAAA,IAE9B,CAAC;AACD,QAAI,kBAAmB,SAAQ,KAAK,KAAK,EAAE;AAAA,EAC5C;AAEA,SAAO;AACR;AAEA,SAAS,+BAA+B,QAAsB,sBAAwC;AACrG,QAAM,UAAU,oCAAoC,QAAQ,oBAAoB;AAChF,SAAO,QAAQ,SAAS,GAAG,sCAAsC,oBAAoB,IAAI;AAC1F;AAEA;AAAA,EACC;AAAA,EACA;AAAA,IACC;AAAA,IACA,eAAe,8CAA8C;AAAA,IAC7D;AAAA,MACC,eAAe;AAAA,IAChB;AAAA,EACD;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,WAAW;AAAA,IACX,UAAU;AAAA,EACX;AAAA,EACA,CAAC,EAAE,SAAS,QAAQ,QAAQ,MAAM,MAAM;AACvC,UAAM,mBAAmB,QAAQ,EAAE,WAAW,WAAW,EAAE,CAAC;AAE5D,WAAO,YAAY,SAAS,qDAAqD,MAAM;AACtF,qCAA+B,QAAQ,sBAAsB;AAAA,IAC9D,CAAC;AACD,WAAO,YAAY,SAAS,6CAA6C,MAAM;AAC9E,qCAA+B,QAAQ,kBAAkB;AAAA,IAC1D,CAAC;AACD,WAAO,YAAY,UAAU,+CAA+C,MAAM;AACjF,aAAO,SAAS,QAAQ,mBAAmB,CAAC,CAAC,EAAE,aAAa,CAAC;AAAA,IAC9D,CAAC;AAAA,EACF;AACD;",
  "names": ["link"]
}
