[{"data":1,"prerenderedAt":1430},["ShallowReactive",2],{"navigation_docs":3,"-runtypes-tooling-linting":399},[4,162,346],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":24},"RPC","icon-park-outline:lightning","\u002Frpc","01.rpc",[10,25,63,77,102,136],{"title":11,"icon":12,"redirect":7,"path":13,"stem":14,"children":15,"page":24},"Introduction","icon-park-outline:home","\u002Frpc\u002Fintroduction","01.rpc\u002F01.introduction",[16,20],{"title":17,"path":18,"stem":19},"Quick Start","\u002Frpc\u002Fintroduction\u002Fquick-start","01.rpc\u002F01.introduction\u002F02.quick-start",{"title":21,"path":22,"stem":23},"Manual Install","\u002Frpc\u002Fintroduction\u002Fmanual-install","01.rpc\u002F01.introduction\u002F03.manual-install",false,{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":24},"Server","icon-park-outline:server","\u002Frpc\u002Fserver","01.rpc\u002F02.server",[31,35,39,43,47,51,55,59],{"title":32,"path":33,"stem":34},"Routes","\u002Frpc\u002Fserver\u002Froutes","01.rpc\u002F02.server\u002F01.routes",{"title":36,"path":37,"stem":38},"Middleware","\u002Frpc\u002Fserver\u002Fmiddleware","01.rpc\u002F02.server\u002F02.middleware",{"title":40,"path":41,"stem":42},"Call Context","\u002Frpc\u002Fserver\u002Fcall-context","01.rpc\u002F02.server\u002F03.call-context",{"title":44,"path":45,"stem":46},"Headers","\u002Frpc\u002Fserver\u002Fheaders","01.rpc\u002F02.server\u002F04.headers",{"title":48,"path":49,"stem":50},"Error Handling","\u002Frpc\u002Fserver\u002Ferror-handling","01.rpc\u002F02.server\u002F05.error-handling",{"title":52,"path":53,"stem":54},"Validation","\u002Frpc\u002Fserver\u002Fvalidation","01.rpc\u002F02.server\u002F06.validation",{"title":56,"path":57,"stem":58},"JSON Round Trip","\u002Frpc\u002Fserver\u002Fjson-round-trip","01.rpc\u002F02.server\u002F07.json-round-trip",{"title":60,"path":61,"stem":62},"Drizzle Tables","\u002Frpc\u002Fserver\u002Fdrizzle-tables","01.rpc\u002F02.server\u002F08.drizzle-tables",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":24},"Middlewares","icon-park-outline:link-one","\u002Frpc\u002Fmiddlewares","01.rpc\u002F03.middlewares",[69,73],{"title":70,"path":71,"stem":72},"fetchMetadata","\u002Frpc\u002Fmiddlewares\u002Ffetch-metadata","01.rpc\u002F03.middlewares\u002F01.fetch-metadata",{"title":74,"path":75,"stem":76},"syncRoutes","\u002Frpc\u002Fmiddlewares\u002Fsync-routes","01.rpc\u002F03.middlewares\u002F02.sync-routes",{"title":78,"icon":79,"path":80,"stem":81,"children":82,"page":24},"Client","icon-park-outline:computer","\u002Frpc\u002Fclient","01.rpc\u002F04.client",[83,87,91,94,98],{"title":84,"path":85,"stem":86},"Client Overview","\u002Frpc\u002Fclient\u002Fclient-overview","01.rpc\u002F04.client\u002F00.client-overview",{"title":88,"path":89,"stem":90},"Client Middleware","\u002Frpc\u002Fclient\u002Fclient-middleware","01.rpc\u002F04.client\u002F01.client-middleware",{"title":48,"path":92,"stem":93},"\u002Frpc\u002Fclient\u002Ferror-handling","01.rpc\u002F04.client\u002F02.error-handling",{"title":95,"path":96,"stem":97},"Batch Requests","\u002Frpc\u002Fclient\u002Fbatch","01.rpc\u002F04.client\u002F03.batch",{"title":99,"path":100,"stem":101},"Cancellation & Timeouts","\u002Frpc\u002Fclient\u002Fcancellation-timeouts","01.rpc\u002F04.client\u002F04.cancellation-timeouts",{"title":103,"redirect":104,"icon":105,"path":106,"stem":107,"children":108,"page":24},"Platforms","\u002Frpc\u002Fplatforms\u002Fnode-js","icon-park-outline:play","\u002Frpc\u002Fplatforms","01.rpc\u002F06.platforms",[109,112,116,120,124,128,132],{"title":110,"path":104,"stem":111},"Node.js","01.rpc\u002F06.platforms\u002F01.node-js",{"title":113,"path":114,"stem":115},"Bun","\u002Frpc\u002Fplatforms\u002Fbun","01.rpc\u002F06.platforms\u002F02.bun",{"title":117,"path":118,"stem":119},"AWS Lambda","\u002Frpc\u002Fplatforms\u002Faws-lambda","01.rpc\u002F06.platforms\u002F03.aws-lambda",{"title":121,"path":122,"stem":123},"Google Cloud Functions","\u002Frpc\u002Fplatforms\u002Fgoogle-cloud-functions","01.rpc\u002F06.platforms\u002F04.google-cloud-functions",{"title":125,"path":126,"stem":127},"Cloudflare Workers","\u002Frpc\u002Fplatforms\u002Fcloudflare","01.rpc\u002F06.platforms\u002F05.cloudflare",{"title":129,"path":130,"stem":131},"Vercel","\u002Frpc\u002Fplatforms\u002Fvercel","01.rpc\u002F06.platforms\u002F06.vercel",{"title":133,"path":134,"stem":135},"uWebSockets.js","\u002Frpc\u002Fplatforms\u002Fuwebsockets","01.rpc\u002F06.platforms\u002F07.uwebsockets",{"title":137,"icon":138,"path":139,"stem":140,"children":141,"page":24},"Devtools","icon-park-outline:tool","\u002Frpc\u002Fdevtools","01.rpc\u002F07.devtools",[142,146,150,154,158],{"title":143,"path":144,"stem":145},"Linter","\u002Frpc\u002Fdevtools\u002Flinter","01.rpc\u002F07.devtools\u002F01.linter",{"title":147,"path":148,"stem":149},"Vite","\u002Frpc\u002Fdevtools\u002Fvite","01.rpc\u002F07.devtools\u002F02.vite",{"title":151,"path":152,"stem":153},"Next.js","\u002Frpc\u002Fdevtools\u002Fnextjs","01.rpc\u002F07.devtools\u002F03.nextjs",{"title":155,"path":156,"stem":157},"CLI","\u002Frpc\u002Fdevtools\u002Fcli","01.rpc\u002F07.devtools\u002F04.cli",{"title":159,"path":160,"stem":161},"API Types","\u002Frpc\u002Fdevtools\u002Fapi-types","01.rpc\u002F07.devtools\u002F05.api-types",{"title":163,"icon":164,"path":165,"stem":166,"children":167,"page":24},"RunTypes","i-lucide-braces","\u002Fruntypes","02.runtypes",[168,184,224,254,268,290,332],{"title":11,"icon":169,"redirect":165,"path":170,"stem":171,"children":172,"page":24},"i-lucide-rocket","\u002Fruntypes\u002Fintroduction","02.runtypes\u002F01.introduction",[173,177,180],{"title":174,"path":175,"stem":176},"Built on typescript-go","\u002Fruntypes\u002Fintroduction\u002Fbuilt-on-typescript-go","02.runtypes\u002F01.introduction\u002F02.built-on-typescript-go",{"title":17,"path":178,"stem":179},"\u002Fruntypes\u002Fintroduction\u002Fquick-start","02.runtypes\u002F01.introduction\u002F03.quick-start",{"title":181,"path":182,"stem":183},"Configuration","\u002Fruntypes\u002Fintroduction\u002Fconfiguration","02.runtypes\u002F01.introduction\u002F04.configuration",{"title":185,"icon":186,"redirect":187,"path":188,"stem":189,"children":190,"page":24},"Guide","i-lucide-book-open","\u002Fruntypes\u002Fguide\u002Ftype-builders","\u002Fruntypes\u002Fguide","02.runtypes\u002F02.guide",[191,194,198,201,204,208,212,216,220],{"title":192,"path":187,"stem":193},"Types vs Type Builders","02.runtypes\u002F02.guide\u002F01.type-builders",{"title":195,"path":196,"stem":197},"Reflection","\u002Fruntypes\u002Fguide\u002Freflection","02.runtypes\u002F02.guide\u002F02.reflection",{"title":52,"path":199,"stem":200},"\u002Fruntypes\u002Fguide\u002Fvalidation","02.runtypes\u002F02.guide\u002F03.validation",{"title":56,"path":202,"stem":203},"\u002Fruntypes\u002Fguide\u002Fjson-round-trip","02.runtypes\u002F02.guide\u002F04.json-round-trip",{"title":205,"path":206,"stem":207},"Data Mocking","\u002Fruntypes\u002Fguide\u002Fmocking","02.runtypes\u002F02.guide\u002F07.mocking",{"title":209,"path":210,"stem":211},"JSON Schemas","\u002Fruntypes\u002Fguide\u002Fjson-schemas","02.runtypes\u002F02.guide\u002F08.json-schemas",{"title":213,"path":214,"stem":215},"Pure Functions","\u002Fruntypes\u002Fguide\u002Fpure-functions","02.runtypes\u002F02.guide\u002F09.pure-functions",{"title":217,"path":218,"stem":219},"Compiler Markers","\u002Fruntypes\u002Fguide\u002Fcompiler-markers","02.runtypes\u002F02.guide\u002F10.compiler-markers",{"title":221,"path":222,"stem":223},"All Compiled Functions","\u002Fruntypes\u002Fguide\u002Fall-compiled-functions","02.runtypes\u002F02.guide\u002F11.all-compiled-functions",{"title":225,"icon":226,"redirect":227,"path":228,"stem":229,"children":230,"page":24},"Type Formats","i-lucide-shapes","\u002Fruntypes\u002Ftype-formats\u002Foverview","\u002Fruntypes\u002Ftype-formats","02.runtypes\u002F03.type-formats",[231,234,238,242,246,250],{"title":232,"path":227,"stem":233},"Overview","02.runtypes\u002F03.type-formats\u002F01.overview",{"title":235,"path":236,"stem":237},"String Formats","\u002Fruntypes\u002Ftype-formats\u002Fstring","02.runtypes\u002F03.type-formats\u002F02.string",{"title":239,"path":240,"stem":241},"Number Formats","\u002Fruntypes\u002Ftype-formats\u002Fnumber","02.runtypes\u002F03.type-formats\u002F03.number",{"title":243,"path":244,"stem":245},"BigInt Formats","\u002Fruntypes\u002Ftype-formats\u002Fbigint","02.runtypes\u002F03.type-formats\u002F04.bigint",{"title":247,"path":248,"stem":249},"Date and Time Formats","\u002Fruntypes\u002Ftype-formats\u002Fdate-time","02.runtypes\u002F03.type-formats\u002F05.date-time",{"title":251,"path":252,"stem":253},"Collection Formats","\u002Fruntypes\u002Ftype-formats\u002Fcollections","02.runtypes\u002F03.type-formats\u002F06.collections",{"title":255,"icon":256,"redirect":257,"path":258,"stem":259,"children":260,"page":24},"Tooling","i-lucide-wrench","\u002Fruntypes\u002Ftooling\u002Flinting","\u002Fruntypes\u002Ftooling","02.runtypes\u002F04.tooling",[261,264],{"title":262,"path":257,"stem":263},"Linting","02.runtypes\u002F04.tooling\u002F01.linting",{"title":265,"path":266,"stem":267},"Source Conversion","\u002Fruntypes\u002Ftooling\u002Fsource-conversion","02.runtypes\u002F04.tooling\u002F02.source-conversion",{"title":269,"icon":270,"redirect":271,"path":272,"stem":273,"children":274,"page":24},"AI Integration","i-lucide-sparkles","\u002Fruntypes\u002Fai-integration\u002Fworkflow-and-commands","\u002Fruntypes\u002Fai-integration","02.runtypes\u002F05.ai-integration",[275,278,282,286],{"title":276,"path":271,"stem":277},"AI Workflow","02.runtypes\u002F05.ai-integration\u002F01.workflow-and-commands",{"title":279,"path":280,"stem":281},"FriendlyText","\u002Fruntypes\u002Fai-integration\u002Ffriendly-text","02.runtypes\u002F05.ai-integration\u002F02.friendly-text",{"title":283,"path":284,"stem":285},"MockData","\u002Fruntypes\u002Fai-integration\u002Fmock-data","02.runtypes\u002F05.ai-integration\u002F03.mock-data",{"title":287,"path":288,"stem":289},"Translations (i18n)","\u002Fruntypes\u002Fai-integration\u002Fi18n","02.runtypes\u002F05.ai-integration\u002F04.i18n",{"title":291,"icon":292,"redirect":293,"path":294,"stem":295,"children":296,"page":24},"Drizzle ORM","i-lineicons-drizzle","\u002Fruntypes\u002Fdrizzle-orm\u002Fdrizzle-overview","\u002Fruntypes\u002Fdrizzle-orm","02.runtypes\u002F06.drizzle-orm",[297,300,304,308,312,316,320,324,328],{"title":298,"path":293,"stem":299},"Drizzle Overview","02.runtypes\u002F06.drizzle-orm\u002F00.drizzle-overview",{"title":301,"path":302,"stem":303},"Column Formats","\u002Fruntypes\u002Fdrizzle-orm\u002Fcolumn-formats","02.runtypes\u002F06.drizzle-orm\u002F01.column-formats",{"title":305,"path":306,"stem":307},"Views","\u002Fruntypes\u002Fdrizzle-orm\u002Fviews","02.runtypes\u002F06.drizzle-orm\u002F02.views",{"title":309,"path":310,"stem":311},"Indexes and Constraints","\u002Fruntypes\u002Fdrizzle-orm\u002Fconstraints","02.runtypes\u002F06.drizzle-orm\u002F03.constraints",{"title":313,"path":314,"stem":315},"Row Level Security","\u002Fruntypes\u002Fdrizzle-orm\u002Frow-level-security","02.runtypes\u002F06.drizzle-orm\u002F04.row-level-security",{"title":317,"path":318,"stem":319},"Relations","\u002Fruntypes\u002Fdrizzle-orm\u002Frelations","02.runtypes\u002F06.drizzle-orm\u002F05.relations",{"title":321,"path":322,"stem":323},"The Schema File","\u002Fruntypes\u002Fdrizzle-orm\u002Fschema-file","02.runtypes\u002F06.drizzle-orm\u002F06.schema-file",{"title":325,"path":326,"stem":327},"Migrate an Existing Schema","\u002Fruntypes\u002Fdrizzle-orm\u002Fmigrate-an-existing-schema","02.runtypes\u002F06.drizzle-orm\u002F07.migrate-an-existing-schema",{"title":329,"path":330,"stem":331},"Cloudflare D1 and Durable Objects","\u002Fruntypes\u002Fdrizzle-orm\u002Fcloudflare-storage","02.runtypes\u002F06.drizzle-orm\u002F08.cloudflare-storage",{"title":333,"icon":334,"redirect":335,"path":336,"stem":337,"children":338,"page":24},"Diagnostics","i-lucide-triangle-alert","\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels","\u002Fruntypes\u002Fdiagnostics","02.runtypes\u002F08.diagnostics",[339,342],{"title":340,"path":335,"stem":341},"Error Levels","02.runtypes\u002F08.diagnostics\u002F01.error-levels",{"title":343,"path":344,"stem":345},"All Diagnostics","\u002Fruntypes\u002Fdiagnostics\u002Fall-diagnostics","02.runtypes\u002F08.diagnostics\u002F02.all-diagnostics",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":24},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks","03.benchmarks",[352,372],{"title":5,"icon":6,"redirect":353,"path":354,"stem":355,"children":356,"page":24},"\u002Fbenchmarks\u002Frpc\u002Fhello-world","\u002Fbenchmarks\u002Frpc","03.benchmarks\u002F02.rpc",[357,360,364,368],{"title":358,"path":353,"stem":359},"Hello World","03.benchmarks\u002F02.rpc\u002F01.hello-world",{"title":361,"path":362,"stem":363},"Light Validation","\u002Fbenchmarks\u002Frpc\u002Flight-validation","03.benchmarks\u002F02.rpc\u002F02.light-validation",{"title":365,"path":366,"stem":367},"Heavy Validation","\u002Fbenchmarks\u002Frpc\u002Fheavy-validation","03.benchmarks\u002F02.rpc\u002F03.heavy-validation",{"title":369,"path":370,"stem":371},"Payload Sizes","\u002Fbenchmarks\u002Frpc\u002Fpayload-sizes","03.benchmarks\u002F02.rpc\u002F04.payload-sizes",{"title":163,"icon":164,"redirect":373,"path":374,"stem":375,"children":376,"page":24},"\u002Fbenchmarks\u002Fruntypes\u002Fis-valid","\u002Fbenchmarks\u002Fruntypes","03.benchmarks\u002F03.runtypes",[377,380,384,388,392,395],{"title":378,"path":373,"stem":379},"Is Valid","03.benchmarks\u002F03.runtypes\u002F01.is-valid",{"title":381,"path":382,"stem":383},"Is Valid Formats","\u002Fbenchmarks\u002Fruntypes\u002Fis-valid-formats","03.benchmarks\u002F03.runtypes\u002F02.is-valid-formats",{"title":385,"path":386,"stem":387},"Get Errors","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors","03.benchmarks\u002F03.runtypes\u002F03.get-errors",{"title":389,"path":390,"stem":391},"Get Errors Formats","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors-formats","03.benchmarks\u002F03.runtypes\u002F04.get-errors-formats",{"title":56,"path":393,"stem":394},"\u002Fbenchmarks\u002Fruntypes\u002Fjson-round-trip","03.benchmarks\u002F03.runtypes\u002F05.json-round-trip",{"title":396,"path":397,"stem":398},"Type Checking","\u002Fbenchmarks\u002Fruntypes\u002Ftype-checking","03.benchmarks\u002F03.runtypes\u002F07.type-checking",{"id":400,"title":262,"body":401,"description":1424,"extension":1425,"links":1426,"meta":1427,"navigation":475,"path":257,"seo":1428,"stem":263,"__hash__":1429},"docs\u002F02.runtypes\u002F04.tooling\u002F01.linting.md",{"type":402,"value":403,"toc":1415},"minimark",[404,413,418,421,676,679,687,694,698,705,790,794,798,801,851,857,860,892,895,927,941,945,951,1064,1068,1082,1180,1184,1202,1314,1321,1325,1328,1371,1392,1411],[405,406,407,408,412],"p",{},"mion has no linter of its own. The compiler that builds your code also checks it. The lint plugin in ",[409,410,411],"code",{},"@mionjs\u002Fdevtools"," only shows the compiler's errors in your editor, through OXlint (its main target) or ESLint v9 flat config.",[414,415,417],"h2",{"id":416},"compiler-checks","Compiler Checks",[405,419,420],{},"This is not a linter added on top of your build. The checks a linter would usually run are part of the compiler, so your build fails on them too.",[422,423,424,554],"code-group",{},[425,426,432],"pre",{"className":427,"code":428,"filename":429,"language":430,"meta":431,"style":431},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {registerPureFn} from '@mionjs\u002Frun-types\u002Fruntime';\n\nconst rate = 2;\n\u002F\u002F A pure function may only use its own arguments.\nexport const double = registerPureFn((price: number) => price * rate);\n","src\u002Fpure.ts","ts","",[409,433,434,470,477,496,503],{"__ignoreMap":431},[435,436,439,443,447,451,454,457,460,464,467],"span",{"class":437,"line":438},"line",1,[435,440,442],{"class":441},"s7zQu","import",[435,444,446],{"class":445},"sMK4o"," {",[435,448,450],{"class":449},"sTEyZ","registerPureFn",[435,452,453],{"class":445},"}",[435,455,456],{"class":441}," from",[435,458,459],{"class":445}," '",[435,461,463],{"class":462},"sfazB","@mionjs\u002Frun-types\u002Fruntime",[435,465,466],{"class":445},"'",[435,468,469],{"class":445},";\n",[435,471,473],{"class":437,"line":472},2,[435,474,476],{"emptyLinePlaceholder":475},true,"\n",[435,478,480,484,487,490,494],{"class":437,"line":479},3,[435,481,483],{"class":482},"spNyl","const",[435,485,486],{"class":449}," rate ",[435,488,489],{"class":445},"=",[435,491,493],{"class":492},"sbssI"," 2",[435,495,469],{"class":445},[435,497,499],{"class":437,"line":498},4,[435,500,502],{"class":501},"sHwdD","\u002F\u002F A pure function may only use its own arguments.\n",[435,504,506,509,512,515,517,521,524,526,530,533,537,540,543,546,549,552],{"class":437,"line":505},5,[435,507,508],{"class":441},"export",[435,510,511],{"class":482}," const",[435,513,514],{"class":449}," double ",[435,516,489],{"class":445},[435,518,520],{"class":519},"s2Zo4"," registerPureFn",[435,522,523],{"class":449},"(",[435,525,523],{"class":445},[435,527,529],{"class":528},"sHdIc","price",[435,531,532],{"class":445},":",[435,534,536],{"class":535},"sBMFI"," number",[435,538,539],{"class":445},")",[435,541,542],{"class":482}," =>",[435,544,545],{"class":449}," price ",[435,547,548],{"class":445},"*",[435,550,551],{"class":449}," rate)",[435,553,469],{"class":445},[425,555,558],{"className":427,"code":556,"filename":557,"language":430,"meta":431,"style":431},"import {createValidateFn} from '@mionjs\u002Frun-types';\n\n\u002F\u002F A symbol has no data to check.\nexport const isSymbol = createValidateFn\u003Csymbol>();\n\n\u002F\u002F T is unknown here, so no validator can be made for it.\nexport function makeValidator\u003CT>() {\n  return createValidateFn\u003CT>();\n}\n","src\u002Fvalidators.ts",[409,559,560,582,586,591,619,623,629,651,670],{"__ignoreMap":431},[435,561,562,564,566,569,571,573,575,578,580],{"class":437,"line":438},[435,563,442],{"class":441},[435,565,446],{"class":445},[435,567,568],{"class":449},"createValidateFn",[435,570,453],{"class":445},[435,572,456],{"class":441},[435,574,459],{"class":445},[435,576,577],{"class":462},"@mionjs\u002Frun-types",[435,579,466],{"class":445},[435,581,469],{"class":445},[435,583,584],{"class":437,"line":472},[435,585,476],{"emptyLinePlaceholder":475},[435,587,588],{"class":437,"line":479},[435,589,590],{"class":501},"\u002F\u002F A symbol has no data to check.\n",[435,592,593,595,597,600,602,605,608,611,614,617],{"class":437,"line":498},[435,594,508],{"class":441},[435,596,511],{"class":482},[435,598,599],{"class":449}," isSymbol ",[435,601,489],{"class":445},[435,603,604],{"class":519}," createValidateFn",[435,606,607],{"class":445},"\u003C",[435,609,610],{"class":535},"symbol",[435,612,613],{"class":445},">",[435,615,616],{"class":449},"()",[435,618,469],{"class":445},[435,620,621],{"class":437,"line":505},[435,622,476],{"emptyLinePlaceholder":475},[435,624,626],{"class":437,"line":625},6,[435,627,628],{"class":501},"\u002F\u002F T is unknown here, so no validator can be made for it.\n",[435,630,632,634,637,640,642,645,648],{"class":437,"line":631},7,[435,633,508],{"class":441},[435,635,636],{"class":482}," function",[435,638,639],{"class":519}," makeValidator",[435,641,607],{"class":445},[435,643,644],{"class":535},"T",[435,646,647],{"class":445},">()",[435,649,650],{"class":445}," {\n",[435,652,654,657,659,661,663,665,668],{"class":437,"line":653},8,[435,655,656],{"class":441},"  return",[435,658,604],{"class":519},[435,660,607],{"class":445},[435,662,644],{"class":535},[435,664,613],{"class":445},[435,666,616],{"class":667},"swJcz",[435,669,469],{"class":445},[435,671,673],{"class":437,"line":672},9,[435,674,675],{"class":445},"}\n",[405,677,678],{},"Your editor shows:",[425,680,685],{"className":681,"code":683,"language":684,"meta":431},[682],"language-text","src\u002Fpure.ts:5:65: error mion(runtime-error): [purefn-reads-outer-variable] `rate` is captured from outer scope inside a pure-fn factory; pure functions can't reach outside their own body.\nsrc\u002Fvalidators.ts:4:50: error mion(runtime-error): [validate-symbol-root] Type `Symbol` can never be validated: the generated function will always fail.\nsrc\u002Fvalidators.ts:8:10: error mion(error): [marker-in-generic-function] Marker call is inside a generic function: the type argument is unresolved, so no id can be computed at build time.\n","text",[409,686,683],{"__ignoreMap":431},[405,688,689,690,693],{},"Your build prints the same three errors and stops. Look up any name in ",[691,692,343],"a",{"href":344},".",[414,695,697],{"id":696},"lint-rules","Lint Rules",[405,699,700,701,704],{},"The plugin has four rules, one per ",[691,702,703],{"href":335},"level",". A rule does not decide what is checked. It only shows every error of its level.",[706,707,708,724],"table",{},[709,710,711],"thead",{},[712,713,714,718,721],"tr",{},[715,716,717],"th",{},"Rule",[715,719,720],{},"Default",[715,722,723],{},"What it shows",[725,726,727,743,757,775],"tbody",{},[712,728,729,735,740],{},[730,731,732],"td",{},[409,733,734],{},"mion\u002Ferror",[730,736,737],{},[409,738,739],{},"error",[730,741,742],{},"Every Error: no code was made, so the build stops. Also a tsconfig that does not load.",[712,744,745,750,754],{},[730,746,747],{},[409,748,749],{},"mion\u002Fruntime-error",[730,751,752],{},[409,753,739],{},[730,755,756],{},"Every RuntimeError: the code throws when called, or no longer checks what you asked for, so the build stops. The dev server keeps running.",[712,758,759,764,769],{},[730,760,761],{},[409,762,763],{},"mion\u002Fwarning",[730,765,766],{},[409,767,768],{},"warn",[730,770,771,772,693],{},"Every Warning, and every error you lowered, marked ",[409,773,774],{},"(downgraded)",[712,776,777,782,787],{},[730,778,779],{},[409,780,781],{},"mion\u002Finfo",[730,783,784],{},[409,785,786],{},"off",[730,788,789],{},"Every Info message: documented behaviour or advice.",[791,792,793],"tip",{},"Every app gets the same checks. You can turn a whole level off in your editor, but the build still stops on errors.",[414,795,797],{"id":796},"turning-off-one-error","Turning Off One Error",[405,799,800],{},"The lint config cannot turn off one check. This fails to load:",[425,802,807],{"className":803,"code":804,"filename":805,"language":806,"meta":431,"style":431},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"rules\": {\"mion\u002Fvalidate-symbol-root\": \"off\"}\n}\n",".oxlintrc.json","json",[409,808,809,814,847],{"__ignoreMap":431},[435,810,811],{"class":437,"line":438},[435,812,813],{"class":445},"{\n",[435,815,816,819,822,825,827,829,831,834,836,838,841,843,845],{"class":437,"line":472},[435,817,818],{"class":445},"  \"",[435,820,821],{"class":482},"rules",[435,823,824],{"class":445},"\"",[435,826,532],{"class":445},[435,828,446],{"class":445},[435,830,824],{"class":445},[435,832,833],{"class":535},"mion\u002Fvalidate-symbol-root",[435,835,824],{"class":445},[435,837,532],{"class":445},[435,839,840],{"class":445}," \"",[435,842,786],{"class":462},[435,844,824],{"class":445},[435,846,675],{"class":445},[435,848,849],{"class":437,"line":479},[435,850,675],{"class":445},[425,852,855],{"className":853,"code":854,"language":684,"meta":431},[682],"x Rule 'validate-symbol-root' not found in plugin 'mion'\n",[409,856,854],{"__ignoreMap":431},[405,858,859],{},"A lint disable comment only hides the error in your editor. The build still stops on validate-symbol-root:",[425,861,863],{"className":427,"code":862,"language":430,"meta":431,"style":431},"\u002F\u002F eslint-disable-next-line mion\u002Fruntime-error\nexport const isSymbol = createValidateFn\u003Csymbol>();\n",[409,864,865,870],{"__ignoreMap":431},[435,866,867],{"class":437,"line":438},[435,868,869],{"class":501},"\u002F\u002F eslint-disable-next-line mion\u002Fruntime-error\n",[435,871,872,874,876,878,880,882,884,886,888,890],{"class":437,"line":472},[435,873,508],{"class":441},[435,875,511],{"class":482},[435,877,599],{"class":449},[435,879,489],{"class":445},[435,881,604],{"class":519},[435,883,607],{"class":445},[435,885,610],{"class":535},[435,887,613],{"class":445},[435,889,616],{"class":449},[435,891,469],{"class":445},[405,893,894],{},"Use a comment the compiler reads instead. Your editor and your build both follow it:",[425,896,898],{"className":427,"code":897,"language":430,"meta":431,"style":431},"\u002F\u002F @mion-expect-error validate-symbol-root\nexport const isSymbol = createValidateFn\u003Csymbol>();\n",[409,899,900,905],{"__ignoreMap":431},[435,901,902],{"class":437,"line":438},[435,903,904],{"class":501},"\u002F\u002F @mion-expect-error validate-symbol-root\n",[435,906,907,909,911,913,915,917,919,921,923,925],{"class":437,"line":472},[435,908,508],{"class":441},[435,910,511],{"class":482},[435,912,599],{"class":449},[435,914,489],{"class":445},[435,916,604],{"class":519},[435,918,607],{"class":445},[435,920,610],{"class":535},[435,922,613],{"class":445},[435,924,616],{"class":449},[435,926,469],{"class":445},[405,928,929,930,933,934,936,937,940],{},"To lower one everywhere, list its name in ",[409,931,932],{},"downgradeErrors"," in your tsconfig. The linter reads it too, but not the build plugin's ",[409,935,932],{}," option. An Error, like marker-in-generic-function, can never be turned off: fix the code. ",[691,938,340],{"href":939},"\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels#disabling-errors"," shows every option.",[414,942,944],{"id":943},"lint-plugin-setup","Lint Plugin Setup",[405,946,947,948,950],{},"Extend the recommended config from ",[409,949,411],{}," to turn on the four rules at their defaults.",[422,952,953,1011],{},[425,954,956],{"className":803,"code":955,"filename":805,"language":806,"meta":431,"style":431},"{\n  \"$schema\": \".\u002Fnode_modules\u002Foxlint\u002Fconfiguration_schema.json\",\n  \"extends\": [\".\u002Fnode_modules\u002F@mionjs\u002Fdevtools\u002Foxlint-recommended.json\"]\n}\n",[409,957,958,962,983,1007],{"__ignoreMap":431},[435,959,960],{"class":437,"line":438},[435,961,813],{"class":445},[435,963,964,966,969,971,973,975,978,980],{"class":437,"line":472},[435,965,818],{"class":445},[435,967,968],{"class":482},"$schema",[435,970,824],{"class":445},[435,972,532],{"class":445},[435,974,840],{"class":445},[435,976,977],{"class":462},".\u002Fnode_modules\u002Foxlint\u002Fconfiguration_schema.json",[435,979,824],{"class":445},[435,981,982],{"class":445},",\n",[435,984,985,987,990,992,994,997,999,1002,1004],{"class":437,"line":479},[435,986,818],{"class":445},[435,988,989],{"class":482},"extends",[435,991,824],{"class":445},[435,993,532],{"class":445},[435,995,996],{"class":445}," [",[435,998,824],{"class":445},[435,1000,1001],{"class":462},".\u002Fnode_modules\u002F@mionjs\u002Fdevtools\u002Foxlint-recommended.json",[435,1003,824],{"class":445},[435,1005,1006],{"class":445},"]\n",[435,1008,1009],{"class":437,"line":498},[435,1010,675],{"class":445},[425,1012,1017],{"className":1013,"code":1014,"filename":1015,"language":1016,"meta":431,"style":431},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import mion from '@mionjs\u002Fdevtools\u002Feslint';\n\nexport default [mion.configs.recommended];\n","eslint.config.js","js",[409,1018,1019,1038,1042],{"__ignoreMap":431},[435,1020,1021,1023,1026,1029,1031,1034,1036],{"class":437,"line":438},[435,1022,442],{"class":441},[435,1024,1025],{"class":449}," mion ",[435,1027,1028],{"class":441},"from",[435,1030,459],{"class":445},[435,1032,1033],{"class":462},"@mionjs\u002Fdevtools\u002Feslint",[435,1035,466],{"class":445},[435,1037,469],{"class":445},[435,1039,1040],{"class":437,"line":472},[435,1041,476],{"emptyLinePlaceholder":475},[435,1043,1044,1046,1049,1052,1054,1057,1059,1062],{"class":437,"line":479},[435,1045,508],{"class":441},[435,1047,1048],{"class":441}," default",[435,1050,1051],{"class":449}," [mion",[435,1053,693],{"class":445},[435,1055,1056],{"class":449},"configs",[435,1058,693],{"class":445},[435,1060,1061],{"class":449},"recommended]",[435,1063,469],{"class":445},[414,1065,1067],{"id":1066},"showing-info-messages","Showing Info Messages",[405,1069,1070,1071,1073,1074,1077,1078,693],{},"Turn on ",[409,1072,781],{}," to see Info messages in your editor. The ",[409,1075,1076],{},"levels"," key in your tsconfig shows them in the ",[691,1079,1081],{"href":1080},"\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels#showing-info-messages","build",[422,1083,1084,1125],{},[425,1085,1087],{"className":803,"code":1086,"filename":805,"language":806,"meta":431,"style":431},"{\n  \"rules\": {\"mion\u002Finfo\": \"warn\"}\n}\n",[409,1088,1089,1093,1121],{"__ignoreMap":431},[435,1090,1091],{"class":437,"line":438},[435,1092,813],{"class":445},[435,1094,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119],{"class":437,"line":472},[435,1096,818],{"class":445},[435,1098,821],{"class":482},[435,1100,824],{"class":445},[435,1102,532],{"class":445},[435,1104,446],{"class":445},[435,1106,824],{"class":445},[435,1108,781],{"class":535},[435,1110,824],{"class":445},[435,1112,532],{"class":445},[435,1114,840],{"class":445},[435,1116,768],{"class":462},[435,1118,824],{"class":445},[435,1120,675],{"class":445},[435,1122,1123],{"class":437,"line":479},[435,1124,675],{"class":445},[425,1126,1128],{"className":1013,"code":1127,"filename":1015,"language":1016,"meta":431,"style":431},"export default [mion.configs.recommended, {rules: {'mion\u002Finfo': 'warn'}}];\n",[409,1129,1130],{"__ignoreMap":431},[435,1131,1132,1134,1136,1138,1140,1142,1144,1147,1150,1152,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1175,1178],{"class":437,"line":438},[435,1133,508],{"class":441},[435,1135,1048],{"class":441},[435,1137,1051],{"class":449},[435,1139,693],{"class":445},[435,1141,1056],{"class":449},[435,1143,693],{"class":445},[435,1145,1146],{"class":449},"recommended",[435,1148,1149],{"class":445},",",[435,1151,446],{"class":445},[435,1153,821],{"class":667},[435,1155,532],{"class":445},[435,1157,446],{"class":445},[435,1159,466],{"class":445},[435,1161,781],{"class":667},[435,1163,466],{"class":445},[435,1165,532],{"class":445},[435,1167,459],{"class":445},[435,1169,768],{"class":462},[435,1171,466],{"class":445},[435,1173,1174],{"class":445},"}}",[435,1176,1177],{"class":449},"]",[435,1179,469],{"class":445},[414,1181,1183],{"id":1182},"choosing-the-typescript-config","Choosing the TypeScript Config",[405,1185,1186,1187,1190,1191,1194,1195,1194,1198,1201],{},"The plugin reads your full project ",[409,1188,1189],{},"tsconfig.json",", so the linter checks types the way your build does: ",[409,1192,1193],{},"lib",", ",[409,1196,1197],{},"target",[409,1199,1200],{},"strict",", module resolution, custom conditions and path mappings all apply. By default it finds the config the way tsc does, searching upward from the directory the linter runs in. Point it at a different config with a setting:",[422,1203,1204,1260],{},[425,1205,1207],{"className":803,"code":1206,"filename":805,"language":806,"meta":431,"style":431},"{\n  \"settings\": {\"mion\": {\"tsconfig\": \"tsconfig.lint.json\"}}\n}\n",[409,1208,1209,1213,1256],{"__ignoreMap":431},[435,1210,1211],{"class":437,"line":438},[435,1212,813],{"class":445},[435,1214,1215,1217,1220,1222,1224,1226,1228,1231,1233,1235,1237,1239,1242,1244,1246,1248,1251,1253],{"class":437,"line":472},[435,1216,818],{"class":445},[435,1218,1219],{"class":482},"settings",[435,1221,824],{"class":445},[435,1223,532],{"class":445},[435,1225,446],{"class":445},[435,1227,824],{"class":445},[435,1229,1230],{"class":535},"mion",[435,1232,824],{"class":445},[435,1234,532],{"class":445},[435,1236,446],{"class":445},[435,1238,824],{"class":445},[435,1240,1241],{"class":492},"tsconfig",[435,1243,824],{"class":445},[435,1245,532],{"class":445},[435,1247,840],{"class":445},[435,1249,1250],{"class":462},"tsconfig.lint.json",[435,1252,824],{"class":445},[435,1254,1255],{"class":445},"}}\n",[435,1257,1258],{"class":437,"line":479},[435,1259,675],{"class":445},[425,1261,1263],{"className":1013,"code":1262,"filename":1015,"language":1016,"meta":431,"style":431},"export default [mion.configs.recommended, {settings: {mion: {tsconfig: 'tsconfig.lint.json'}}}];\n",[409,1264,1265],{"__ignoreMap":431},[435,1266,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1299,1301,1303,1305,1307,1310,1312],{"class":437,"line":438},[435,1268,508],{"class":441},[435,1270,1048],{"class":441},[435,1272,1051],{"class":449},[435,1274,693],{"class":445},[435,1276,1056],{"class":449},[435,1278,693],{"class":445},[435,1280,1146],{"class":449},[435,1282,1149],{"class":445},[435,1284,446],{"class":445},[435,1286,1219],{"class":667},[435,1288,532],{"class":445},[435,1290,446],{"class":445},[435,1292,1230],{"class":667},[435,1294,532],{"class":445},[435,1296,446],{"class":445},[435,1298,1241],{"class":667},[435,1300,532],{"class":445},[435,1302,459],{"class":445},[435,1304,1250],{"class":462},[435,1306,466],{"class":445},[435,1308,1309],{"class":445},"}}}",[435,1311,1177],{"class":449},[435,1313,469],{"class":445},[791,1315,1316,1317,1320],{},"A broken config is a ",[409,1318,1319],{},"config-tsconfig-not-loaded"," error. Fix it and the next lint pass picks it up.",[414,1322,1324],{"id":1323},"checking-from-the-cli","Checking from the CLI",[405,1326,1327],{},"The CLI reports the same errors, for CI jobs or scripts that do not run a node linter:",[425,1329,1333],{"className":1330,"code":1331,"language":1332,"meta":431,"style":431},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","mion compile --no-emit\nmion enrich src\u002F.mion\u002Fenriched\u002Ffriendly\u002Fsrc\u002Fmodels\u002Fuser.ts --no-emit --json\nmion enrich --no-emit --json\n","bash",[409,1334,1335,1345,1361],{"__ignoreMap":431},[435,1336,1337,1339,1342],{"class":437,"line":438},[435,1338,1230],{"class":535},[435,1340,1341],{"class":462}," compile",[435,1343,1344],{"class":462}," --no-emit\n",[435,1346,1347,1349,1352,1355,1358],{"class":437,"line":472},[435,1348,1230],{"class":535},[435,1350,1351],{"class":462}," enrich",[435,1353,1354],{"class":462}," src\u002F.mion\u002Fenriched\u002Ffriendly\u002Fsrc\u002Fmodels\u002Fuser.ts",[435,1356,1357],{"class":462}," --no-emit",[435,1359,1360],{"class":462}," --json\n",[435,1362,1363,1365,1367,1369],{"class":437,"line":479},[435,1364,1230],{"class":535},[435,1366,1351],{"class":462},[435,1368,1357],{"class":462},[435,1370,1360],{"class":462},[405,1372,1373,1376,1377,1380,1381,1384,1385,1388,1389,1391],{},[409,1374,1375],{},"compile --no-emit"," reports the build's marker and JSON round trip problems and writes nothing. ",[409,1378,1379],{},"enrich --no-emit"," on one file reports its tag, content and drift problems, and exits 1 on errors. Both hide Info messages unless your tsconfig sets ",[409,1382,1383],{},"levels: 'all'","; ",[409,1386,1387],{},"enrich --json"," keeps them. With a directory, or no path, ",[409,1390,1379],{}," checks the whole mirror directory for drift.",[405,1393,1394,1397,1398,1402,1403,1406,1407,1410],{},[409,1395,1396],{},"compile"," ",[691,1399,1401],{"href":1400},"\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels#grouping-messages","groups its messages by name",". Add ",[409,1404,1405],{},"--log-style lines"," for one line per message, the ",[409,1408,1409],{},"file(line,col): error name"," form CI tools read.",[1412,1413,1414],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":431,"searchDepth":472,"depth":472,"links":1416},[1417,1418,1419,1420,1421,1422,1423],{"id":416,"depth":472,"text":417},{"id":696,"depth":472,"text":697},{"id":796,"depth":472,"text":797},{"id":943,"depth":472,"text":944},{"id":1066,"depth":472,"text":1067},{"id":1182,"depth":472,"text":1183},{"id":1323,"depth":472,"text":1324},"The compiler checks your code and the lint plugin only shows its errors in your editor.","md",null,{"toc":475},{"title":262,"description":1424},"DKCQI-O41eQZke7qeUIap-jw9zPK8hno5xWVAy1eA0M",1793324365585]