[{"data":1,"prerenderedAt":1181},["ShallowReactive",2],{"navigation_docs":3,"-guide-configuration":93,"-guide-configuration-surround":1176},[4,71],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":70},"Guide","i-lucide-book-open","\u002Fguide","1.guide",[10,14,18,22,26,30,34,38,42,46,50,54,58,62,66],{"title":11,"path":12,"stem":13},"Getting started","\u002Fguide\u002Fgetting-started","1.guide\u002F01.getting-started",{"title":15,"path":16,"stem":17},"Adoption paths","\u002Fguide\u002Fadoption","1.guide\u002F02.adoption",{"title":19,"path":20,"stem":21},"Routes and typed $fetch","\u002Fguide\u002Froutes","1.guide\u002F02.routes",{"title":23,"path":24,"stem":25},"Kyo handlers","\u002Fguide\u002Fkyo","1.guide\u002F03.kyo",{"title":27,"path":28,"stem":29},"ZIO handlers","\u002Fguide\u002Fzio","1.guide\u002F04.zio",{"title":31,"path":32,"stem":33},"Configuration and secrets","\u002Fguide\u002Fconfiguration","1.guide\u002F05.configuration",{"title":35,"path":36,"stem":37},"Application and request lifetimes","\u002Fguide\u002Flifetimes","1.guide\u002F06.lifetimes",{"title":39,"path":40,"stem":41},"Schemas","\u002Fguide\u002Fschema","1.guide\u002F07.schema",{"title":43,"path":44,"stem":45},"PostgreSQL","\u002Fguide\u002Fdatabase","1.guide\u002F08.database",{"title":47,"path":48,"stem":49},"Streaming and cancellation","\u002Fguide\u002Fstreaming","1.guide\u002F09.streaming",{"title":51,"path":52,"stem":53},"Testing","\u002Fguide\u002Ftesting","1.guide\u002F10.testing",{"title":55,"path":56,"stem":57},"Nitro storage and NuxtHub KV","\u002Fguide\u002Fstorage","1.guide\u002F11.storage",{"title":59,"path":60,"stem":61},"Debug Scala handlers","\u002Fguide\u002Fdebugging","1.guide\u002F12.debugging",{"title":63,"path":64,"stem":65},"npm build tooling","\u002Fguide\u002Fnpm-tooling","1.guide\u002F13.npm-tooling",{"title":67,"path":68,"stem":69},"Set up h34s with a coding assistant","\u002Fguide\u002Fagent-setup","1.guide\u002F14.agent-setup",false,{"title":72,"icon":73,"path":74,"stem":75,"children":76,"page":70},"Reference","i-lucide-library","\u002Freference","2.reference",[77,81,85,89],{"title":78,"path":79,"stem":80},"Architecture","\u002Freference\u002Farchitecture","2.reference\u002F1.architecture",{"title":82,"path":83,"stem":84},"Releases","\u002Freference\u002Freleases","2.reference\u002F2.releases",{"title":86,"path":87,"stem":88},"Compatibility","\u002Freference\u002Fcompatibility","2.reference\u002F3.compatibility",{"title":90,"path":91,"stem":92},"Migration guide","\u002Freference\u002Fmigration","2.reference\u002F4.migration",{"id":94,"title":31,"body":95,"description":1170,"extension":1171,"links":1172,"meta":1173,"navigation":389,"path":32,"seo":1174,"stem":33,"__hash__":1175},"docs\u002F1.guide\u002F05.configuration.md",{"type":96,"value":97,"toc":1160},"minimark",[98,119,142,150,153,281,288,292,515,547,572,576,629,650,750,760,764,771,821,832,857,861,867,911,921,940,944,949,978,1058,1061,1082,1086,1156],[99,100,101,102,106,107,110,111,114,115,118],"p",{},"Read configuration from Scala. h34s decodes Nuxt ",[103,104,105],"code",{},"runtimeConfig"," into your own case class, so you never touch ",[103,108,109],{},"process.env",", ",[103,112,113],{},"useRuntimeConfig"," or JavaScript objects. Nitro applies ",[103,116,117],{},"NUXT_*"," environment overrides before h34s sees the values.",[99,120,121,125,126,129,130,133,134,137,138,141],{},[122,123,124],"strong",{},"Status."," ",[103,127,128],{},"RuntimeConfig"," and ",[103,131,132],{},"ZRuntimeConfig"," are new in ",[103,135,136],{},"0.2.0-alpha.1",". They need the h34s Nitro plugin, which the ",[103,139,140],{},"@yuri4n\u002Fh34s-nuxt"," module registers.",[143,144,146,147],"h2",{"id":145},"_1-declare-the-keys-in-nuxtconfigts","1. Declare the keys in ",[103,148,149],{},"nuxt.config.ts",[99,151,152],{},"Nuxt only overrides keys that you declare. Declare every key with a safe development default, and leave secrets empty:",[154,155,160],"pre",{"className":156,"code":157,"language":158,"meta":159,"style":159},"language-ts shiki shiki-themes github-light github-light github-dark","export default defineNuxtConfig({\n  modules: ['@yuri4n\u002Fh34s-nuxt'],\n  runtimeConfig: {\n    database: {\n      host: '127.0.0.1',\n      port: 5432,\n      user: 'h34s',\n      password: '',\n      name: 'h34s',\n    },\n  },\n})\n","ts","",[103,161,162,182,195,201,207,219,231,242,253,263,269,275],{"__ignoreMap":159},[163,164,167,171,174,178],"span",{"class":165,"line":166},"line",1,[163,168,170],{"class":169},"s8jYJ","export",[163,172,173],{"class":169}," default",[163,175,177],{"class":176},"snPdu"," defineNuxtConfig",[163,179,181],{"class":180},"sxrX7","({\n",[163,183,185,188,192],{"class":165,"line":184},2,[163,186,187],{"class":180},"  modules: [",[163,189,191],{"class":190},"sIIMD","'@yuri4n\u002Fh34s-nuxt'",[163,193,194],{"class":180},"],\n",[163,196,198],{"class":165,"line":197},3,[163,199,200],{"class":180},"  runtimeConfig: {\n",[163,202,204],{"class":165,"line":203},4,[163,205,206],{"class":180},"    database: {\n",[163,208,210,213,216],{"class":165,"line":209},5,[163,211,212],{"class":180},"      host: ",[163,214,215],{"class":190},"'127.0.0.1'",[163,217,218],{"class":180},",\n",[163,220,222,225,229],{"class":165,"line":221},6,[163,223,224],{"class":180},"      port: ",[163,226,228],{"class":227},"sBjJW","5432",[163,230,218],{"class":180},[163,232,234,237,240],{"class":165,"line":233},7,[163,235,236],{"class":180},"      user: ",[163,238,239],{"class":190},"'h34s'",[163,241,218],{"class":180},[163,243,245,248,251],{"class":165,"line":244},8,[163,246,247],{"class":180},"      password: ",[163,249,250],{"class":190},"''",[163,252,218],{"class":180},[163,254,256,259,261],{"class":165,"line":255},9,[163,257,258],{"class":180},"      name: ",[163,260,239],{"class":190},[163,262,218],{"class":180},[163,264,266],{"class":165,"line":265},10,[163,267,268],{"class":180},"    },\n",[163,270,272],{"class":165,"line":271},11,[163,273,274],{"class":180},"  },\n",[163,276,278],{"class":165,"line":277},12,[163,279,280],{"class":180},"})\n",[99,282,283,284,287],{},"Keys outside ",[103,285,286],{},"runtimeConfig.public"," are private: Nuxt never sends them to the browser. h34s reads private and public keys.",[143,289,291],{"id":290},"_2-define-a-scala-type-for-the-part-you-read","2. Define a Scala type for the part you read",[154,293,297],{"className":294,"code":295,"language":296,"meta":159,"style":159},"language-scala shiki shiki-themes github-light github-light github-dark","import dev.yuri4n.exts.ntcvzioschema.{NativeSchema, secretSchema}\nimport dev.yuri4n.exts.zioh3.Secret\nimport zio.schema.{Schema, derived}\n\nfinal case class DatabaseConfig(host: String, port: Int, user: String, password: Secret, name: String)\n    derives Schema, NativeSchema\n\n\u002F** The part of the Nuxt runtime config that this application reads. Other keys are ignored. *\u002F\nfinal case class AppConfig(database: DatabaseConfig) derives Schema, NativeSchema\n","scala",[103,298,299,337,361,385,391,459,472,476,482],{"__ignoreMap":159},[163,300,301,304,307,310,313,315,318,320,323,326,329,331,334],{"class":165,"line":166},[163,302,303],{"class":169},"import",[163,305,306],{"class":176}," dev",[163,308,309],{"class":180},".",[163,311,312],{"class":176},"yuri4n",[163,314,309],{"class":180},[163,316,317],{"class":176},"exts",[163,319,309],{"class":180},[163,321,322],{"class":176},"ntcvzioschema",[163,324,325],{"class":180},".{",[163,327,328],{"class":176},"NativeSchema",[163,330,110],{"class":180},[163,332,333],{"class":176},"secretSchema",[163,335,336],{"class":180},"}\n",[163,338,339,341,343,345,347,349,351,353,356,358],{"class":165,"line":184},[163,340,303],{"class":169},[163,342,306],{"class":176},[163,344,309],{"class":180},[163,346,312],{"class":176},[163,348,309],{"class":180},[163,350,317],{"class":176},[163,352,309],{"class":180},[163,354,355],{"class":176},"zioh3",[163,357,309],{"class":180},[163,359,360],{"class":176},"Secret\n",[163,362,363,365,368,370,373,375,378,380,383],{"class":165,"line":197},[163,364,303],{"class":169},[163,366,367],{"class":176}," zio",[163,369,309],{"class":180},[163,371,372],{"class":176},"schema",[163,374,325],{"class":180},[163,376,377],{"class":176},"Schema",[163,379,110],{"class":180},[163,381,382],{"class":176},"derived",[163,384,336],{"class":180},[163,386,387],{"class":165,"line":203},[163,388,390],{"emptyLinePlaceholder":389},true,"\n",[163,392,393,396,399,402,405,408,412,415,418,420,423,425,428,430,433,435,437,439,442,444,447,449,452,454,456],{"class":165,"line":209},[163,394,395],{"class":169},"final",[163,397,398],{"class":169}," case",[163,400,401],{"class":169}," class",[163,403,404],{"class":176}," DatabaseConfig",[163,406,407],{"class":180},"(",[163,409,411],{"class":410},"sP4rz","host",[163,413,414],{"class":180},": ",[163,416,417],{"class":176},"String",[163,419,110],{"class":180},[163,421,422],{"class":410},"port",[163,424,414],{"class":180},[163,426,427],{"class":176},"Int",[163,429,110],{"class":180},[163,431,432],{"class":410},"user",[163,434,414],{"class":180},[163,436,417],{"class":176},[163,438,110],{"class":180},[163,440,441],{"class":410},"password",[163,443,414],{"class":180},[163,445,446],{"class":176},"Secret",[163,448,110],{"class":180},[163,450,451],{"class":410},"name",[163,453,414],{"class":180},[163,455,417],{"class":176},[163,457,458],{"class":180},")\n",[163,460,461,464,467,469],{"class":165,"line":221},[163,462,463],{"class":169},"    derives",[163,465,466],{"class":176}," Schema",[163,468,110],{"class":180},[163,470,471],{"class":176},"NativeSchema\n",[163,473,474],{"class":165,"line":233},[163,475,390],{"emptyLinePlaceholder":389},[163,477,478],{"class":165,"line":244},[163,479,481],{"class":480},"sCsY4","\u002F** The part of the Nuxt runtime config that this application reads. Other keys are ignored. *\u002F\n",[163,483,484,486,488,490,493,495,498,500,503,506,509,511,513],{"class":165,"line":255},[163,485,395],{"class":169},[163,487,398],{"class":169},[163,489,401],{"class":169},[163,491,492],{"class":176}," AppConfig",[163,494,407],{"class":180},[163,496,497],{"class":410},"database",[163,499,414],{"class":180},[163,501,502],{"class":176},"DatabaseConfig",[163,504,505],{"class":180},") ",[163,507,508],{"class":169},"derives",[163,510,466],{"class":176},[163,512,110],{"class":180},[163,514,471],{"class":176},[99,516,517,518,521,522,524,525,528,529,531,532,129,535,538,539,542,543,546],{},"This is the demo's ",[103,519,520],{},"AppConfig.scala",": one derivation gives the ZIO Schema and the native converter. ",[103,523,333],{}," is the bridge's ",[103,526,527],{},"Schema[Secret]","; import it where you derive a schema that holds a ",[103,530,446],{},". For Kyo, import ",[103,533,534],{},"dev.yuri4n.exts.ntcvkyoschema.{NativeSchema, secretSchema}",[103,536,537],{},"kyo.Schema"," instead. The h34s APIs only need a ",[103,540,541],{},"NativeConverter",", so ",[103,544,545],{},"derives NativeConverter"," works too when you use no schema library.",[99,548,549,550,553,554,557,558,561,562,567,568,571],{},"The Kyo demo reads its own key, ",[103,551,552],{},"runtimeConfig.greeting.salutation",", with ",[103,555,556],{},"RuntimeConfig.load"," inside a ",[103,559,560],{},"Shared"," (see ",[563,564,566],"a",{"href":565},"\u002Fguide\u002Flifetimes#application-resources","lifetimes","). Its production build answered with the configured salutation, and with ",[103,569,570],{},"NUXT_GREETING_SALUTATION"," it answered with the override.",[143,573,575],{"id":574},"_3-read-it","3. Read it",[577,578,579,595],"table",{},[580,581,582],"thead",{},[583,584,585,589,592],"tr",{},[586,587,588],"th",{},"You need",[586,590,591],{},"Kyo",[586,593,594],{},"ZIO",[596,597,598,614],"tbody",{},[583,599,600,604,609],{},[601,602,603],"td",{},"The config for this request",[601,605,606],{},[103,607,608],{},"RuntimeConfig.get[AppConfig](request)",[601,610,611],{},[103,612,613],{},"ZRuntimeConfig.get[AppConfig](request)",[583,615,616,619,624],{},[601,617,618],{},"The startup config, for application resources",[601,620,621],{},[103,622,623],{},"RuntimeConfig.load[AppConfig]",[601,625,626],{},[103,627,628],{},"ZRuntimeConfig.load[AppConfig]",[99,630,631,634,635,638,639,641,642,645,646,649],{},[103,632,633],{},"get"," returns Nitro's per-request copy. ",[103,636,637],{},"load"," returns Nitro's shared startup copy; use it inside ",[103,640,560],{}," or ",[103,643,644],{},"ZShared"," to build a pool once. The demo's ",[103,647,648],{},"SessionPool.layer"," does that:",[154,651,653],{"className":294,"code":652,"language":296,"meta":159,"style":159},"val layer: ZLayer[Any, Throwable, SessionPool] =\n  ZLayer.scoped(\n    for\n      config   \u003C- ZRuntimeConfig.load[AppConfig]\n      sessions \u003C- pooled(config.database).toScopedZIO\n    yield SessionPool(sessions),\n  )\n",[103,654,655,691,699,704,724,734,745],{"__ignoreMap":159},[163,656,657,660,663,666,669,672,675,677,680,682,685,688],{"class":165,"line":166},[163,658,659],{"class":169},"val",[163,661,662],{"class":410}," layer",[163,664,665],{"class":169},":",[163,667,668],{"class":176}," ZLayer",[163,670,671],{"class":180},"[",[163,673,674],{"class":176},"Any",[163,676,110],{"class":180},[163,678,679],{"class":176},"Throwable",[163,681,110],{"class":180},[163,683,684],{"class":176},"SessionPool",[163,686,687],{"class":180},"] ",[163,689,690],{"class":169},"=\n",[163,692,693,696],{"class":165,"line":184},[163,694,695],{"class":176},"  ZLayer",[163,697,698],{"class":180},".scoped(\n",[163,700,701],{"class":165,"line":197},[163,702,703],{"class":169},"    for\n",[163,705,706,709,712,715,718,721],{"class":165,"line":203},[163,707,708],{"class":180},"      config   ",[163,710,711],{"class":169},"\u003C-",[163,713,714],{"class":176}," ZRuntimeConfig",[163,716,717],{"class":180},".load[",[163,719,720],{"class":176},"AppConfig",[163,722,723],{"class":180},"]\n",[163,725,726,729,731],{"class":165,"line":209},[163,727,728],{"class":180},"      sessions ",[163,730,711],{"class":169},[163,732,733],{"class":180}," pooled(config.database).toScopedZIO\n",[163,735,736,739,742],{"class":165,"line":221},[163,737,738],{"class":169},"    yield",[163,740,741],{"class":176}," SessionPool",[163,743,744],{"class":180},"(sessions),\n",[163,746,747],{"class":165,"line":233},[163,748,749],{"class":180},"  )\n",[99,751,752,753,756,757,309],{},"The Kyo types are ",[103,754,755],{},"A \u003C (Sync & Abort[ConfigError])","; the ZIO types are ",[103,758,759],{},"IO[ConfigError, A]",[143,761,763],{"id":762},"_4-override-values-at-runtime","4. Override values at runtime",[99,765,766,767,770],{},"Nitro maps each declared key to an environment variable: the ",[103,768,769],{},"NUXT_"," prefix, then the key path in upper snake case. For the config above:",[577,772,773,783],{},[580,774,775],{},[583,776,777,780],{},[586,778,779],{},"Key",[586,781,782],{},"Variable",[596,784,785,797,809],{},[583,786,787,792],{},[601,788,789],{},[103,790,791],{},"database.host",[601,793,794],{},[103,795,796],{},"NUXT_DATABASE_HOST",[583,798,799,804],{},[601,800,801],{},[103,802,803],{},"database.port",[601,805,806],{},[103,807,808],{},"NUXT_DATABASE_PORT",[583,810,811,816],{},[601,812,813],{},[103,814,815],{},"database.password",[601,817,818],{},[103,819,820],{},"NUXT_DATABASE_PASSWORD",[99,822,823,824,827,828,831],{},"A camelCase key such as ",[103,825,826],{},"apiToken"," becomes ",[103,829,830],{},"NUXT_API_TOKEN",". Set secrets this way, at runtime, in your shell, process manager or hosting platform.",[99,833,834,835,838,839,841,842,845,846,849,850,852,853,856],{},"Nitro parses each value before h34s sees it (Nitro 2.13 uses ",[103,836,837],{},"destr","). ",[103,840,228],{}," becomes a number and ",[103,843,844],{},"true"," becomes a boolean. A secret that looks like a number, such as ",[103,847,848],{},"12345",", therefore arrives as a number, and decoding a ",[103,851,446],{}," field fails with a ",[103,854,855],{},"ConfigError",". This comes from Nitro's source; h34s has no test for it. Prefer secrets that are not numeric, or check the failing path in the server log.",[143,858,860],{"id":859},"when-configuration-is-wrong","When configuration is wrong",[99,862,863,864,866],{},"Every failure is a ",[103,865,855],{},". It is never shown to clients: an unhandled one is an opaque 500. Its message names only the failing path, never a value:",[577,868,869,879],{},[580,870,871],{},[583,872,873,876],{},[586,874,875],{},"Situation",[586,877,878],{},"Message",[596,880,881,891,901],{},[583,882,883,886],{},[601,884,885],{},"The h34s Nitro plugin is not installed (the module is missing)",[601,887,888],{},[103,889,890],{},"h34s Nitro plugin is not installed",[583,892,893,896],{},[601,894,895],{},"A field has the wrong type",[601,897,898],{},[103,899,900],{},"Nuxt runtime config does not match the expected shape at root.database.port",[583,902,903,906],{},[601,904,905],{},"Reading the config throws",[601,907,908],{},[103,909,910],{},"h34s could not read the Nuxt runtime config",[99,912,913,914,916,917,920],{},"Fix the key in ",[103,915,149],{}," or the environment, then restart the server. Development mode shows the message in ",[103,918,919],{},"debug.cause","; production logs it on the server.",[99,922,923,924,926,927,930,931,933,934,936,937,939],{},"A derived ",[103,925,541],{}," (version 0.9) accepts a missing or ",[103,928,929],{},"null"," value for a plain ",[103,932,417],{}," field. Declare every key in ",[103,935,149],{},", or use a ",[563,938,372],{"href":40}," type when a missing value must fail.",[143,941,943],{"id":942},"keep-secrets-secret","Keep secrets secret",[99,945,946,947,665],{},"Wrap every secret in ",[103,948,446],{},[950,951,952,963,966,972],"ul",{},[953,954,955,958,959,962],"li",{},[103,956,957],{},"toString"," prints ",[103,960,961],{},"Secret(\u003Credacted>)",", so a secret in a case class does not appear in logs or diagnostics.",[953,964,965],{},"A value of the wrong type (a number, for example) fails with a message that names the path, never the value or the input document.",[953,967,968,971],{},[103,969,970],{},"secret.reveal"," returns the plain value. Call it only where the value must leave your program, such as a database client.",[953,973,974,977],{},[103,975,976],{},"secret.matches(candidate)"," compares in constant time for a given candidate length. Use it to check tokens:",[154,979,981],{"className":294,"code":980,"language":296,"meta":159,"style":159},"final case class AdminConfig(adminToken: Secret) derives NativeConverter\n\ndef isAdmin(request: Request, config: AdminConfig): Boolean =\n  request.bearerToken.exists(config.adminToken.matches)\n",[103,982,983,1010,1014,1053],{"__ignoreMap":159},[163,984,985,987,989,991,994,996,999,1001,1003,1005,1007],{"class":165,"line":166},[163,986,395],{"class":169},[163,988,398],{"class":169},[163,990,401],{"class":169},[163,992,993],{"class":176}," AdminConfig",[163,995,407],{"class":180},[163,997,998],{"class":410},"adminToken",[163,1000,414],{"class":180},[163,1002,446],{"class":176},[163,1004,505],{"class":180},[163,1006,508],{"class":169},[163,1008,1009],{"class":176}," NativeConverter\n",[163,1011,1012],{"class":165,"line":184},[163,1013,390],{"emptyLinePlaceholder":389},[163,1015,1016,1019,1022,1024,1027,1029,1032,1034,1037,1039,1042,1045,1047,1050],{"class":165,"line":197},[163,1017,1018],{"class":169},"def",[163,1020,1021],{"class":176}," isAdmin",[163,1023,407],{"class":180},[163,1025,1026],{"class":410},"request",[163,1028,414],{"class":180},[163,1030,1031],{"class":176},"Request",[163,1033,110],{"class":180},[163,1035,1036],{"class":410},"config",[163,1038,414],{"class":180},[163,1040,1041],{"class":176},"AdminConfig",[163,1043,1044],{"class":180},")",[163,1046,665],{"class":169},[163,1048,1049],{"class":176}," Boolean",[163,1051,1052],{"class":169}," =\n",[163,1054,1055],{"class":165,"line":203},[163,1056,1057],{"class":180},"  request.bearerToken.exists(config.adminToken.matches)\n",[99,1059,1060],{},"Follow these rules:",[950,1062,1063,1070,1079],{},[953,1064,1065,1066,1069],{},"Never log a revealed secret, put it in a ",[103,1067,1068],{},"SafeError"," message, or return it in a response body.",[953,1071,1072,1073,110,1075,1078],{},"Never commit secret values in ",[103,1074,149],{},[103,1076,1077],{},".env"," files that are part of a build, or source files. Supply them at runtime.",[953,1080,1081],{},"Keep debug mode off in production. Debug diagnostics include exception messages, and a library can put connection details in them.",[143,1083,1085],{"id":1084},"what-is-tested","What is tested",[950,1087,1088,1104,1113,1135],{},[953,1089,1090,129,1093,1095,1096,1099,1100,1103],{},[103,1091,1092],{},"RuntimeConfig.get",[103,1094,637],{}," decoding, path-only error messages, a throwing read, the missing plugin, and the opaque 500: Kyo ",[103,1097,1098],{},"RuntimeConfigSuite"," and ZIO ",[103,1101,1102],{},"ZRuntimeConfigSpec",", with a fake plugin record.",[953,1105,1106,1107,1109,1110,309],{},"The demo's ",[103,1108,720],{}," decoding with a redacted password: ",[103,1111,1112],{},"AppConfigSpec",[953,1114,1115,1118,1119,129,1121,1124,1125,1127,1128,1131,1132,1134],{},[103,1116,1117],{},"Request.fake(runtimeConfig = Some(json))"," with ",[103,1120,1092],{},[103,1122,1123],{},"ZRuntimeConfig.get","; ",[103,1126,446],{}," shape errors without the value (",[103,1129,1130],{},"ValuesSuite","); ",[103,1133,333],{}," in both schema bridges.",[953,1136,1137,1138,1141,1142,1145,1146,1148,1149,1152,1153,1155],{},"A production build of the demo (",[103,1139,1140],{},"nuxt build",", then the Node server, macOS x86_64): ",[103,1143,1144],{},"ZRuntimeConfig.load"," read the database settings, and a marker password supplied at runtime appeared neither in the server logs nor in the debug response. The Kyo demo's ",[103,1147,570],{}," override was checked with ",[103,1150,1151],{},"scripts\u002Fkyo-smoke.mjs","; the other ",[103,1154,117],{}," overrides have no separate test.",[1157,1158,1159],"style",{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sP4rz, html code.shiki .sP4rz{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":159,"searchDepth":184,"depth":184,"links":1161},[1162,1164,1165,1166,1167,1168,1169],{"id":145,"depth":184,"text":1163},"1. Declare the keys in nuxt.config.ts",{"id":290,"depth":184,"text":291},{"id":574,"depth":184,"text":575},{"id":762,"depth":184,"text":763},{"id":859,"depth":184,"text":860},{"id":942,"depth":184,"text":943},{"id":1084,"depth":184,"text":1085},"Decode Nuxt runtimeConfig into a Scala case class, override it with NUXT_* variables, and keep secrets out of logs.","md",null,{},{"title":31,"description":1170},"4LgjZRlK38kf1U3vVYC6a0c15UXQV8G6kd_mUX3yAeo",[1177,1179],{"title":27,"path":28,"stem":29,"description":1178,"children":-1},"Write ordinary ZIO programs; the hand-written ZIO adapter runs them over the Kyo core.",{"title":35,"path":36,"stem":37,"description":1180,"children":-1},"Open request resources in the request scope and application resources once, with Shared or ZShared and the Nitro close hook.",1792533381917]