[{"data":1,"prerenderedAt":895},["ShallowReactive",2],{"page:\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Fstorage":3},{"id":4,"title":5,"body":6,"description":876,"extension":877,"frontmatter":878,"heading":5,"meta":885,"navigation":887,"order":882,"path":888,"seo":889,"sitemap":890,"source":891,"stem":892,"__hash__":893,"hasPopups":894},"docs\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Fstorage.md","Storage",{"type":7,"value":8,"toc":866},"minimark",[9,13,21,34,668,674,677,799,818,831,836,845,850,855],[10,11,12],"p",{},"Storage backends persist generated files in the filesystem, memory, or a custom destination.",[14,15,17],"h2",{"id":16},"createstorage",[18,19,20],"code",{},"createStorage",[10,22,23,25,26,29,30,33],{},[18,24,20],{}," takes a builder function ",[18,27,28],{},"(options: TOptions) => Storage"," and returns a factory ",[18,31,32],{},"(options?: TOptions) => Storage",". Call the returned factory to create a backend.",[35,36,42],"pre",{"language":37,"meta":38,"code":39,"filename":40,"class":41},"typescript","twoslash","import { createStorage } from 'kubb\u002Fkit'\n\nexport const memoryStorage = createStorage(() => {\n  const store = new Map\u003Cstring, string>()\n  return {\n    name: 'memory',\n    async readItem(key) {\n      return store.get(key) ?? null\n    },\n    async writeItem(key, value) {\n      store.set(key, value)\n    },\n    async removeItem(key) {\n      store.delete(key)\n    },\n    async readKeys(base) {\n      const keys = [...store.keys()]\n      return base ? keys.filter((k) => k.startsWith(base)) : keys\n    },\n    async empty(base) {\n      if (!base) return store.clear()\n      for (const k of store.keys()) if (k.startsWith(base)) store.delete(k)\n    },\n  }\n})","memory-storage.ts","shiki shiki-themes github-light github-dark twoslash lsp dark:github-dark",[18,43,45,74,75,74,77,74,115,74,155,74,162,74,182,74,208,74,245,74,250,74,279,74,314,74,318,74,339,74,365,74,369,74,391,74,427,74,506,74,510,74,531,74,570,74,654,74,658,74,663],{"class":44},"language-typescript",[46,47,50,54,58,64,67,70],"span",{"class":48,"style":49},"line","display: inline",[46,51,53],{"style":52},"color:#D73A49;--shiki-dark:#F97583","import",[46,55,57],{"style":56},"color:#24292E;--shiki-dark:#E1E4E8"," { ",[46,59,60],{"style":56},[46,61,20],{"class":62,"data-popup":63},"twoslash-hover","0",[46,65,66],{"style":56}," } ",[46,68,69],{"style":52},"from",[46,71,73],{"style":72},"color:#032F62;--shiki-dark:#9ECBFF"," 'kubb\u002Fkit'","\n",[46,76],{"class":48,"style":49},[46,78,79,82,85,89,95,98,101,106,109,112],{"class":48,"style":49},[46,80,81],{"style":52},"export",[46,83,84],{"style":52}," const",[46,86,88],{"style":87},"color:#005CC5;--shiki-dark:#79B8FF"," ",[46,90,91],{"style":87},[46,92,94],{"class":62,"data-popup":93},"1","memoryStorage",[46,96,97],{"style":52}," =",[46,99,88],{"style":100},"color:#6F42C1;--shiki-dark:#B392F0",[46,102,103],{"style":100},[46,104,20],{"class":62,"data-popup":105},"2",[46,107,108],{"style":56},"(() ",[46,110,111],{"style":52},"=>",[46,113,114],{"style":56}," {",[46,116,117,120,122,128,130,133,135,141,144,147,150,152],{"class":48,"style":49},[46,118,119],{"style":52},"  const",[46,121,88],{"style":87},[46,123,124],{"style":87},[46,125,127],{"class":62,"data-popup":126},"3","store",[46,129,97],{"style":52},[46,131,132],{"style":52}," new",[46,134,88],{"style":100},[46,136,137],{"style":100},[46,138,140],{"class":62,"data-popup":139},"4","Map",[46,142,143],{"style":56},"\u003C",[46,145,146],{"style":87},"string",[46,148,149],{"style":56},", ",[46,151,146],{"style":87},[46,153,154],{"style":56},">()",[46,156,157,160],{"class":48,"style":49},[46,158,159],{"style":52},"  return",[46,161,114],{"style":56},[46,163,164,167,173,176,179],{"class":48,"style":49},[46,165,166],{"style":56},"    ",[46,168,169],{"style":56},[46,170,172],{"class":62,"data-popup":171},"5","name",[46,174,175],{"style":56},": ",[46,177,178],{"style":72},"'memory'",[46,180,181],{"style":56},",",[46,183,184,187,189,195,198,205],{"class":48,"style":49},[46,185,186],{"style":52},"    async",[46,188,88],{"style":100},[46,190,191],{"style":100},[46,192,194],{"class":62,"data-popup":193},"6","readItem",[46,196,197],{"style":56},"(",[46,199,201],{"style":200},"color:#E36209;--shiki-dark:#FFAB70",[46,202,204],{"class":62,"data-popup":203},"7","key",[46,206,207],{"style":56},") {",[46,209,210,213,215,220,223,229,231,236,239,242],{"class":48,"style":49},[46,211,212],{"style":52},"      return",[46,214,88],{"style":56},[46,216,217],{"style":56},[46,218,127],{"class":62,"data-popup":219},"8",[46,221,222],{"style":56},".",[46,224,225],{"style":100},[46,226,228],{"class":62,"data-popup":227},"9","get",[46,230,197],{"style":56},[46,232,233],{"style":56},[46,234,204],{"class":62,"data-popup":235},"10",[46,237,238],{"style":56},") ",[46,240,241],{"style":52},"??",[46,243,244],{"style":87}," null",[46,246,247],{"class":48,"style":49},[46,248,249],{"style":56},"    },",[46,251,252,254,256,262,264,269,271,277],{"class":48,"style":49},[46,253,186],{"style":52},[46,255,88],{"style":100},[46,257,258],{"style":100},[46,259,261],{"class":62,"data-popup":260},"11","writeItem",[46,263,197],{"style":56},[46,265,266],{"style":200},[46,267,204],{"class":62,"data-popup":268},"12",[46,270,149],{"style":56},[46,272,273],{"style":200},[46,274,276],{"class":62,"data-popup":275},"13","value",[46,278,207],{"style":56},[46,280,281,284,289,291,297,299,304,306,311],{"class":48,"style":49},[46,282,283],{"style":56},"      ",[46,285,286],{"style":56},[46,287,127],{"class":62,"data-popup":288},"14",[46,290,222],{"style":56},[46,292,293],{"style":100},[46,294,296],{"class":62,"data-popup":295},"15","set",[46,298,197],{"style":56},[46,300,301],{"style":56},[46,302,204],{"class":62,"data-popup":303},"16",[46,305,149],{"style":56},[46,307,308],{"style":56},[46,309,276],{"class":62,"data-popup":310},"17",[46,312,313],{"style":56},")",[46,315,316],{"class":48,"style":49},[46,317,249],{"style":56},[46,319,320,322,324,330,332,337],{"class":48,"style":49},[46,321,186],{"style":52},[46,323,88],{"style":100},[46,325,326],{"style":100},[46,327,329],{"class":62,"data-popup":328},"18","removeItem",[46,331,197],{"style":56},[46,333,334],{"style":200},[46,335,204],{"class":62,"data-popup":336},"19",[46,338,207],{"style":56},[46,340,341,343,348,350,356,358,363],{"class":48,"style":49},[46,342,283],{"style":56},[46,344,345],{"style":56},[46,346,127],{"class":62,"data-popup":347},"20",[46,349,222],{"style":56},[46,351,352],{"style":100},[46,353,355],{"class":62,"data-popup":354},"21","delete",[46,357,197],{"style":56},[46,359,360],{"style":56},[46,361,204],{"class":62,"data-popup":362},"22",[46,364,313],{"style":56},[46,366,367],{"class":48,"style":49},[46,368,249],{"style":56},[46,370,371,373,375,381,383,389],{"class":48,"style":49},[46,372,186],{"style":52},[46,374,88],{"style":100},[46,376,377],{"style":100},[46,378,380],{"class":62,"data-popup":379},"23","readKeys",[46,382,197],{"style":56},[46,384,385],{"style":200},[46,386,388],{"class":62,"data-popup":387},"24","base",[46,390,207],{"style":56},[46,392,393,396,398,404,406,409,412,417,419,424],{"class":48,"style":49},[46,394,395],{"style":52},"      const",[46,397,88],{"style":87},[46,399,400],{"style":87},[46,401,403],{"class":62,"data-popup":402},"25","keys",[46,405,97],{"style":52},[46,407,408],{"style":56}," [",[46,410,411],{"style":52},"...",[46,413,414],{"style":56},[46,415,127],{"class":62,"data-popup":416},"26",[46,418,222],{"style":56},[46,420,421],{"style":100},[46,422,403],{"class":62,"data-popup":423},"27",[46,425,426],{"style":56},"()]",[46,428,429,431,433,438,440,443,445,450,452,458,461,467,469,471,473,478,480,486,488,493,496,499,501],{"class":48,"style":49},[46,430,212],{"style":52},[46,432,88],{"style":56},[46,434,435],{"style":56},[46,436,388],{"class":62,"data-popup":437},"28",[46,439,88],{"style":56},[46,441,442],{"style":52},"?",[46,444,88],{"style":56},[46,446,447],{"style":56},[46,448,403],{"class":62,"data-popup":449},"29",[46,451,222],{"style":56},[46,453,454],{"style":100},[46,455,457],{"class":62,"data-popup":456},"30","filter",[46,459,460],{"style":56},"((",[46,462,463],{"style":200},[46,464,466],{"class":62,"data-popup":465},"31","k",[46,468,238],{"style":56},[46,470,111],{"style":52},[46,472,88],{"style":56},[46,474,475],{"style":56},[46,476,466],{"class":62,"data-popup":477},"32",[46,479,222],{"style":56},[46,481,482],{"style":100},[46,483,485],{"class":62,"data-popup":484},"33","startsWith",[46,487,197],{"style":56},[46,489,490],{"style":56},[46,491,388],{"class":62,"data-popup":492},"34",[46,494,495],{"style":56},")) ",[46,497,498],{"style":52},":",[46,500,88],{"style":56},[46,502,503],{"style":56},[46,504,403],{"class":62,"data-popup":505},"35",[46,507,508],{"class":48,"style":49},[46,509,249],{"style":56},[46,511,512,514,516,522,524,529],{"class":48,"style":49},[46,513,186],{"style":52},[46,515,88],{"style":100},[46,517,518],{"style":100},[46,519,521],{"class":62,"data-popup":520},"36","empty",[46,523,197],{"style":56},[46,525,526],{"style":200},[46,527,388],{"class":62,"data-popup":528},"37",[46,530,207],{"style":56},[46,532,533,536,539,542,547,549,552,554,559,561,567],{"class":48,"style":49},[46,534,535],{"style":52},"      if",[46,537,538],{"style":56}," (",[46,540,541],{"style":52},"!",[46,543,544],{"style":56},[46,545,388],{"class":62,"data-popup":546},"38",[46,548,238],{"style":56},[46,550,551],{"style":52},"return",[46,553,88],{"style":56},[46,555,556],{"style":56},[46,557,127],{"class":62,"data-popup":558},"39",[46,560,222],{"style":56},[46,562,563],{"style":100},[46,564,566],{"class":62,"data-popup":565},"40","clear",[46,568,569],{"style":56},"()",[46,571,572,575,577,580,582,587,590,592,597,599,604,607,610,612,617,619,624,626,631,633,638,640,645,647,652],{"class":48,"style":49},[46,573,574],{"style":52},"      for",[46,576,538],{"style":56},[46,578,579],{"style":52},"const",[46,581,88],{"style":87},[46,583,584],{"style":87},[46,585,466],{"class":62,"data-popup":586},"41",[46,588,589],{"style":52}," of",[46,591,88],{"style":56},[46,593,594],{"style":56},[46,595,127],{"class":62,"data-popup":596},"42",[46,598,222],{"style":56},[46,600,601],{"style":100},[46,602,403],{"class":62,"data-popup":603},"43",[46,605,606],{"style":56},"()) ",[46,608,609],{"style":52},"if",[46,611,538],{"style":56},[46,613,614],{"style":56},[46,615,466],{"class":62,"data-popup":616},"44",[46,618,222],{"style":56},[46,620,621],{"style":100},[46,622,485],{"class":62,"data-popup":623},"45",[46,625,197],{"style":56},[46,627,628],{"style":56},[46,629,388],{"class":62,"data-popup":630},"46",[46,632,495],{"style":56},[46,634,635],{"style":56},[46,636,127],{"class":62,"data-popup":637},"47",[46,639,222],{"style":56},[46,641,642],{"style":100},[46,643,355],{"class":62,"data-popup":644},"48",[46,646,197],{"style":56},[46,648,649],{"style":56},[46,650,466],{"class":62,"data-popup":651},"49",[46,653,313],{"style":56},[46,655,656],{"class":48,"style":49},[46,657,249],{"style":56},[46,659,660],{"class":48,"style":49},[46,661,662],{"style":56},"  }",[46,664,665],{"class":48,"style":49},[46,666,667],{"style":56},"})",[14,669,671,673],{"id":670},"storage-interface",[18,672,5],{}," interface",[10,675,676],{},"The engine consumes this interface and exposes the backend through the build result.",[678,679,680,699],"table",{},[681,682,683],"thead",{},[684,685,686,690,693,696],"tr",{},[687,688,689],"th",{},"Method",[687,691,692],{},"Params",[687,694,695],{},"Returns",[687,697,698],{},"Purpose",[700,701,702,723,743,761,781],"tbody",{},[684,703,704,710,715,720],{},[705,706,707],"td",{},[18,708,709],{},"readItem()",[705,711,712],{},[18,713,714],{},"key: string",[705,716,717],{},[18,718,719],{},"Promise\u003Cstring | null>",[705,721,722],{},"Retrieve an item's content",[684,724,725,730,735,740],{},[705,726,727],{},[18,728,729],{},"writeItem()",[705,731,732],{},[18,733,734],{},"key: string, value: string",[705,736,737],{},[18,738,739],{},"Promise\u003Cvoid>",[705,741,742],{},"Write an item",[684,744,745,750,754,758],{},[705,746,747],{},[18,748,749],{},"removeItem()",[705,751,752],{},[18,753,714],{},[705,755,756],{},[18,757,739],{},[705,759,760],{},"Delete an item",[684,762,763,768,773,778],{},[705,764,765],{},[18,766,767],{},"readKeys()",[705,769,770],{},[18,771,772],{},"base?: string",[705,774,775],{},[18,776,777],{},"Promise\u003Cstring[]>",[705,779,780],{},"List keys, optionally filtered by prefix",[684,782,783,788,792,796],{},[705,784,785],{},[18,786,787],{},"empty()",[705,789,790],{},[18,791,772],{},[705,793,794],{},[18,795,739],{},[705,797,798],{},"Delete all items, optionally scoped by prefix",[10,800,801,802,804,805,807,808,810,811,814,815,817],{},"Omitting ",[18,803,388],{}," on ",[18,806,787],{}," is implementation-defined. ",[18,809,94],{}," wipes every entry, while the filesystem-backed ",[18,812,813],{},"fsStorage"," treats a missing ",[18,816,388],{}," as a no-op and deletes nothing.",[10,819,820,821,823,824,827,828,830],{},"Every method is required. ",[18,822,194],{}," returns ",[18,825,826],{},"null"," for a missing key. Kubb can skip ",[18,829,261],{}," for a file whose content did not change, so do not expect one call per generated file.",[14,832,834],{"id":833},"fsstorage",[18,835,813],{},[10,837,838,840,841,844],{},[18,839,813],{}," is the default backend. It writes under ",[18,842,843],{},"output.path"," and creates directories as needed.",[14,846,848],{"id":847},"memorystorage",[18,849,94],{},[10,851,852,854],{},[18,853,94],{}," writes nothing to disk, so it suits plugin tests, CI validation, and dry runs.",[10,856,857,858,861,862,865],{},"Both ship from ",[18,859,860],{},"kubb\u002Fkit"," and go straight into the config's ",[18,863,864],{},"storage"," field.",{"title":867,"searchDepth":868,"depth":868,"links":869},"",5,[870,872,874,875],{"id":16,"depth":871,"text":20},2,{"id":670,"depth":871,"text":873},"Storage interface",{"id":833,"depth":871,"text":813},{"id":847,"depth":871,"text":94},"Storage backends decide where generated files are written. Covers createStorage, the Storage interface, and the built-in fsStorage and memoryStorage backends.","md",{"layout":879,"title":5,"description":876,"outline":880,"order":882,"navigation":883},"doc",[871,881],3,7,{"title":5,"icon":884},"i-iconoir-database",{"layout":879,"outline":886},[871,881],{"title":5,"icon":884},"\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Fstorage",{"title":5,"description":876},{"loc":888},"kubb-labs\u002Fkubb\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Fstorage.md","docs\u002F5.x\u002Freference\u002Fkit\u002Fstorage","2q9C--XTt1kpmo3oRFROHgziEkhuitxdWh0ubjp3XSI",true,1792317737192]