[{"data":1,"prerenderedAt":2097},["ShallowReactive",2],{"navigation":3,"\u002Fdigging-deeper\u002Fopenapi":307,"\u002Fdigging-deeper\u002Fopenapi-surround":2092},{"3.x":4,"2.x":203},[5,32,61,99,121,147,165],{"title":6,"icon":7,"path":8,"stem":9,"children":10,"page":31},"Getting Started","i-heroicons-star","\u002Fgetting-started","1.getting-started",[11,15,19,23,27],{"title":12,"path":13,"stem":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":16,"path":17,"stem":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":20,"path":21,"stem":22},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":24,"path":25,"stem":26},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F4.configuration",{"title":28,"path":29,"stem":30},"Upgrade guide","\u002Fgetting-started\u002Fupgrade-guide","1.getting-started\u002F5.upgrade-guide",false,{"title":33,"icon":34,"path":35,"stem":36,"children":37,"page":31},"Resources","i-heroicons-document-text","\u002Fresources","2.resources",[38,41,45,49,53,57],{"title":33,"path":39,"stem":40},"\u002Fresources\u002Fresources","2.resources\u002F1.resources",{"title":42,"path":43,"stem":44},"Fields","\u002Fresources\u002Ffields","2.resources\u002F2.fields",{"title":46,"path":47,"stem":48},"Relationships","\u002Fresources\u002Frelations","2.resources\u002F3.relations",{"title":50,"path":51,"stem":52},"Validation","\u002Fresources\u002Fvalidation","2.resources\u002F4.validation",{"title":54,"path":55,"stem":56},"Perimeter","\u002Fresources\u002Fperimeter","2.resources\u002F5.perimeter",{"title":58,"path":59,"stem":60},"Limits","\u002Fresources\u002Flimits","2.resources\u002F6.limits",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":31},"Search","i-heroicons-magnifying-glass","\u002Fsearch","3.search",[67,71,75,79,83,87,91,95],{"title":68,"path":69,"stem":70},"Search overview","\u002Fsearch\u002Foverview","3.search\u002F1.overview",{"title":72,"path":73,"stem":74},"Search filters","\u002Fsearch\u002Ffilters","3.search\u002F2.filters",{"title":76,"path":77,"stem":78},"Sorts and selects","\u002Fsearch\u002Fsorts-and-selects","3.search\u002F3.sorts-and-selects",{"title":80,"path":81,"stem":82},"Includes and aggregates","\u002Fsearch\u002Fincludes-and-aggregates","3.search\u002F4.includes-and-aggregates",{"title":84,"path":85,"stem":86},"Scopes and instructions","\u002Fsearch\u002Fscopes-and-instructions","3.search\u002F5.scopes-and-instructions",{"title":88,"path":89,"stem":90},"Text search","\u002Fsearch\u002Ftext-search","3.search\u002F6.text-search",{"title":92,"path":93,"stem":94},"Search engines","\u002Fsearch\u002Fsearch-engines","3.search\u002F7.search-engines",{"title":96,"path":97,"stem":98},"Searching outside HTTP","\u002Fsearch\u002Foutside-http","3.search\u002F8.outside-http",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":31},"Writing","i-heroicons-pencil-square","\u002Fwriting","4.writing",[105,109,113,117],{"title":106,"path":107,"stem":108},"Mutate","\u002Fwriting\u002Fmutate","4.writing\u002F1.mutate",{"title":110,"path":111,"stem":112},"Writing relations","\u002Fwriting\u002Frelations","4.writing\u002F2.relations",{"title":114,"path":115,"stem":116},"Versioned rows","\u002Fwriting\u002Fversioned-rows","4.writing\u002F3.versioned-rows",{"title":118,"path":119,"stem":120},"Deleting and restoring","\u002Fwriting\u002Fdeleting","4.writing\u002F4.deleting",{"title":122,"icon":123,"path":124,"stem":125,"children":126,"page":31},"Actions and Metrics","i-heroicons-bolt","\u002Factions-and-metrics","5.actions-and-metrics",[127,131,135,139,143],{"title":128,"path":129,"stem":130},"Actions","\u002Factions-and-metrics\u002Factions","5.actions-and-metrics\u002F1.actions",{"title":132,"path":133,"stem":134},"Queued Actions","\u002Factions-and-metrics\u002Fqueued-actions","5.actions-and-metrics\u002F2.queued-actions",{"title":136,"path":137,"stem":138},"Confirmation","\u002Factions-and-metrics\u002Fconfirmation","5.actions-and-metrics\u002F3.confirmation",{"title":140,"path":141,"stem":142},"Metrics","\u002Factions-and-metrics\u002Fmetrics","5.actions-and-metrics\u002F4.metrics",{"title":144,"path":145,"stem":146},"Exports","\u002Factions-and-metrics\u002Fexports","5.actions-and-metrics\u002F5.exports",{"title":148,"icon":149,"path":150,"stem":151,"children":152,"page":31},"Authorization","i-heroicons-lock-closed","\u002Fauthorization","6.authorization",[153,157,161],{"title":154,"path":155,"stem":156},"Policies","\u002Fauthorization\u002Fpolicies","6.authorization\u002F1.policies",{"title":158,"path":159,"stem":160},"Gates","\u002Fauthorization\u002Fgates","6.authorization\u002F2.gates",{"title":162,"path":163,"stem":164},"Decision Cache","\u002Fauthorization\u002Fdecision-cache","6.authorization\u002F3.decision-cache",{"title":166,"icon":167,"path":168,"stem":169,"children":170,"page":31},"Digging Deeper","i-heroicons-list-bullet","\u002Fdigging-deeper","7.digging-deeper",[171,175,179,183,187,191,195,199],{"title":172,"path":173,"stem":174},"Details","\u002Fdigging-deeper\u002Fdetails","7.digging-deeper\u002F1.details",{"title":176,"path":177,"stem":178},"Events and Hooks","\u002Fdigging-deeper\u002Fevents-and-hooks","7.digging-deeper\u002F2.events-and-hooks",{"title":180,"path":181,"stem":182},"Custom Responses","\u002Fdigging-deeper\u002Fresponses","7.digging-deeper\u002F3.responses",{"title":184,"path":185,"stem":186},"OpenAPI Documentation","\u002Fdigging-deeper\u002Fopenapi","7.digging-deeper\u002F4.openapi",{"title":188,"path":189,"stem":190},"Precognition","\u002Fdigging-deeper\u002Fprecognition","7.digging-deeper\u002F5.precognition",{"title":192,"path":193,"stem":194},"Artisan Commands","\u002Fdigging-deeper\u002Fartisan","7.digging-deeper\u002F6.artisan",{"title":196,"path":197,"stem":198},"Laravel Boost Skill","\u002Fdigging-deeper\u002Fai-skill","7.digging-deeper\u002F7.ai-skill",{"title":200,"path":201,"stem":202},"Translations","\u002Fdigging-deeper\u002Ftranslations","7.digging-deeper\u002F8.translations",[204,215,237,260,297],{"title":6,"icon":7,"path":205,"stem":206,"children":207,"page":31},"\u002F2.x\u002Fgetting-started","2.x\u002F1.getting-started",[208,211],{"title":16,"path":209,"stem":210},"\u002F2.x\u002Fgetting-started\u002Finstallation","2.x\u002F1.getting-started\u002F1.installation",{"title":212,"path":213,"stem":214},"Upgrade Guide","\u002F2.x\u002Fgetting-started\u002Fupgrade-guide","2.x\u002F1.getting-started\u002F2.upgrade-guide",{"title":216,"icon":217,"path":218,"stem":219,"children":220,"page":31},"Endpoints","i-heroicons-arrow-uturn-left","\u002F2.x\u002Fendpoints","2.x\u002F2.endpoints",[221,224,227,230,233],{"title":172,"path":222,"stem":223},"\u002F2.x\u002Fendpoints\u002Fdetails","2.x\u002F2.endpoints\u002F1.details",{"title":62,"path":225,"stem":226},"\u002F2.x\u002Fendpoints\u002Fsearch","2.x\u002F2.endpoints\u002F2.search",{"title":106,"path":228,"stem":229},"\u002F2.x\u002Fendpoints\u002Fmutate","2.x\u002F2.endpoints\u002F3.mutate",{"title":128,"path":231,"stem":232},"\u002F2.x\u002Fendpoints\u002Factions","2.x\u002F2.endpoints\u002F4.actions",{"title":234,"path":235,"stem":236},"Delete","\u002F2.x\u002Fendpoints\u002Fdelete","2.x\u002F2.endpoints\u002F5.delete",{"title":33,"icon":34,"path":238,"stem":239,"children":240,"page":31},"\u002F2.x\u002Fresources","2.x\u002F3.resources",[241,245,249,252,256],{"title":242,"path":243,"stem":244},"Basics","\u002F2.x\u002Fresources\u002Fbasics","2.x\u002F3.resources\u002F1.basics",{"title":246,"path":247,"stem":248},"Exposed Data","\u002F2.x\u002Fresources\u002Fexposed-data","2.x\u002F3.resources\u002F2.exposed-data",{"title":46,"path":250,"stem":251},"\u002F2.x\u002Fresources\u002Frelationships","2.x\u002F3.resources\u002F3.relationships",{"title":253,"path":254,"stem":255},"Validations","\u002F2.x\u002Fresources\u002Fvalidations","2.x\u002F3.resources\u002F4.validations",{"title":257,"path":258,"stem":259},"Interactions","\u002F2.x\u002Fresources\u002Finteractions","2.x\u002F3.resources\u002F5.interactions",{"title":166,"icon":167,"path":261,"stem":262,"children":263,"page":31},"\u002F2.x\u002Fdigging-deeper","2.x\u002F4.digging-deeper",[264,267,271,274,278,282,286,290,294],{"title":128,"path":265,"stem":266},"\u002F2.x\u002Fdigging-deeper\u002Factions","2.x\u002F4.digging-deeper\u002F1.actions",{"title":268,"path":269,"stem":270},"Hooks","\u002F2.x\u002Fdigging-deeper\u002Fhooks","2.x\u002F4.digging-deeper\u002F2.hooks",{"title":158,"path":272,"stem":273},"\u002F2.x\u002Fdigging-deeper\u002Fgates","2.x\u002F4.digging-deeper\u002F3.gates",{"title":275,"path":276,"stem":277},"Authorizations","\u002F2.x\u002Fdigging-deeper\u002Fauthorizations","2.x\u002F4.digging-deeper\u002F4.authorizations",{"title":279,"path":280,"stem":281},"Full Text Search","\u002F2.x\u002Fdigging-deeper\u002Ffull-text-search","2.x\u002F4.digging-deeper\u002F5.full-text-search",{"title":283,"path":284,"stem":285},"Instructions","\u002F2.x\u002Fdigging-deeper\u002Finstructions","2.x\u002F4.digging-deeper\u002F6.instructions",{"title":287,"path":288,"stem":289},"Responses","\u002F2.x\u002Fdigging-deeper\u002Fresponses","2.x\u002F4.digging-deeper\u002F7.responses",{"title":291,"path":292,"stem":293},"Documentation","\u002F2.x\u002Fdigging-deeper\u002Fdocumentation","2.x\u002F4.digging-deeper\u002F8.documentation",{"title":188,"path":295,"stem":296},"\u002F2.x\u002Fdigging-deeper\u002Fprecognition","2.x\u002F4.digging-deeper\u002F9.precognition",{"title":298,"icon":299,"path":300,"stem":301,"children":302,"page":31},"Integrations","i-lucide-puzzle","\u002F2.x\u002Fintegrations","2.x\u002F5.integrations",[303],{"title":304,"path":305,"stem":306},"Flutter","\u002F2.x\u002Fintegrations\u002Fflutter","2.x\u002F5.integrations\u002F1.flutter",{"id":308,"title":184,"body":309,"description":2085,"extension":2086,"links":2087,"meta":2088,"navigation":1389,"path":185,"seo":2089,"sitemap":2090,"stem":186,"__hash__":2091},"docs3x\u002F7.digging-deeper\u002F4.openapi.md",{"type":310,"value":311,"toc":2076},"minimark",[312,324,328,354,369,385,392,520,524,527,729,739,932,936,1089,1168,1172,1178,1299,1309,1468,1472,1475,1583,1617,1663,1669,1719,1793,1811,1820,1838,1842,1845,1859,1862,2066,2072],[313,314,315,316,323],"p",{},"The package documents its endpoints through ",[317,318,322],"a",{"href":319,"rel":320},"https:\u002F\u002Fscramble.dedoc.co",[321],"nofollow","Scramble",". It builds the document from the declarations of your resources: fields, relations, scopes, instructions, actions, metrics, limits and gates.",[325,326,16],"h2",{"id":327},"installation",[329,330,335],"pre",{"className":331,"code":332,"language":333,"meta":334,"style":334},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","composer require dedoc\u002Fscramble:^0.13.48\n","bash","",[336,337,338],"code",{"__ignoreMap":334},[339,340,343,347,351],"span",{"class":341,"line":342},"line",1,[339,344,346],{"class":345},"sBMFI","composer",[339,348,350],{"class":349},"sfazB"," require",[339,352,353],{"class":349}," dedoc\u002Fscramble:^0.13.48\n",[313,355,356,357,360,361,364,365,368],{},"The package registers its documentation in the ",[336,358,359],{},"boot()"," method of its service provider: ",[336,362,363],{},"config\u002Fscramble.php"," needs no change. Visit ",[336,366,367],{},"\u002Fdocs\u002Fapi"," to read the document, or export it:",[329,370,372],{"className":331,"code":371,"language":333,"meta":334,"style":334},"php artisan scramble:export\n",[336,373,374],{"__ignoreMap":334},[339,375,376,379,382],{"class":341,"line":342},[339,377,378],{"class":345},"php",[339,380,381],{"class":349}," artisan",[339,383,384],{"class":349}," scramble:export\n",[313,386,387,388,391],{},"An API that your application registers with ",[336,389,390],{},"Scramble::registerApi()"," after the package boots gets the package documentation too. For an API registered before, add the transformers:",[329,393,396],{"className":394,"code":395,"language":378,"meta":334,"style":334},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Scramble::registerApi('v2', ['api_path' => 'api\u002Fv2'])\n    ->withOperationTransformers(\\Lomkit\\Rest\\Scramble\\RestOperations::class)\n    ->withDocumentTransformers(\\Lomkit\\Rest\\Scramble\\RestDocument::class);\n",[336,397,398,448,488],{"__ignoreMap":334},[339,399,400,402,406,410,413,416,419,421,424,427,429,432,434,437,440,443,445],{"class":341,"line":342},[339,401,322],{"class":345},[339,403,405],{"class":404},"sMK4o","::",[339,407,409],{"class":408},"s2Zo4","registerApi",[339,411,412],{"class":404},"(",[339,414,415],{"class":404},"'",[339,417,418],{"class":349},"v2",[339,420,415],{"class":404},[339,422,423],{"class":404},",",[339,425,426],{"class":404}," [",[339,428,415],{"class":404},[339,430,431],{"class":349},"api_path",[339,433,415],{"class":404},[339,435,436],{"class":404}," =>",[339,438,439],{"class":404}," '",[339,441,442],{"class":349},"api\u002Fv2",[339,444,415],{"class":404},[339,446,447],{"class":404},"])\n",[339,449,451,454,457,460,464,467,470,472,474,476,479,481,485],{"class":341,"line":450},2,[339,452,453],{"class":404},"    ->",[339,455,456],{"class":408},"withOperationTransformers",[339,458,459],{"class":404},"(\\",[339,461,463],{"class":462},"sTEyZ","Lomkit",[339,465,466],{"class":404},"\\",[339,468,469],{"class":462},"Rest",[339,471,466],{"class":404},[339,473,322],{"class":462},[339,475,466],{"class":404},[339,477,478],{"class":345},"RestOperations",[339,480,405],{"class":404},[339,482,484],{"class":483},"sbssI","class",[339,486,487],{"class":404},")\n",[339,489,491,493,496,498,500,502,504,506,508,510,513,515,517],{"class":341,"line":490},3,[339,492,453],{"class":404},[339,494,495],{"class":408},"withDocumentTransformers",[339,497,459],{"class":404},[339,499,463],{"class":462},[339,501,466],{"class":404},[339,503,469],{"class":462},[339,505,466],{"class":404},[339,507,322],{"class":462},[339,509,466],{"class":404},[339,511,512],{"class":345},"RestDocument",[339,514,405],{"class":404},[339,516,484],{"class":483},[339,518,519],{"class":404},");\n",[325,521,523],{"id":522},"what-the-document-holds","What the document holds",[313,525,526],{},"The document is the same for every reader. The package reads the declarations of each resource as a guest: a field, an action or a metric declared for some users only is documented as a guest sees it.",[528,529,530,549],"table",{},[531,532,533],"thead",{},[534,535,536,540,543,546],"tr",{},[537,538,539],"th",{},"Operation",[537,541,542],{},"Summary",[537,544,545],{},"Body",[537,547,548],{},"Response",[550,551,552,577,599,622,650,677,710],"tbody",{},[534,553,554,560,565,572],{},[555,556,557],"td",{},[336,558,559],{},"GET \u002F{resource}",[555,561,562],{},[336,563,564],{},"Get {Resource} details",[555,566,567,568,571],{},"the ",[336,569,570],{},"with"," parameter",[555,573,574],{},[336,575,576],{},"{Resource}Details",[534,578,579,584,589,594],{},[555,580,581],{},[336,582,583],{},"POST \u002F{resource}\u002Fsearch",[555,585,586],{},[336,587,588],{},"Search {Resource}",[555,590,591],{},[336,592,593],{},"{Resource}Search",[555,595,596],{},[336,597,598],{},"{Resource}Paginated",[534,600,601,606,611,617],{},[555,602,603],{},[336,604,605],{},"POST \u002F{resource}\u002Fmutate",[555,607,608],{},[336,609,610],{},"Mutate {Resource}",[555,612,613,616],{},[336,614,615],{},"{Resource}Mutation"," entries",[555,618,619],{},[336,620,621],{},"{Resource}MutateResult",[534,623,624,629,632,645],{},[555,625,626],{},[336,627,628],{},"POST \u002F{resource}\u002Factions\u002F{uriKey}",[555,630,631],{},"the name of the action",[555,633,634,637,638,641,642],{},[336,635,636],{},"search"," or ",[336,639,640],{},"resources",", as the target requires, and ",[336,643,644],{},"fields",[555,646,647],{},[336,648,649],{},"RestActionResponse",[534,651,652,657,660,671],{},[555,653,654],{},[336,655,656],{},"POST \u002F{resource}\u002Fmetrics\u002F{uriKey}",[555,658,659],{},"the name of the metric",[555,661,662,664,665,664,668],{},[336,663,636],{},", ",[336,666,667],{},"range",[336,669,670],{},"timezone",[555,672,673,676],{},[336,674,675],{},"data"," with the result of the metric",[534,678,679,690,701,705],{},[555,680,681,664,684,664,687],{},[336,682,683],{},"DELETE \u002F{resource}",[336,685,686],{},"POST \u002F{resource}\u002Frestore",[336,688,689],{},"DELETE \u002F{resource}\u002Fforce",[555,691,692,664,695,664,698],{},[336,693,694],{},"Delete {Resource}",[336,696,697],{},"Restore {Resource}",[336,699,700],{},"Force delete {Resource}",[555,702,703],{},[336,704,640],{},[555,706,707],{},[336,708,709],{},"{Resource}Rows",[534,711,712,717,722,724],{},[555,713,714],{},[336,715,716],{},"GET \u002F{resource}\u002Factions\u002F{action}\u002Fbatches\u002F{batch}",[555,718,719],{},[336,720,721],{},"Batch progress of {Resource} actions",[555,723],{},[555,725,726],{},[336,727,728],{},"RestBatchProgress",[313,730,731,734,735,738],{},[336,732,733],{},"{Resource}"," is the class name of the resource without its ",[336,736,737],{},"Resource"," suffix, also used as the tag.",[740,741,742,773,789,803,857,917],"ul",{},[743,744,745,749,750,753,754,757,758,760,761,764,765,768,769,772],"li",{},[746,747,748],"strong",{},"Records."," Each resource has a record, named like its tag (",[336,751,752],{},"Post","): its selectable fields with their type, the gates of a row, and each relation under its key. The morph type column of a ",[336,755,756],{},"MorphTo"," relation lists its morph types as an enum. A ",[336,759,756],{}," relation is ",[336,762,763],{},"oneOf"," the record of each target, with a ",[336,766,767],{},"discriminator"," on ",[336,770,771],{},"@type",".",[743,774,775,778,779,782,783,786,787,772],{},[746,776,777],{},"Search."," Filters list one condition per filterable field, with the operators of the field and the value that each one takes, plus the fields of each related resource one level deep and the pivot fields. Includes, aggregates, scopes and instructions have one schema per relation or name. Lists hold at most their ",[336,780,781],{},"rest.limits.sizes"," entries. ",[336,784,785],{},"sorts"," lists the key of each aggregate that sorts: an aggregate over a relation to many, with no field or on a field that is not a key, see ",[317,788,76],{"href":77},[743,790,791,794,795,798,799,802],{},[746,792,793],{},"Mutations."," ",[336,796,797],{},"attributes"," lists the fields that the operation writes, with their rules in the description. An ",[336,800,801],{},"Enum"," field lists the cases that writes accept. Each relation lists the operations that it accepts.",[743,804,805,808,809,811,812,814,815,817,818,820,821,824,825,827,828,831,832,834,835,838,839,768,841,844,845,848,849,852,853,772],{},[746,806,807],{},"Actions."," The body follows the target of the action: ",[336,810,636],{}," is required on the ",[336,813,62],{}," target, ",[336,816,640],{}," on the ",[336,819,33],{}," target. A key that the target refuses is documented as ",[336,822,823],{},"false",". ",[336,826,644],{}," lists typed ",[336,829,830],{},"{name, value}"," entries. The result is ",[336,833,763],{}," the types of ",[336,836,837],{},"ActionResponse",", with a ",[336,840,767],{},[336,842,843],{},"type",". A batched action answers ",[336,846,847],{},"RestBatchableActionResponse",", with ",[336,850,851],{},"batch",". See ",[317,854,856],{"href":855},"#actions-and-writes","Actions and writes",[743,858,859,862,863,664,866,664,869,872,873,876,877,880,881,872,884,887,888,824,891,894,895,898,899,902,903,906,907,909,910,913,914,772],{},[746,860,861],{},"Metrics."," The built-in types share ",[336,864,865],{},"RestValueResult",[336,867,868],{},"RestTrendResult",[336,870,871],{},"RestPartitionResult"," (with ",[336,874,875],{},"previous"," on each part and on ",[336,878,879],{},"other"," when the partition compares two periods), ",[336,882,883],{},"RestTableResult",[336,885,886],{},"percentile"," on a percentile column) and ",[336,889,890],{},"RestProgressResult",[336,892,893],{},"parts"," and ",[336,896,897],{},"splits"," hold at most ",[336,900,901],{},"rest.limits.sizes.groups"," entries; a partition or a trend with its own ",[336,904,905],{},"limit()"," has its schema, with that maximum, in its operation. A metric of your own documents its ",[336,908,843],{}," alone until it declares ",[336,911,912],{},"schema()",", see ",[317,915,140],{"href":916},"\u002Factions-and-metrics\u002Fmetrics#your-own-metric",[743,918,919,794,922,924,925,928,929,772],{},[746,920,921],{},"Details.",[336,923,576],{}," lists the names of the resource as enums. The base keys are required, the sections and parts optional. ",[336,926,927],{},"meta"," accepts any key when the resource overrides ",[336,930,931],{},"detailsMeta()",[933,934,856],"h3",{"id":935},"actions-and-writes",[329,937,941],{"className":938,"code":939,"language":940,"meta":334,"style":334},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"\u002Fshows\u002Factions\u002Fcancel-shows\": {\n    \"post\": {\n      \"description\": \"The action is destructive: a hint for clients, the endpoint runs it the same way.\\n\\nThe text that a client shows before it runs the action: Cancel the selected shows?\\n\\nThe action can answer 428: send the same body again with the token of the answer in `confirmation`.\",\n      \"summary\": \"Cancel Shows\",\n      \"x-lomkit-destructive\": true,\n      \"x-lomkit-confirm\": \"Cancel the selected shows?\"\n    }\n  }\n}\n","json",[336,942,943,948,966,980,1015,1036,1051,1071,1077,1083],{"__ignoreMap":334},[339,944,945],{"class":341,"line":342},[339,946,947],{"class":404},"{\n",[339,949,950,953,957,960,963],{"class":341,"line":450},[339,951,952],{"class":404},"  \"",[339,954,956],{"class":955},"spNyl","\u002Fshows\u002Factions\u002Fcancel-shows",[339,958,959],{"class":404},"\"",[339,961,962],{"class":404},":",[339,964,965],{"class":404}," {\n",[339,967,968,971,974,976,978],{"class":341,"line":490},[339,969,970],{"class":404},"    \"",[339,972,973],{"class":345},"post",[339,975,959],{"class":404},[339,977,962],{"class":404},[339,979,965],{"class":404},[339,981,983,986,989,991,993,996,999,1002,1005,1007,1010,1012],{"class":341,"line":982},4,[339,984,985],{"class":404},"      \"",[339,987,988],{"class":483},"description",[339,990,959],{"class":404},[339,992,962],{"class":404},[339,994,995],{"class":404}," \"",[339,997,998],{"class":349},"The action is destructive: a hint for clients, the endpoint runs it the same way.",[339,1000,1001],{"class":462},"\\n\\n",[339,1003,1004],{"class":349},"The text that a client shows before it runs the action: Cancel the selected shows?",[339,1006,1001],{"class":462},[339,1008,1009],{"class":349},"The action can answer 428: send the same body again with the token of the answer in `confirmation`.",[339,1011,959],{"class":404},[339,1013,1014],{"class":404},",\n",[339,1016,1018,1020,1023,1025,1027,1029,1032,1034],{"class":341,"line":1017},5,[339,1019,985],{"class":404},[339,1021,1022],{"class":483},"summary",[339,1024,959],{"class":404},[339,1026,962],{"class":404},[339,1028,995],{"class":404},[339,1030,1031],{"class":349},"Cancel Shows",[339,1033,959],{"class":404},[339,1035,1014],{"class":404},[339,1037,1039,1041,1044,1046,1048],{"class":341,"line":1038},6,[339,1040,985],{"class":404},[339,1042,1043],{"class":483},"x-lomkit-destructive",[339,1045,959],{"class":404},[339,1047,962],{"class":404},[339,1049,1050],{"class":404}," true,\n",[339,1052,1054,1056,1059,1061,1063,1065,1068],{"class":341,"line":1053},7,[339,1055,985],{"class":404},[339,1057,1058],{"class":483},"x-lomkit-confirm",[339,1060,959],{"class":404},[339,1062,962],{"class":404},[339,1064,995],{"class":404},[339,1066,1067],{"class":349},"Cancel the selected shows?",[339,1069,1070],{"class":404},"\"\n",[339,1072,1074],{"class":341,"line":1073},8,[339,1075,1076],{"class":404},"    }\n",[339,1078,1080],{"class":341,"line":1079},9,[339,1081,1082],{"class":404},"  }\n",[339,1084,1086],{"class":341,"line":1085},10,[339,1087,1088],{"class":404},"}\n",[740,1090,1091,1109,1140],{},[743,1092,1093,1094,1097,1098,1101,1102,1105,1106,1108],{},"The operation of a ",[336,1095,1096],{},"destructive()"," action carries ",[336,1099,1100],{},"\"x-lomkit-destructive\": true",", and the operation of an action with ",[336,1103,1104],{},"confirm()"," carries its text under ",[336,1107,1058],{},". Its description says both.",[743,1110,1111,1112,1115,1116,1119,1120,1123,1124,664,1127,664,1130,894,1133,1136,1137,772],{},"An action that declares ",[336,1113,1114],{},"confirmation()"," documents ",[336,1117,1118],{},"confirmation"," in its body and the ",[336,1121,1122],{},"428"," response. So do the ",[336,1125,1126],{},"mutate",[336,1128,1129],{},"destroy",[336,1131,1132],{},"restore",[336,1134,1135],{},"forceDestroy"," operations of a resource that declares the matching hook, see ",[317,1138,136],{"href":1139},"\u002Factions-and-metrics\u002Fconfirmation#confirming-writes",[743,1141,1142,1143,1146,1147,1150,1151,817,1154,814,1156,1159,1160,1163,1164,1167],{},"A key that an operation refuses is written ",[336,1144,1145],{},"\"\u003Ckey>\": false"," in its ",[336,1148,1149],{},"properties",", such as ",[336,1152,1153],{},"\"search\": false",[336,1155,33],{},[336,1157,1158],{},"\"range\": false"," on a metric without ranges, or ",[336,1161,1162],{},"\"text\": false"," on a search of a resource without a text search: the endpoint answers ",[336,1165,1166],{},"422"," when the request sends it.",[933,1169,1171],{"id":1170},"errors","Errors",[313,1173,1174,1177],{},[336,1175,1176],{},"components.responses"," holds the shared error responses, listed on the operations of the package:",[528,1179,1180,1192],{},[531,1181,1182],{},[534,1183,1184,1186,1189],{},[537,1185,548],{},[537,1187,1188],{},"Status",[537,1190,1191],{},"Listed on",[550,1193,1194,1212,1234,1249,1268,1282],{},[534,1195,1196,1201,1206],{},[555,1197,1198],{},[336,1199,1200],{},"RestUnauthenticated",[555,1202,1203],{},[336,1204,1205],{},"401",[555,1207,1208,1209],{},"the operations whose route runs ",[336,1210,1211],{},"auth",[534,1213,1214,1219,1224],{},[555,1215,1216],{},[336,1217,1218],{},"RestForbidden",[555,1220,1221],{},[336,1222,1223],{},"403",[555,1225,1226,1227,1230,1231],{},"every operation; with ",[336,1228,1229],{},"denials"," when the application registers ",[336,1232,1233],{},"DenialsRenderer",[534,1235,1236,1241,1246],{},[555,1237,1238],{},[336,1239,1240],{},"RestNotFound",[555,1242,1243],{},[336,1244,1245],{},"404",[555,1247,1248],{},"every operation",[534,1250,1251,1256,1261],{},[555,1252,1253],{},[336,1254,1255],{},"RestConflict",[555,1257,1258],{},[336,1259,1260],{},"409",[555,1262,1263,1264,1267],{},"the mutate operations that write a ",[317,1265,1266],{"href":115},"versioned"," resource, at the root or under a relation",[534,1269,1270,1275,1279],{},[555,1271,1272],{},[336,1273,1274],{},"RestValidationFailed",[555,1276,1277],{},[336,1278,1166],{},[555,1280,1281],{},"every operation but batch progress",[534,1283,1284,1289,1293],{},[555,1285,1286],{},[336,1287,1288],{},"RestConfirmationRequired",[555,1290,1291],{},[336,1292,1122],{},[555,1294,1295,1296,1298],{},"the actions that declare ",[336,1297,1114],{},", and the writes of a resource that declares the matching confirmation hook",[313,1300,1301,1302,1304,1305,1308],{},"An operation whose route does not run ",[336,1303,1211],{}," has ",[336,1306,1307],{},"\"security\": []",". The package declares no authentication scheme: declare yours in a document transformer.",[329,1310,1312],{"className":394,"code":1311,"language":378,"meta":334,"style":334},"use Dedoc\\Scramble\\Scramble;\nuse Dedoc\\Scramble\\Support\\Generator\\OpenApi;\nuse Dedoc\\Scramble\\Support\\Generator\\SecurityScheme;\n\nScramble::configure()->withDocumentTransformers(function (OpenApi $openApi): void {\n    $openApi->secure(SecurityScheme::http('bearer'));\n});\n",[336,1313,1314,1333,1360,1385,1391,1429,1463],{"__ignoreMap":334},[339,1315,1316,1319,1322,1324,1326,1328,1330],{"class":341,"line":342},[339,1317,1318],{"class":483},"use",[339,1320,1321],{"class":462}," Dedoc",[339,1323,466],{"class":404},[339,1325,322],{"class":462},[339,1327,466],{"class":404},[339,1329,322],{"class":462},[339,1331,1332],{"class":404},";\n",[339,1334,1335,1337,1339,1341,1343,1345,1348,1350,1353,1355,1358],{"class":341,"line":450},[339,1336,1318],{"class":483},[339,1338,1321],{"class":462},[339,1340,466],{"class":404},[339,1342,322],{"class":462},[339,1344,466],{"class":404},[339,1346,1347],{"class":462},"Support",[339,1349,466],{"class":404},[339,1351,1352],{"class":462},"Generator",[339,1354,466],{"class":404},[339,1356,1357],{"class":462},"OpenApi",[339,1359,1332],{"class":404},[339,1361,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1383],{"class":341,"line":490},[339,1363,1318],{"class":483},[339,1365,1321],{"class":462},[339,1367,466],{"class":404},[339,1369,322],{"class":462},[339,1371,466],{"class":404},[339,1373,1347],{"class":462},[339,1375,466],{"class":404},[339,1377,1352],{"class":462},[339,1379,466],{"class":404},[339,1381,1382],{"class":462},"SecurityScheme",[339,1384,1332],{"class":404},[339,1386,1387],{"class":341,"line":982},[339,1388,1390],{"emptyLinePlaceholder":1389},true,"\n",[339,1392,1393,1395,1397,1400,1403,1405,1407,1410,1413,1415,1418,1421,1424,1427],{"class":341,"line":1017},[339,1394,322],{"class":345},[339,1396,405],{"class":404},[339,1398,1399],{"class":408},"configure",[339,1401,1402],{"class":404},"()->",[339,1404,495],{"class":408},[339,1406,412],{"class":404},[339,1408,1409],{"class":955},"function",[339,1411,1412],{"class":404}," (",[339,1414,1357],{"class":345},[339,1416,1417],{"class":404}," $",[339,1419,1420],{"class":462},"openApi",[339,1422,1423],{"class":404},"):",[339,1425,1426],{"class":483}," void",[339,1428,965],{"class":404},[339,1430,1431,1434,1436,1439,1442,1444,1446,1448,1451,1453,1455,1458,1460],{"class":341,"line":1038},[339,1432,1433],{"class":404},"    $",[339,1435,1420],{"class":462},[339,1437,1438],{"class":404},"->",[339,1440,1441],{"class":408},"secure",[339,1443,412],{"class":404},[339,1445,1382],{"class":345},[339,1447,405],{"class":404},[339,1449,1450],{"class":408},"http",[339,1452,412],{"class":404},[339,1454,415],{"class":404},[339,1456,1457],{"class":349},"bearer",[339,1459,415],{"class":404},[339,1461,1462],{"class":404},"));\n",[339,1464,1465],{"class":341,"line":1053},[339,1466,1467],{"class":404},"});\n",[325,1469,1471],{"id":1470},"types-and-examples","Types and examples",[313,1473,1474],{},"Each field documents its type:",[528,1476,1477,1487],{},[531,1478,1479],{},[534,1480,1481,1484],{},[537,1482,1483],{},"Field",[537,1485,1486],{},"Schema",[550,1488,1489,1499,1511,1529,1541,1562,1571],{},[534,1490,1491,1496],{},[555,1492,1493],{},[336,1494,1495],{},"ID",[555,1497,1498],{},"an integer or a string, from the key type",[534,1500,1501,1506],{},[555,1502,1503],{},[336,1504,1505],{},"Text",[555,1507,1508],{},[336,1509,1510],{},"string",[534,1512,1513,1521],{},[555,1514,1515,664,1518],{},[336,1516,1517],{},"Number",[336,1519,1520],{},"Integer",[555,1522,1523,664,1526],{},[336,1524,1525],{},"number",[336,1527,1528],{},"integer",[534,1530,1531,1536],{},[555,1532,1533],{},[336,1534,1535],{},"Boolean",[555,1537,1538],{},[336,1539,1540],{},"boolean",[534,1542,1543,1551],{},[555,1544,1545,664,1548],{},[336,1546,1547],{},"Date",[336,1549,1550],{},"DateTime",[555,1552,1553,1555,1556,637,1559],{},[336,1554,1510],{}," with ",[336,1557,1558],{},"format: date",[336,1560,1561],{},"format: date-time",[534,1563,1564,1568],{},[555,1565,1566],{},[336,1567,801],{},[555,1569,1570],{},"an enum of its backing values",[534,1572,1573,1578],{},[555,1574,1575],{},[336,1576,1577],{},"Json",[555,1579,1580],{},[336,1581,1582],{},"object",[313,1584,1585,1588,1589,1592,1593,1596,1597,1600,1601,1592,1604,1607,1608,1555,1610,1616],{},[336,1586,1587],{},"nullable()"," adds ",[336,1590,1591],{},"null",", and ",[336,1594,1595],{},"meta()"," goes under ",[336,1598,1599],{},"x-lomkit-meta",". A field type of your own overrides ",[336,1602,1603],{},"toSchema()",[336,1605,1606],{},"toWriteSchema()"," when writes accept fewer values, as an ",[336,1609,801],{},[317,1611,1613],{"href":1612},"\u002Fresources\u002Ffields#offered-cases",[336,1614,1615],{},"offered()"," does.",[740,1618,1619,1638,1648],{},[743,1620,1621,1622,1624,1625,1628,1629,1631,1632,852,1635,772],{},"The responses follow these types: a ",[336,1623,1517],{}," field answers a number, even from a ",[336,1626,1627],{},"decimal"," cast, and an empty ",[336,1630,1577],{}," field answers ",[336,1633,1634],{},"{}",[317,1636,42],{"href":1637},"\u002Fresources\u002Ffields#value-types-in-rows",[743,1639,1640,1641,1644,1645,1647],{},"The rules of a field go in its description, such as ",[336,1642,1643],{},"Rules: string, max:80, required",", on the fields of ",[336,1646,1126],{},", of actions, of instructions and of scopes.",[743,1649,1650,1651,1653,1654,1150,1657,637,1660,772],{},"An action field, an instruction field, a scope parameter or a metric ",[336,1652,667],{}," with a default gives it under ",[336,1655,1656],{},"default",[336,1658,1659],{},"\"default\": true",[336,1661,1662],{},"\"default\": 30",[313,1664,1665,1668],{},[336,1666,1667],{},"examples()"," lists example values on a field. The request examples of each operation use the first value:",[329,1670,1672],{"className":394,"code":1671,"language":378,"meta":334,"style":334},"Text::make('title')->examples('Weekly report', 'Daily report'),\n",[336,1673,1674],{"__ignoreMap":334},[339,1675,1676,1678,1680,1683,1685,1687,1690,1692,1695,1698,1700,1702,1705,1707,1709,1711,1714,1716],{"class":341,"line":342},[339,1677,1505],{"class":345},[339,1679,405],{"class":404},[339,1681,1682],{"class":408},"make",[339,1684,412],{"class":404},[339,1686,415],{"class":404},[339,1688,1689],{"class":349},"title",[339,1691,415],{"class":404},[339,1693,1694],{"class":404},")->",[339,1696,1697],{"class":408},"examples",[339,1699,412],{"class":404},[339,1701,415],{"class":404},[339,1703,1704],{"class":349},"Weekly report",[339,1706,415],{"class":404},[339,1708,423],{"class":404},[339,1710,439],{"class":404},[339,1712,1713],{"class":349},"Daily report",[339,1715,415],{"class":404},[339,1717,1718],{"class":404},"),\n",[313,1720,1721,1722,1724,1725,664,1728,664,1731,894,1734,1737,1738,1741,1742,1745,1746,664,1749,664,1752,894,1755,1758,1759,1762,1763,664,1766,664,1769,664,1772,664,1775,664,1778,664,1781,664,1784,664,1787,894,1790,772],{},"Without ",[336,1723,1667],{},", an example takes a value of the field's type that passes its simple rules: the length of ",[336,1726,1727],{},"min",[336,1729,1730],{},"max",[336,1732,1733],{},"size",[336,1735,1736],{},"between"," on a string (",[336,1739,1740],{},"aaaaaaaa"," for ",[336,1743,1744],{},"min:8","), their bounds and those of ",[336,1747,1748],{},"gt",[336,1750,1751],{},"gte",[336,1753,1754],{},"lt",[336,1756,1757],{},"lte"," on a number, the first value of ",[336,1760,1761],{},"in",", and a value for ",[336,1764,1765],{},"email",[336,1767,1768],{},"url",[336,1770,1771],{},"uuid",[336,1773,1774],{},"ulid",[336,1776,1777],{},"ip",[336,1779,1780],{},"date",[336,1782,1783],{},"numeric",[336,1785,1786],{},"digits",[336,1788,1789],{},"accepted",[336,1791,1792],{},"declined",[740,1794,1795,1800],{},[743,1796,1797,1798,772],{},"A request example never sends a default: a field with a default is left out of an action example, and a metric example is ",[336,1799,1634],{},[743,1801,1802,1803,1806,1807,1810],{},"The mutate example adds each relation declared ",[336,1804,1805],{},"requiredOnCreation()",", with an ",[336,1808,1809],{},"attach"," of a key.",[1812,1813,1814],"tip",{},[313,1815,1816,1817,1819],{},"Declare ",[336,1818,1667],{}," on the fields whose other rules the generated value does not pass, so that the request examples pass your rules.",[1821,1822,1823],"note",{},[313,1824,1825,1826,1828,1829,1831,1832,1835,1836,772],{},"The ",[336,1827,1780],{}," cast of Laravel renders a date and a time. Cast a ",[336,1830,1547],{}," attribute with ",[336,1833,1834],{},"date:Y-m-d"," so that the response matches the documented ",[336,1837,1558],{},[325,1839,1841],{"id":1840},"keeping-the-document-under-test","Keeping the document under test",[313,1843,1844],{},"The package tests its own document in two ways, and you can do the same in your application.",[740,1846,1847,1853],{},[743,1848,1849,1852],{},[746,1850,1851],{},"Contract tests."," The package sends real requests to each documented operation and validates each response against the schema of the document: a response that does not match fails the test.",[743,1854,1855,1858],{},[746,1856,1857],{},"A snapshot."," The package generates the document of a fixture application and compares it with a committed JSON file. A change of a declaration shows as a diff of that file.",[313,1860,1861],{},"A snapshot test in your application can compare the generated document with a committed file:",[329,1863,1865],{"className":394,"code":1864,"language":378,"meta":334,"style":334},"use Dedoc\\Scramble\\Generator;\n\npublic function test_the_api_document_matches_the_snapshot(): void\n{\n    $document = app(Generator::class)();\n    unset($document['info'], $document['servers']);\n\n    $json = json_encode($document, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR).\"\\n\";\n\n    $this->assertSame(file_get_contents(base_path('tests\u002Fapi.json')), $json);\n}\n",[336,1866,1867,1883,1887,1904,1908,1932,1972,1976,2021,2025,2061],{"__ignoreMap":334},[339,1868,1869,1871,1873,1875,1877,1879,1881],{"class":341,"line":342},[339,1870,1318],{"class":483},[339,1872,1321],{"class":462},[339,1874,466],{"class":404},[339,1876,322],{"class":462},[339,1878,466],{"class":404},[339,1880,1352],{"class":462},[339,1882,1332],{"class":404},[339,1884,1885],{"class":341,"line":450},[339,1886,1390],{"emptyLinePlaceholder":1389},[339,1888,1889,1892,1895,1898,1901],{"class":341,"line":490},[339,1890,1891],{"class":955},"public",[339,1893,1894],{"class":955}," function",[339,1896,1897],{"class":408}," test_the_api_document_matches_the_snapshot",[339,1899,1900],{"class":404},"():",[339,1902,1903],{"class":483}," void\n",[339,1905,1906],{"class":341,"line":982},[339,1907,947],{"class":404},[339,1909,1910,1912,1915,1918,1921,1923,1925,1927,1929],{"class":341,"line":1017},[339,1911,1433],{"class":404},[339,1913,1914],{"class":462},"document ",[339,1916,1917],{"class":404},"=",[339,1919,1920],{"class":408}," app",[339,1922,412],{"class":404},[339,1924,1352],{"class":345},[339,1926,405],{"class":404},[339,1928,484],{"class":483},[339,1930,1931],{"class":404},")();\n",[339,1933,1934,1937,1940,1943,1946,1948,1951,1953,1956,1958,1960,1962,1964,1967,1969],{"class":341,"line":1038},[339,1935,1936],{"class":408},"    unset",[339,1938,1939],{"class":404},"($",[339,1941,1942],{"class":462},"document",[339,1944,1945],{"class":404},"[",[339,1947,415],{"class":404},[339,1949,1950],{"class":349},"info",[339,1952,415],{"class":404},[339,1954,1955],{"class":404},"],",[339,1957,1417],{"class":404},[339,1959,1942],{"class":462},[339,1961,1945],{"class":404},[339,1963,415],{"class":404},[339,1965,1966],{"class":349},"servers",[339,1968,415],{"class":404},[339,1970,1971],{"class":404},"]);\n",[339,1973,1974],{"class":341,"line":1053},[339,1975,1390],{"emptyLinePlaceholder":1389},[339,1977,1978,1980,1983,1985,1988,1990,1992,1994,1997,2000,2003,2005,2008,2011,2014,2017,2019],{"class":341,"line":1073},[339,1979,1433],{"class":404},[339,1981,1982],{"class":462},"json ",[339,1984,1917],{"class":404},[339,1986,1987],{"class":408}," json_encode",[339,1989,1939],{"class":404},[339,1991,1942],{"class":462},[339,1993,423],{"class":404},[339,1995,1996],{"class":462}," JSON_PRETTY_PRINT ",[339,1998,1999],{"class":404},"|",[339,2001,2002],{"class":462}," JSON_UNESCAPED_SLASHES ",[339,2004,1999],{"class":404},[339,2006,2007],{"class":462}," JSON_THROW_ON_ERROR",[339,2009,2010],{"class":404},")",[339,2012,2013],{"class":404},".\"",[339,2015,2016],{"class":462},"\\n",[339,2018,959],{"class":404},[339,2020,1332],{"class":404},[339,2022,2023],{"class":341,"line":1079},[339,2024,1390],{"emptyLinePlaceholder":1389},[339,2026,2027,2030,2033,2035,2038,2040,2043,2045,2047,2050,2052,2055,2057,2059],{"class":341,"line":1085},[339,2028,2029],{"class":404},"    $this->",[339,2031,2032],{"class":408},"assertSame",[339,2034,412],{"class":404},[339,2036,2037],{"class":408},"file_get_contents",[339,2039,412],{"class":404},[339,2041,2042],{"class":408},"base_path",[339,2044,412],{"class":404},[339,2046,415],{"class":404},[339,2048,2049],{"class":349},"tests\u002Fapi.json",[339,2051,415],{"class":404},[339,2053,2054],{"class":404},")),",[339,2056,1417],{"class":404},[339,2058,940],{"class":462},[339,2060,519],{"class":404},[339,2062,2064],{"class":341,"line":2063},11,[339,2065,1088],{"class":404},[313,2067,2068,2069,2071],{},"Write the file once from the same code, and commit it. When a change to a resource changes the API, the test fails and the diff of ",[336,2070,2049],{}," shows what clients see.",[2073,2074,2075],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":334,"searchDepth":342,"depth":450,"links":2077},[2078,2079,2083,2084],{"id":327,"depth":450,"text":16},{"id":522,"depth":450,"text":523,"children":2080},[2081,2082],{"id":935,"depth":490,"text":856},{"id":1170,"depth":490,"text":1171},{"id":1470,"depth":450,"text":1471},{"id":1840,"depth":450,"text":1841},"Document every endpoint of your resources in OpenAPI with Scramble, with typed bodies, responses and examples, and keep the document under test.","md",null,{},{"title":184,"description":2085},{"loc":185},"EOsmgqW3euxduQOANUFgkpXXdhSVJYY1tv3zbm-yVIw",[2093,2095],{"title":180,"path":181,"stem":182,"description":2094,"children":-1},"Change the rows that a resource sends with map(), and add keys to the meta of a search page with searchMeta().",{"title":188,"path":189,"stem":190,"description":2096,"children":-1},"Validate a request live from a form with Laravel Precognition, after the authorization checks and without running the endpoint.",1794181351532]