[{"data":1,"prerenderedAt":1064},["ShallowReactive",2],{"navigation_docs":3,"-guides-testing":199,"-guides-testing-surround":1059},[4,23,65,87,133,159,177],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":22},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"Guides","i-lucide-compass","\u002Fguides","2.guides",[29,33,37,41,45,49,53,57,61],{"title":30,"path":31,"stem":32},"Authenticate","\u002Fguides\u002Fauthentication","2.guides\u002F1.authentication",{"title":34,"path":35,"stem":36},"Work with several forges","\u002Fguides\u002Fmultiple-forges","2.guides\u002F2.multiple-forges",{"title":38,"path":39,"stem":40},"Configure from the environment","\u002Fguides\u002Fenvironment","2.guides\u002F3.environment",{"title":42,"path":43,"stem":44},"Receive webhooks","\u002Fguides\u002Fwebhooks","2.guides\u002F4.webhooks",{"title":46,"path":47,"stem":48},"Check what a forge supports","\u002Fguides\u002Fcapabilities","2.guides\u002F5.capabilities",{"title":50,"path":51,"stem":52},"Handle errors and rate limits","\u002Fguides\u002Ferrors","2.guides\u002F6.errors",{"title":54,"path":55,"stem":56},"Page through results","\u002Fguides\u002Fpagination","2.guides\u002F7.pagination",{"title":58,"path":59,"stem":60},"Browser bundles","\u002Fguides\u002Fbundling","2.guides\u002F8.bundling",{"title":62,"path":63,"stem":64},"Test your code","\u002Fguides\u002Ftesting","2.guides\u002F9.testing",{"title":66,"icon":67,"path":68,"stem":69,"children":70,"page":22},"Concepts","i-lucide-lightbulb","\u002Fconcepts","3.concepts",[71,75,79,83],{"title":72,"path":73,"stem":74},"Data model","\u002Fconcepts\u002Fdata-model","3.concepts\u002F1.data-model",{"title":76,"path":77,"stem":78},"Capabilities","\u002Fconcepts\u002Fcapabilities","3.concepts\u002F2.capabilities",{"title":80,"path":81,"stem":82},"Providers and factories","\u002Fconcepts\u002Fproviders","3.concepts\u002F3.providers",{"title":84,"path":85,"stem":86},"Events","\u002Fconcepts\u002Fevents","3.concepts\u002F4.events",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":22},"Providers","i-lucide-server","\u002Fproviders","4.providers",[93,97,101,105,109,113,117,121,125,129],{"title":94,"path":95,"stem":96},"Azure DevOps","\u002Fproviders\u002Fazure-devops","4.providers\u002Fazure-devops",{"title":98,"path":99,"stem":100},"Bitbucket Cloud","\u002Fproviders\u002Fbitbucket","4.providers\u002Fbitbucket",{"title":102,"path":103,"stem":104},"Cursor Origin","\u002Fproviders\u002Fcursor-origin","4.providers\u002Fcursor-origin",{"title":106,"path":107,"stem":108},"Forgejo and Codeberg","\u002Fproviders\u002Fforgejo","4.providers\u002Fforgejo",{"title":110,"path":111,"stem":112},"Gitea","\u002Fproviders\u002Fgitea","4.providers\u002Fgitea",{"title":114,"path":115,"stem":116},"Gitee","\u002Fproviders\u002Fgitee","4.providers\u002Fgitee",{"title":118,"path":119,"stem":120},"GitHub","\u002Fproviders\u002Fgithub","4.providers\u002Fgithub",{"title":122,"path":123,"stem":124},"GitLab","\u002Fproviders\u002Fgitlab","4.providers\u002Fgitlab",{"title":126,"path":127,"stem":128},"pushin.eu","\u002Fproviders\u002Fpushin","4.providers\u002Fpushin",{"title":130,"path":131,"stem":132},"Tangled","\u002Fproviders\u002Ftangled","4.providers\u002Ftangled",{"title":134,"icon":135,"path":136,"stem":137,"children":138,"page":22},"Reference","i-lucide-book-marked","\u002Freference","5.reference",[139,143,147,151,155],{"title":140,"path":141,"stem":142},"Provider API","\u002Freference\u002Fprovider-api","5.reference\u002F1.provider-api",{"title":144,"path":145,"stem":146},"Capability matrix","\u002Freference\u002Fcapability-matrix","5.reference\u002F2.capability-matrix",{"title":148,"path":149,"stem":150},"Errors","\u002Freference\u002Ferrors","5.reference\u002F3.errors",{"title":152,"path":153,"stem":154},"Environment variables","\u002Freference\u002Fenvironment-variables","5.reference\u002F4.environment-variables",{"title":156,"path":157,"stem":158},"JSON Schemas","\u002Freference\u002Fjson-schemas","5.reference\u002F5.json-schemas",{"title":160,"icon":161,"path":162,"stem":163,"children":164,"page":22},"Examples","i-lucide-boxes","\u002Fexamples","6.examples",[165,169,173],{"title":166,"path":167,"stem":168},"Inbox CLI","\u002Fexamples\u002Finbox-cli","6.examples\u002F1.inbox-cli",{"title":170,"path":171,"stem":172},"Label bot","\u002Fexamples\u002Flabel-bot","6.examples\u002F2.label-bot",{"title":174,"path":175,"stem":176},"Release digest","\u002Fexamples\u002Frelease-digest","6.examples\u002F3.release-digest",{"title":178,"icon":179,"path":180,"stem":181,"children":182,"page":22},"Contributing","i-lucide-git-pull-request","\u002Fcontributing","7.contributing",[183,187,191,195],{"title":184,"path":185,"stem":186},"Contribution guide","\u002Fcontributing\u002Fguidelines","7.contributing\u002F1.guidelines",{"title":188,"path":189,"stem":190},"Write a provider","\u002Fcontributing\u002Fwrite-a-provider","7.contributing\u002F2.write-a-provider",{"title":192,"path":193,"stem":194},"Record fixtures","\u002Fcontributing\u002Frecord-fixtures","7.contributing\u002F3.record-fixtures",{"title":196,"path":197,"stem":198},"Contributors","\u002Fcontributing\u002Fcontributors","7.contributing\u002F4.contributors",{"id":200,"title":62,"body":201,"description":1052,"extension":1053,"links":1054,"meta":1055,"navigation":319,"path":63,"seo":1057,"stem":64,"__hash__":1058},"docs\u002F2.guides\u002F9.testing.md",{"type":202,"value":203,"toc":1047},"minimark",[204,220,225,246,616,631,635,645,1019,1025,1029,1043],[205,206,207,211,212,215,216,219],"p",{},[208,209,210],"code",{},"forges"," ships two test helpers. ",[208,213,214],{},"forges\u002Ffake"," is an in-memory forge. ",[208,217,218],{},"forges\u002Ftesting"," replays recorded HTTP responses. Leave both out of production bundles.",[221,222,224],"h2",{"id":223},"use-the-in-memory-forge","Use the in-memory forge",[205,226,227,230,231,234,235,237,238,241,242,245],{},[208,228,229],{},"fake()"," has the full provider API. Seed it, run your code and assert on ",[208,232,233],{},"store",". Every write updates ",[208,236,233],{}," and appends a ",[208,239,240],{},"ForgeEvent"," to ",[208,243,244],{},"store.events",":",[247,248,253],"pre",{"className":249,"code":250,"language":251,"meta":252,"style":252},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { fake } from 'forges\u002Ffake'\nimport { expect, it } from 'vitest'\n\nit('closes stale issues', async () => {\n  const forge = fake({\n    seed: {\n      threads: [\n        {\n          repo: 'acme\u002Fwidgets',\n          kind: 'issue',\n          title: 'Crash on start',\n          labels: ['stale'],\n        },\n      ],\n    },\n  })\n\n  await closeStale(forge.create())\n\n  expect(forge.store.events.map(event => event.action)).toEqual([\n    'closed',\n  ])\n})\n","ts","",[208,254,255,287,314,321,354,374,384,395,401,419,436,453,476,482,490,496,505,510,533,538,589,602,608],{"__ignoreMap":252},[256,257,260,264,268,272,275,278,281,284],"span",{"class":258,"line":259},"line",1,[256,261,263],{"class":262},"s7zQu","import",[256,265,267],{"class":266},"sMK4o"," {",[256,269,271],{"class":270},"sTEyZ"," fake",[256,273,274],{"class":266}," }",[256,276,277],{"class":262}," from",[256,279,280],{"class":266}," '",[256,282,214],{"class":283},"sfazB",[256,285,286],{"class":266},"'\n",[256,288,290,292,294,297,300,303,305,307,309,312],{"class":258,"line":289},2,[256,291,263],{"class":262},[256,293,267],{"class":266},[256,295,296],{"class":270}," expect",[256,298,299],{"class":266},",",[256,301,302],{"class":270}," it",[256,304,274],{"class":266},[256,306,277],{"class":262},[256,308,280],{"class":266},[256,310,311],{"class":283},"vitest",[256,313,286],{"class":266},[256,315,317],{"class":258,"line":316},3,[256,318,320],{"emptyLinePlaceholder":319},true,"\n",[256,322,324,328,331,334,337,339,341,345,348,351],{"class":258,"line":323},4,[256,325,327],{"class":326},"s2Zo4","it",[256,329,330],{"class":270},"(",[256,332,333],{"class":266},"'",[256,335,336],{"class":283},"closes stale issues",[256,338,333],{"class":266},[256,340,299],{"class":266},[256,342,344],{"class":343},"spNyl"," async",[256,346,347],{"class":266}," ()",[256,349,350],{"class":343}," =>",[256,352,353],{"class":266}," {\n",[256,355,357,360,363,366,368,371],{"class":258,"line":356},5,[256,358,359],{"class":343},"  const",[256,361,362],{"class":270}," forge",[256,364,365],{"class":266}," =",[256,367,271],{"class":326},[256,369,330],{"class":370},"swJcz",[256,372,373],{"class":266},"{\n",[256,375,377,380,382],{"class":258,"line":376},6,[256,378,379],{"class":370},"    seed",[256,381,245],{"class":266},[256,383,353],{"class":266},[256,385,387,390,392],{"class":258,"line":386},7,[256,388,389],{"class":370},"      threads",[256,391,245],{"class":266},[256,393,394],{"class":370}," [\n",[256,396,398],{"class":258,"line":397},8,[256,399,400],{"class":266},"        {\n",[256,402,404,407,409,411,414,416],{"class":258,"line":403},9,[256,405,406],{"class":370},"          repo",[256,408,245],{"class":266},[256,410,280],{"class":266},[256,412,413],{"class":283},"acme\u002Fwidgets",[256,415,333],{"class":266},[256,417,418],{"class":266},",\n",[256,420,422,425,427,429,432,434],{"class":258,"line":421},10,[256,423,424],{"class":370},"          kind",[256,426,245],{"class":266},[256,428,280],{"class":266},[256,430,431],{"class":283},"issue",[256,433,333],{"class":266},[256,435,418],{"class":266},[256,437,439,442,444,446,449,451],{"class":258,"line":438},11,[256,440,441],{"class":370},"          title",[256,443,245],{"class":266},[256,445,280],{"class":266},[256,447,448],{"class":283},"Crash on start",[256,450,333],{"class":266},[256,452,418],{"class":266},[256,454,456,459,461,464,466,469,471,474],{"class":258,"line":455},12,[256,457,458],{"class":370},"          labels",[256,460,245],{"class":266},[256,462,463],{"class":370}," [",[256,465,333],{"class":266},[256,467,468],{"class":283},"stale",[256,470,333],{"class":266},[256,472,473],{"class":370},"]",[256,475,418],{"class":266},[256,477,479],{"class":258,"line":478},13,[256,480,481],{"class":266},"        },\n",[256,483,485,488],{"class":258,"line":484},14,[256,486,487],{"class":370},"      ]",[256,489,418],{"class":266},[256,491,493],{"class":258,"line":492},15,[256,494,495],{"class":266},"    },\n",[256,497,499,502],{"class":258,"line":498},16,[256,500,501],{"class":266},"  }",[256,503,504],{"class":370},")\n",[256,506,508],{"class":258,"line":507},17,[256,509,320],{"emptyLinePlaceholder":319},[256,511,513,516,519,521,524,527,530],{"class":258,"line":512},18,[256,514,515],{"class":262},"  await",[256,517,518],{"class":326}," closeStale",[256,520,330],{"class":370},[256,522,523],{"class":270},"forge",[256,525,526],{"class":266},".",[256,528,529],{"class":326},"create",[256,531,532],{"class":370},"())\n",[256,534,536],{"class":258,"line":535},19,[256,537,320],{"emptyLinePlaceholder":319},[256,539,541,544,546,548,550,552,554,557,559,562,564,568,570,573,575,578,581,583,586],{"class":258,"line":540},20,[256,542,543],{"class":326},"  expect",[256,545,330],{"class":370},[256,547,523],{"class":270},[256,549,526],{"class":266},[256,551,233],{"class":270},[256,553,526],{"class":266},[256,555,556],{"class":270},"events",[256,558,526],{"class":266},[256,560,561],{"class":326},"map",[256,563,330],{"class":370},[256,565,567],{"class":566},"sHdIc","event",[256,569,350],{"class":343},[256,571,572],{"class":270}," event",[256,574,526],{"class":266},[256,576,577],{"class":270},"action",[256,579,580],{"class":370},"))",[256,582,526],{"class":266},[256,584,585],{"class":326},"toEqual",[256,587,588],{"class":370},"([\n",[256,590,592,595,598,600],{"class":258,"line":591},21,[256,593,594],{"class":266},"    '",[256,596,597],{"class":283},"closed",[256,599,333],{"class":266},[256,601,418],{"class":266},[256,603,605],{"class":258,"line":604},22,[256,606,607],{"class":370},"  ])\n",[256,609,611,614],{"class":258,"line":610},23,[256,612,613],{"class":266},"}",[256,615,504],{"class":270},[205,617,618,619,622,623,626,627,630],{},"To match a real forge, pass ",[208,620,621],{},"capabilities"," with the capabilities of a real provider, or ",[208,624,625],{},"support"," to override single verbs, for example ",[208,628,629],{},"{ 'threads.addLabels': false }",". Your fallback paths then run in tests.",[221,632,634],{"id":633},"replay-recorded-responses","Replay recorded responses",[205,636,637,640,641,644],{},[208,638,639],{},"fixtureFetch()"," serves recorded responses to a real provider, so the provider's parsing runs in your test. ",[208,642,643],{},"signDelivery()"," signs a webhook body with the scheme of a forge:",[247,646,648],{"className":249,"code":647,"language":251,"meta":252,"style":252},"import { readFile } from 'node:fs\u002Fpromises'\nimport { github } from 'forges\u002Fgithub'\nimport {\n  fixtureFetch,\n  loadFixtures,\n  signDelivery,\n} from 'forges\u002Ftesting'\n\nconst { fetch, calls } = fixtureFetch(\n  await loadFixtures(new URL('.\u002Ffixtures\u002F', import.meta.url)),\n)\nconst forge = github({ fetch, webhookSecret: 'secret' }).create()\n\nconst body = await readFile(\n  new URL('.\u002Ffixtures\u002Fissue-opened.json', import.meta.url),\n  'utf8',\n)\nconst headers = await signDelivery('github', body, 'secret', {\n  'x-github-event': 'issues',\n})\nconst events = await forge.webhooks.ingest({ headers, body })\n",[208,649,650,670,690,696,703,710,717,729,733,758,799,803,848,852,868,899,911,915,955,975,981],{"__ignoreMap":252},[256,651,652,654,656,659,661,663,665,668],{"class":258,"line":259},[256,653,263],{"class":262},[256,655,267],{"class":266},[256,657,658],{"class":270}," readFile",[256,660,274],{"class":266},[256,662,277],{"class":262},[256,664,280],{"class":266},[256,666,667],{"class":283},"node:fs\u002Fpromises",[256,669,286],{"class":266},[256,671,672,674,676,679,681,683,685,688],{"class":258,"line":289},[256,673,263],{"class":262},[256,675,267],{"class":266},[256,677,678],{"class":270}," github",[256,680,274],{"class":266},[256,682,277],{"class":262},[256,684,280],{"class":266},[256,686,687],{"class":283},"forges\u002Fgithub",[256,689,286],{"class":266},[256,691,692,694],{"class":258,"line":316},[256,693,263],{"class":262},[256,695,353],{"class":266},[256,697,698,701],{"class":258,"line":323},[256,699,700],{"class":270},"  fixtureFetch",[256,702,418],{"class":266},[256,704,705,708],{"class":258,"line":356},[256,706,707],{"class":270},"  loadFixtures",[256,709,418],{"class":266},[256,711,712,715],{"class":258,"line":376},[256,713,714],{"class":270},"  signDelivery",[256,716,418],{"class":266},[256,718,719,721,723,725,727],{"class":258,"line":386},[256,720,613],{"class":266},[256,722,277],{"class":262},[256,724,280],{"class":266},[256,726,218],{"class":283},[256,728,286],{"class":266},[256,730,731],{"class":258,"line":397},[256,732,320],{"emptyLinePlaceholder":319},[256,734,735,738,740,743,745,748,750,752,755],{"class":258,"line":403},[256,736,737],{"class":343},"const",[256,739,267],{"class":266},[256,741,742],{"class":270}," fetch",[256,744,299],{"class":266},[256,746,747],{"class":270}," calls ",[256,749,613],{"class":266},[256,751,365],{"class":266},[256,753,754],{"class":326}," fixtureFetch",[256,756,757],{"class":270},"(\n",[256,759,760,762,765,767,770,773,775,777,780,782,784,787,789,792,794,797],{"class":258,"line":421},[256,761,515],{"class":262},[256,763,764],{"class":326}," loadFixtures",[256,766,330],{"class":270},[256,768,769],{"class":266},"new",[256,771,772],{"class":326}," URL",[256,774,330],{"class":270},[256,776,333],{"class":266},[256,778,779],{"class":283},".\u002Ffixtures\u002F",[256,781,333],{"class":266},[256,783,299],{"class":266},[256,785,786],{"class":262}," import",[256,788,526],{"class":266},[256,790,791],{"class":270},"meta",[256,793,526],{"class":266},[256,795,796],{"class":270},"url))",[256,798,418],{"class":266},[256,800,801],{"class":258,"line":438},[256,802,504],{"class":270},[256,804,805,807,810,813,815,817,820,822,824,827,829,831,834,836,838,841,843,845],{"class":258,"line":455},[256,806,737],{"class":343},[256,808,809],{"class":270}," forge ",[256,811,812],{"class":266},"=",[256,814,678],{"class":326},[256,816,330],{"class":270},[256,818,819],{"class":266},"{",[256,821,742],{"class":270},[256,823,299],{"class":266},[256,825,826],{"class":370}," webhookSecret",[256,828,245],{"class":266},[256,830,280],{"class":266},[256,832,833],{"class":283},"secret",[256,835,333],{"class":266},[256,837,274],{"class":266},[256,839,840],{"class":270},")",[256,842,526],{"class":266},[256,844,529],{"class":326},[256,846,847],{"class":270},"()\n",[256,849,850],{"class":258,"line":478},[256,851,320],{"emptyLinePlaceholder":319},[256,853,854,856,859,861,864,866],{"class":258,"line":484},[256,855,737],{"class":343},[256,857,858],{"class":270}," body ",[256,860,812],{"class":266},[256,862,863],{"class":262}," await",[256,865,658],{"class":326},[256,867,757],{"class":270},[256,869,870,873,875,877,879,882,884,886,888,890,892,894,897],{"class":258,"line":492},[256,871,872],{"class":266},"  new",[256,874,772],{"class":326},[256,876,330],{"class":270},[256,878,333],{"class":266},[256,880,881],{"class":283},".\u002Ffixtures\u002Fissue-opened.json",[256,883,333],{"class":266},[256,885,299],{"class":266},[256,887,786],{"class":262},[256,889,526],{"class":266},[256,891,791],{"class":270},[256,893,526],{"class":266},[256,895,896],{"class":270},"url)",[256,898,418],{"class":266},[256,900,901,904,907,909],{"class":258,"line":498},[256,902,903],{"class":266},"  '",[256,905,906],{"class":283},"utf8",[256,908,333],{"class":266},[256,910,418],{"class":266},[256,912,913],{"class":258,"line":507},[256,914,504],{"class":270},[256,916,917,919,922,924,926,929,931,933,936,938,940,943,945,947,949,951,953],{"class":258,"line":512},[256,918,737],{"class":343},[256,920,921],{"class":270}," headers ",[256,923,812],{"class":266},[256,925,863],{"class":262},[256,927,928],{"class":326}," signDelivery",[256,930,330],{"class":270},[256,932,333],{"class":266},[256,934,935],{"class":283},"github",[256,937,333],{"class":266},[256,939,299],{"class":266},[256,941,942],{"class":270}," body",[256,944,299],{"class":266},[256,946,280],{"class":266},[256,948,833],{"class":283},[256,950,333],{"class":266},[256,952,299],{"class":266},[256,954,353],{"class":266},[256,956,957,959,962,964,966,968,971,973],{"class":258,"line":535},[256,958,903],{"class":266},[256,960,961],{"class":370},"x-github-event",[256,963,333],{"class":266},[256,965,245],{"class":266},[256,967,280],{"class":266},[256,969,970],{"class":283},"issues",[256,972,333],{"class":266},[256,974,418],{"class":266},[256,976,977,979],{"class":258,"line":540},[256,978,613],{"class":266},[256,980,504],{"class":270},[256,982,983,985,988,990,992,994,996,999,1001,1004,1006,1008,1011,1013,1015,1017],{"class":258,"line":591},[256,984,737],{"class":343},[256,986,987],{"class":270}," events ",[256,989,812],{"class":266},[256,991,863],{"class":262},[256,993,362],{"class":270},[256,995,526],{"class":266},[256,997,998],{"class":270},"webhooks",[256,1000,526],{"class":266},[256,1002,1003],{"class":326},"ingest",[256,1005,330],{"class":270},[256,1007,819],{"class":266},[256,1009,1010],{"class":270}," headers",[256,1012,299],{"class":266},[256,1014,858],{"class":270},[256,1016,613],{"class":266},[256,1018,504],{"class":270},[205,1020,1021,1024],{},[208,1022,1023],{},"calls"," records every request the provider made, including ones that no fixture matched. Use it to assert that a capability check prevented a write.",[221,1026,1028],{"id":1027},"record-your-own-fixtures","Record your own fixtures",[205,1030,1031,1034,1035,1038,1039,1042],{},[208,1032,1033],{},"recordingFetch()"," wraps ",[208,1036,1037],{},"fetch"," and collects each response as a fixture that you can save and replay. It doesn't record request headers, but it does record URLs and response bodies, which can hold tokens. Pass a ",[208,1040,1041],{},"redact"," function to clean each fixture before you save it.",[1044,1045,1046],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":252,"searchDepth":289,"depth":289,"links":1048},[1049,1050,1051],{"id":223,"depth":289,"text":224},{"id":633,"depth":289,"text":634},{"id":1027,"depth":289,"text":1028},"Run your code against an in-memory forge or recorded responses.","md",null,{"icon":1056},"i-lucide-flask-conical",{"title":62,"description":1052},"7djVDkGZINcDpNoAeF_1rc_8BwSjnoyUbbJyvr6hzts",[1060,1062],{"title":58,"path":59,"stem":60,"description":1061,"children":-1},"Keep forges small in a browser bundle, and see how CI checks the sizes.",{"title":72,"path":73,"stem":74,"description":1063,"children":-1},"How refs, threads, notifications and events describe the same things on every forge.",1791296689727]