[{"data":1,"prerenderedAt":4322},["ShallowReactive",2],{"navigation_docs":3,"-runtypes-guide-json-round-trip":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":56,"body":401,"description":4316,"extension":4317,"links":4318,"meta":4319,"navigation":509,"path":202,"seo":4320,"stem":203,"__hash__":4321},"docs\u002F02.runtypes\u002F02.guide\u002F04.json-round-trip.md",{"type":402,"value":403},"minimark",[404,435,572,587,592,595,1154,1163,1167,1170,1478,1513,1517,1533,1710,1713,1717,1724,2077,2137,2197,2204,2208,2214,2537,2543,2547,2558,2573,2580,2836,2840,2855,3117,3121,3132,3143,3507,3519,3523,3536,3554,3558,3570,4039,4076,4080,4090,4307,4312],[405,406,407,408,412,413,412,416,412,419,422,423,426,427,430,431,434],"p",{},"Any JavaScript data value you send over the wire comes back as the same value, including ",[409,410,411],"code",{},"bigint",", ",[409,414,415],{},"Date",[409,417,418],{},"URL",[409,420,421],{},"Map"," and ",[409,424,425],{},"Set",". ",[409,428,429],{},"createJsonEncoderFn\u003CT>()"," returns a function that turns a value into a JSON string. ",[409,432,433],{},"createJsonDecoderFn\u003CT>()"," returns a function that turns the string back into your type.",[436,437,442],"pre",{"className":438,"code":439,"language":440,"meta":441,"style":441},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const toJson = createJsonEncoderFn\u003COrder>();\nconst fromJson = createJsonDecoderFn\u003COrder>();\n\nconst json = toJson(order) as string;\n\u002F\u002F {\"id\":\"o-1\",\"total\":\"4999\",\"placedAt\":\"2024-05-01T10:00:00.000Z\",\"tags\":[\"gift\"]}\n\nconst fromJsonOrder = fromJson(json);\n\u002F\u002F total is a bigint, placedAt is a Date, tags is a Set\n","ts","",[409,443,444,481,504,511,536,543,548,566],{"__ignoreMap":441},[445,446,449,453,457,461,465,468,472,475,478],"span",{"class":447,"line":448},"line",1,[445,450,452],{"class":451},"spNyl","const",[445,454,456],{"class":455},"sTEyZ"," toJson ",[445,458,460],{"class":459},"sMK4o","=",[445,462,464],{"class":463},"s2Zo4"," createJsonEncoderFn",[445,466,467],{"class":459},"\u003C",[445,469,471],{"class":470},"sBMFI","Order",[445,473,474],{"class":459},">",[445,476,477],{"class":455},"()",[445,479,480],{"class":459},";\n",[445,482,484,486,489,491,494,496,498,500,502],{"class":447,"line":483},2,[445,485,452],{"class":451},[445,487,488],{"class":455}," fromJson ",[445,490,460],{"class":459},[445,492,493],{"class":463}," createJsonDecoderFn",[445,495,467],{"class":459},[445,497,471],{"class":470},[445,499,474],{"class":459},[445,501,477],{"class":455},[445,503,480],{"class":459},[445,505,507],{"class":447,"line":506},3,[445,508,510],{"emptyLinePlaceholder":509},true,"\n",[445,512,514,516,519,521,524,527,531,534],{"class":447,"line":513},4,[445,515,452],{"class":451},[445,517,518],{"class":455}," json ",[445,520,460],{"class":459},[445,522,523],{"class":463}," toJson",[445,525,526],{"class":455},"(order) ",[445,528,530],{"class":529},"s7zQu","as",[445,532,533],{"class":470}," string",[445,535,480],{"class":459},[445,537,539],{"class":447,"line":538},5,[445,540,542],{"class":541},"sHwdD","\u002F\u002F {\"id\":\"o-1\",\"total\":\"4999\",\"placedAt\":\"2024-05-01T10:00:00.000Z\",\"tags\":[\"gift\"]}\n",[445,544,546],{"class":447,"line":545},6,[445,547,510],{"emptyLinePlaceholder":509},[445,549,551,553,556,558,561,564],{"class":447,"line":550},7,[445,552,452],{"class":451},[445,554,555],{"class":455}," fromJsonOrder ",[445,557,460],{"class":459},[445,559,560],{"class":463}," fromJson",[445,562,563],{"class":455},"(json)",[445,565,480],{"class":459},[445,567,569],{"class":447,"line":568},8,[445,570,571],{"class":541},"\u002F\u002F total is a bigint, placedAt is a Date, tags is a Set\n",[573,574,575,576,412,578,412,580,582,583,586],"note",{},"The build only writes code for what JSON does not support directly, like ",[409,577,415],{},[409,579,411],{},[409,581,421],{}," or unions. When nothing needs converting, no code is written and the function is marked ",[409,584,585],{},"isNoop"," (no operation).",[588,589,591],"h2",{"id":590},"function-calls-over-the-wire","Function Calls Over the Wire",[405,593,594],{},"Any parameter or return value a function declares survives the JSON round trip. You can call a function on another machine with the same values you would pass locally.",[436,596,598],{"className":438,"code":597,"language":440,"meta":441,"style":441},"import {createJsonEncoderFn, createJsonDecoderFn} from '@mionjs\u002Frun-types';\n\n\u002F\u002F a function the client calls over the network\nfunction scheduleOrder(\n  total: bigint,\n  deliverOn: Date,\n  tags: Set\u003Cstring>\n): Map\u003Cstring, Date> {\n  return new Map([[`${total}-${[...tags].join()}`, deliverOn]]);\n}\ntype Params = Parameters\u003Ctypeof scheduleOrder>;\ntype Result = ReturnType\u003Ctypeof scheduleOrder>;\n\n\u002F\u002F client: encode the params\nconst encodeParams = createJsonEncoderFn\u003CParams>();\nconst body = encodeParams([\n  4999n,\n  new Date('2024-05-01T00:00:00.000Z'),\n  new Set(['gift']),\n]) as string;\n\u002F\u002F '[\"4999\",\"2024-05-01T00:00:00.000Z\",[\"gift\"]]'\n\n\u002F\u002F server: decode the params, same values as sent\nconst decodeParams = createJsonDecoderFn\u003CParams>();\nconst [total, deliverOn, tags] = decodeParams(body); \u002F\u002F bigint, Date, Set\u003Cstring>\nconst result = scheduleOrder(total, deliverOn, tags);\n\n\u002F\u002F the return value makes the same trip back\nconst encodeResult = createJsonEncoderFn\u003CResult>();\nconst decodeResult = createJsonDecoderFn\u003CResult>();\nconst received = decodeResult(encodeResult(result) as string); \u002F\u002F Map\u003Cstring, Date>\n\nexport {received};\n",[409,599,600,634,638,643,654,669,681,699,720,779,785,808,827,832,838,861,877,889,912,934,946,952,957,963,985,1021,1047,1052,1058,1081,1103,1135,1140],{"__ignoreMap":441},[445,601,602,605,608,611,614,616,619,622,625,629,632],{"class":447,"line":448},[445,603,604],{"class":529},"import",[445,606,607],{"class":459}," {",[445,609,610],{"class":455},"createJsonEncoderFn",[445,612,613],{"class":459},",",[445,615,493],{"class":455},[445,617,618],{"class":459},"}",[445,620,621],{"class":529}," from",[445,623,624],{"class":459}," '",[445,626,628],{"class":627},"sfazB","@mionjs\u002Frun-types",[445,630,631],{"class":459},"'",[445,633,480],{"class":459},[445,635,636],{"class":447,"line":483},[445,637,510],{"emptyLinePlaceholder":509},[445,639,640],{"class":447,"line":506},[445,641,642],{"class":541},"\u002F\u002F a function the client calls over the network\n",[445,644,645,648,651],{"class":447,"line":513},[445,646,647],{"class":451},"function",[445,649,650],{"class":463}," scheduleOrder",[445,652,653],{"class":459},"(\n",[445,655,656,660,663,666],{"class":447,"line":538},[445,657,659],{"class":658},"sHdIc","  total",[445,661,662],{"class":459},":",[445,664,665],{"class":470}," bigint",[445,667,668],{"class":459},",\n",[445,670,671,674,676,679],{"class":447,"line":545},[445,672,673],{"class":658},"  deliverOn",[445,675,662],{"class":459},[445,677,678],{"class":470}," Date",[445,680,668],{"class":459},[445,682,683,686,688,691,693,696],{"class":447,"line":550},[445,684,685],{"class":658},"  tags",[445,687,662],{"class":459},[445,689,690],{"class":470}," Set",[445,692,467],{"class":459},[445,694,695],{"class":470},"string",[445,697,698],{"class":459},">\n",[445,700,701,704,707,709,711,713,715,717],{"class":447,"line":568},[445,702,703],{"class":459},"):",[445,705,706],{"class":470}," Map",[445,708,467],{"class":459},[445,710,695],{"class":470},[445,712,613],{"class":459},[445,714,678],{"class":470},[445,716,474],{"class":459},[445,718,719],{"class":459}," {\n",[445,721,723,726,729,731,735,738,741,743,746,749,752,755,758,761,764,766,769,771,774,777],{"class":447,"line":722},9,[445,724,725],{"class":529},"  return",[445,727,728],{"class":459}," new",[445,730,706],{"class":463},[445,732,734],{"class":733},"swJcz","([[",[445,736,737],{"class":459},"`${",[445,739,740],{"class":455},"total",[445,742,618],{"class":459},[445,744,745],{"class":627},"-",[445,747,748],{"class":459},"${",[445,750,751],{"class":455},"[",[445,753,754],{"class":459},"...",[445,756,757],{"class":455},"tags]",[445,759,760],{"class":459},".",[445,762,763],{"class":463},"join",[445,765,477],{"class":455},[445,767,768],{"class":459},"}`",[445,770,613],{"class":459},[445,772,773],{"class":455}," deliverOn",[445,775,776],{"class":733},"]])",[445,778,480],{"class":459},[445,780,782],{"class":447,"line":781},10,[445,783,784],{"class":459},"}\n",[445,786,788,791,794,797,800,803,805],{"class":447,"line":787},11,[445,789,790],{"class":451},"type",[445,792,793],{"class":470}," Params",[445,795,796],{"class":459}," =",[445,798,799],{"class":470}," Parameters",[445,801,802],{"class":459},"\u003Ctypeof",[445,804,650],{"class":455},[445,806,807],{"class":459},">;\n",[445,809,811,813,816,818,821,823,825],{"class":447,"line":810},12,[445,812,790],{"class":451},[445,814,815],{"class":470}," Result",[445,817,796],{"class":459},[445,819,820],{"class":470}," ReturnType",[445,822,802],{"class":459},[445,824,650],{"class":455},[445,826,807],{"class":459},[445,828,830],{"class":447,"line":829},13,[445,831,510],{"emptyLinePlaceholder":509},[445,833,835],{"class":447,"line":834},14,[445,836,837],{"class":541},"\u002F\u002F client: encode the params\n",[445,839,841,843,846,848,850,852,855,857,859],{"class":447,"line":840},15,[445,842,452],{"class":451},[445,844,845],{"class":455}," encodeParams ",[445,847,460],{"class":459},[445,849,464],{"class":463},[445,851,467],{"class":459},[445,853,854],{"class":470},"Params",[445,856,474],{"class":459},[445,858,477],{"class":455},[445,860,480],{"class":459},[445,862,864,866,869,871,874],{"class":447,"line":863},16,[445,865,452],{"class":451},[445,867,868],{"class":455}," body ",[445,870,460],{"class":459},[445,872,873],{"class":463}," encodeParams",[445,875,876],{"class":455},"([\n",[445,878,880,884,887],{"class":447,"line":879},17,[445,881,883],{"class":882},"sbssI","  4999",[445,885,886],{"class":451},"n",[445,888,668],{"class":459},[445,890,892,895,897,900,902,905,907,910],{"class":447,"line":891},18,[445,893,894],{"class":459},"  new",[445,896,678],{"class":463},[445,898,899],{"class":455},"(",[445,901,631],{"class":459},[445,903,904],{"class":627},"2024-05-01T00:00:00.000Z",[445,906,631],{"class":459},[445,908,909],{"class":455},")",[445,911,668],{"class":459},[445,913,915,917,919,922,924,927,929,932],{"class":447,"line":914},19,[445,916,894],{"class":459},[445,918,690],{"class":463},[445,920,921],{"class":455},"([",[445,923,631],{"class":459},[445,925,926],{"class":627},"gift",[445,928,631],{"class":459},[445,930,931],{"class":455},"])",[445,933,668],{"class":459},[445,935,937,940,942,944],{"class":447,"line":936},20,[445,938,939],{"class":455},"]) ",[445,941,530],{"class":529},[445,943,533],{"class":470},[445,945,480],{"class":459},[445,947,949],{"class":447,"line":948},21,[445,950,951],{"class":541},"\u002F\u002F '[\"4999\",\"2024-05-01T00:00:00.000Z\",[\"gift\"]]'\n",[445,953,955],{"class":447,"line":954},22,[445,956,510],{"emptyLinePlaceholder":509},[445,958,960],{"class":447,"line":959},23,[445,961,962],{"class":541},"\u002F\u002F server: decode the params, same values as sent\n",[445,964,966,968,971,973,975,977,979,981,983],{"class":447,"line":965},24,[445,967,452],{"class":451},[445,969,970],{"class":455}," decodeParams ",[445,972,460],{"class":459},[445,974,493],{"class":463},[445,976,467],{"class":459},[445,978,854],{"class":470},[445,980,474],{"class":459},[445,982,477],{"class":455},[445,984,480],{"class":459},[445,986,988,990,993,995,997,999,1001,1004,1007,1009,1012,1015,1018],{"class":447,"line":987},25,[445,989,452],{"class":451},[445,991,992],{"class":459}," [",[445,994,740],{"class":455},[445,996,613],{"class":459},[445,998,773],{"class":455},[445,1000,613],{"class":459},[445,1002,1003],{"class":455}," tags",[445,1005,1006],{"class":459},"]",[445,1008,796],{"class":459},[445,1010,1011],{"class":463}," decodeParams",[445,1013,1014],{"class":455},"(body)",[445,1016,1017],{"class":459},";",[445,1019,1020],{"class":541}," \u002F\u002F bigint, Date, Set\u003Cstring>\n",[445,1022,1024,1026,1029,1031,1033,1036,1038,1040,1042,1045],{"class":447,"line":1023},26,[445,1025,452],{"class":451},[445,1027,1028],{"class":455}," result ",[445,1030,460],{"class":459},[445,1032,650],{"class":463},[445,1034,1035],{"class":455},"(total",[445,1037,613],{"class":459},[445,1039,773],{"class":455},[445,1041,613],{"class":459},[445,1043,1044],{"class":455}," tags)",[445,1046,480],{"class":459},[445,1048,1050],{"class":447,"line":1049},27,[445,1051,510],{"emptyLinePlaceholder":509},[445,1053,1055],{"class":447,"line":1054},28,[445,1056,1057],{"class":541},"\u002F\u002F the return value makes the same trip back\n",[445,1059,1061,1063,1066,1068,1070,1072,1075,1077,1079],{"class":447,"line":1060},29,[445,1062,452],{"class":451},[445,1064,1065],{"class":455}," encodeResult ",[445,1067,460],{"class":459},[445,1069,464],{"class":463},[445,1071,467],{"class":459},[445,1073,1074],{"class":470},"Result",[445,1076,474],{"class":459},[445,1078,477],{"class":455},[445,1080,480],{"class":459},[445,1082,1084,1086,1089,1091,1093,1095,1097,1099,1101],{"class":447,"line":1083},30,[445,1085,452],{"class":451},[445,1087,1088],{"class":455}," decodeResult ",[445,1090,460],{"class":459},[445,1092,493],{"class":463},[445,1094,467],{"class":459},[445,1096,1074],{"class":470},[445,1098,474],{"class":459},[445,1100,477],{"class":455},[445,1102,480],{"class":459},[445,1104,1106,1108,1111,1113,1116,1118,1121,1124,1126,1128,1130,1132],{"class":447,"line":1105},31,[445,1107,452],{"class":451},[445,1109,1110],{"class":455}," received ",[445,1112,460],{"class":459},[445,1114,1115],{"class":463}," decodeResult",[445,1117,899],{"class":455},[445,1119,1120],{"class":463},"encodeResult",[445,1122,1123],{"class":455},"(result) ",[445,1125,530],{"class":529},[445,1127,533],{"class":470},[445,1129,909],{"class":455},[445,1131,1017],{"class":459},[445,1133,1134],{"class":541}," \u002F\u002F Map\u003Cstring, Date>\n",[445,1136,1138],{"class":447,"line":1137},32,[445,1139,510],{"emptyLinePlaceholder":509},[445,1141,1143,1146,1148,1151],{"class":447,"line":1142},33,[445,1144,1145],{"class":529},"export",[445,1147,607],{"class":459},[445,1149,1150],{"class":455},"received",[445,1152,1153],{"class":459},"};\n",[1155,1156,1157,1158,1162],"tip",{},"This is how ",[1159,1160,1161],"a",{"href":7},"mion RPC"," sends the params and return value your routes declare, with no schema to write.",[588,1164,1166],{"id":1165},"what-the-json-looks-like","What the JSON Looks Like",[405,1168,1169],{},"Types that JSON supports stay as they are. The others become strings or arrays, and the decoder converts them back.",[436,1171,1173],{"className":438,"code":1172,"language":440,"meta":441,"style":441},"interface Meetup {\n  id: bigint;\n  startsAt: Date;\n  guests: Map\u003Cstring, number>;\n  tags: Set\u003Cstring>;\n  site: URL;\n  slot: [string, string?];\n  note?: string;\n}\n\nconst encodeMeetup = createJsonEncoderFn\u003CMeetup>();\n\nencodeMeetup({\n  id: 42n,\n  startsAt: new Date('2024-05-01T10:00:00.000Z'),\n  guests: new Map([['ana', 2]]),\n  tags: new Set(['work']),\n  site: new URL('https:\u002F\u002Fexample.com\u002Fmeetup'),\n  slot: ['am', undefined],\n});\n\u002F\u002F {\"id\":\"42\",\"startsAt\":\"2024-05-01T10:00:00.000Z\",\"guests\":[[\"ana\",2]],\"tags\":[\"work\"],\"site\":\"https:\u002F\u002Fexample.com\u002Fmeetup\",\"slot\":[\"am\",null]}\n",[409,1174,1175,1185,1196,1207,1227,1241,1253,1275,1287,1291,1295,1317,1321,1331,1344,1367,1395,1418,1441,1465,1473],{"__ignoreMap":441},[445,1176,1177,1180,1183],{"class":447,"line":448},[445,1178,1179],{"class":451},"interface",[445,1181,1182],{"class":470}," Meetup",[445,1184,719],{"class":459},[445,1186,1187,1190,1192,1194],{"class":447,"line":483},[445,1188,1189],{"class":733},"  id",[445,1191,662],{"class":459},[445,1193,665],{"class":470},[445,1195,480],{"class":459},[445,1197,1198,1201,1203,1205],{"class":447,"line":506},[445,1199,1200],{"class":733},"  startsAt",[445,1202,662],{"class":459},[445,1204,678],{"class":470},[445,1206,480],{"class":459},[445,1208,1209,1212,1214,1216,1218,1220,1222,1225],{"class":447,"line":513},[445,1210,1211],{"class":733},"  guests",[445,1213,662],{"class":459},[445,1215,706],{"class":470},[445,1217,467],{"class":459},[445,1219,695],{"class":470},[445,1221,613],{"class":459},[445,1223,1224],{"class":470}," number",[445,1226,807],{"class":459},[445,1228,1229,1231,1233,1235,1237,1239],{"class":447,"line":538},[445,1230,685],{"class":733},[445,1232,662],{"class":459},[445,1234,690],{"class":470},[445,1236,467],{"class":459},[445,1238,695],{"class":470},[445,1240,807],{"class":459},[445,1242,1243,1246,1248,1251],{"class":447,"line":545},[445,1244,1245],{"class":733},"  site",[445,1247,662],{"class":459},[445,1249,1250],{"class":470}," URL",[445,1252,480],{"class":459},[445,1254,1255,1258,1260,1262,1264,1266,1268,1271,1273],{"class":447,"line":550},[445,1256,1257],{"class":733},"  slot",[445,1259,662],{"class":459},[445,1261,992],{"class":455},[445,1263,695],{"class":470},[445,1265,613],{"class":459},[445,1267,533],{"class":470},[445,1269,1270],{"class":459},"?",[445,1272,1006],{"class":455},[445,1274,480],{"class":459},[445,1276,1277,1280,1283,1285],{"class":447,"line":568},[445,1278,1279],{"class":733},"  note",[445,1281,1282],{"class":459},"?:",[445,1284,533],{"class":470},[445,1286,480],{"class":459},[445,1288,1289],{"class":447,"line":722},[445,1290,784],{"class":459},[445,1292,1293],{"class":447,"line":781},[445,1294,510],{"emptyLinePlaceholder":509},[445,1296,1297,1299,1302,1304,1306,1308,1311,1313,1315],{"class":447,"line":787},[445,1298,452],{"class":451},[445,1300,1301],{"class":455}," encodeMeetup ",[445,1303,460],{"class":459},[445,1305,464],{"class":463},[445,1307,467],{"class":459},[445,1309,1310],{"class":470},"Meetup",[445,1312,474],{"class":459},[445,1314,477],{"class":455},[445,1316,480],{"class":459},[445,1318,1319],{"class":447,"line":810},[445,1320,510],{"emptyLinePlaceholder":509},[445,1322,1323,1326,1328],{"class":447,"line":829},[445,1324,1325],{"class":463},"encodeMeetup",[445,1327,899],{"class":455},[445,1329,1330],{"class":459},"{\n",[445,1332,1333,1335,1337,1340,1342],{"class":447,"line":834},[445,1334,1189],{"class":733},[445,1336,662],{"class":459},[445,1338,1339],{"class":882}," 42",[445,1341,886],{"class":451},[445,1343,668],{"class":459},[445,1345,1346,1348,1350,1352,1354,1356,1358,1361,1363,1365],{"class":447,"line":840},[445,1347,1200],{"class":733},[445,1349,662],{"class":459},[445,1351,728],{"class":459},[445,1353,678],{"class":463},[445,1355,899],{"class":455},[445,1357,631],{"class":459},[445,1359,1360],{"class":627},"2024-05-01T10:00:00.000Z",[445,1362,631],{"class":459},[445,1364,909],{"class":455},[445,1366,668],{"class":459},[445,1368,1369,1371,1373,1375,1377,1379,1381,1384,1386,1388,1391,1393],{"class":447,"line":863},[445,1370,1211],{"class":733},[445,1372,662],{"class":459},[445,1374,728],{"class":459},[445,1376,706],{"class":463},[445,1378,734],{"class":455},[445,1380,631],{"class":459},[445,1382,1383],{"class":627},"ana",[445,1385,631],{"class":459},[445,1387,613],{"class":459},[445,1389,1390],{"class":882}," 2",[445,1392,776],{"class":455},[445,1394,668],{"class":459},[445,1396,1397,1399,1401,1403,1405,1407,1409,1412,1414,1416],{"class":447,"line":879},[445,1398,685],{"class":733},[445,1400,662],{"class":459},[445,1402,728],{"class":459},[445,1404,690],{"class":463},[445,1406,921],{"class":455},[445,1408,631],{"class":459},[445,1410,1411],{"class":627},"work",[445,1413,631],{"class":459},[445,1415,931],{"class":455},[445,1417,668],{"class":459},[445,1419,1420,1422,1424,1426,1428,1430,1432,1435,1437,1439],{"class":447,"line":891},[445,1421,1245],{"class":733},[445,1423,662],{"class":459},[445,1425,728],{"class":459},[445,1427,1250],{"class":463},[445,1429,899],{"class":455},[445,1431,631],{"class":459},[445,1433,1434],{"class":627},"https:\u002F\u002Fexample.com\u002Fmeetup",[445,1436,631],{"class":459},[445,1438,909],{"class":455},[445,1440,668],{"class":459},[445,1442,1443,1445,1447,1449,1451,1454,1456,1458,1461,1463],{"class":447,"line":914},[445,1444,1257],{"class":733},[445,1446,662],{"class":459},[445,1448,992],{"class":455},[445,1450,631],{"class":459},[445,1452,1453],{"class":627},"am",[445,1455,631],{"class":459},[445,1457,613],{"class":459},[445,1459,1460],{"class":459}," undefined",[445,1462,1006],{"class":455},[445,1464,668],{"class":459},[445,1466,1467,1469,1471],{"class":447,"line":936},[445,1468,618],{"class":459},[445,1470,909],{"class":455},[445,1472,480],{"class":459},[445,1474,1475],{"class":447,"line":948},[445,1476,1477],{"class":541},"\u002F\u002F {\"id\":\"42\",\"startsAt\":\"2024-05-01T10:00:00.000Z\",\"guests\":[[\"ana\",2]],\"tags\":[\"work\"],\"site\":\"https:\u002F\u002Fexample.com\u002Fmeetup\",\"slot\":[\"am\",null]}\n",[1479,1480,1481,1485,1495],"ul",{},[1482,1483,1484],"li",{},"A missing optional property stays missing.",[1482,1486,1487,1490,1491,1494],{},[409,1488,1489],{},"undefined"," in an array or tuple becomes ",[409,1492,1493],{},"null",", so the positions stay the same.",[1482,1496,1497,412,1500,422,1503,1506,1507,1509,1510,760],{},[409,1498,1499],{},"NaN",[409,1501,1502],{},"Infinity",[409,1504,1505],{},"-Infinity"," become ",[409,1508,1493],{},", as with ",[409,1511,1512],{},"JSON.stringify",[588,1514,1516],{"id":1515},"union-encoding","Union Encoding",[405,1518,1519,1520,1522,1523,1525,1526,1528,1529,1532],{},"A union whose members are all plain JSON (strings, numbers, booleans, ",[409,1521,1493],{},") stays as it is. When a member needs converting, like a ",[409,1524,415],{}," or a ",[409,1527,411],{},", the value is written as ",[409,1530,1531],{},"[index, value]",". The index tells the decoder which member to rebuild.",[436,1534,1536],{"className":438,"code":1535,"language":440,"meta":441,"style":441},"interface Setting {\n  level: number | null; \u002F\u002F every member is plain JSON\n  expires: Date | string; \u002F\u002F Date is not plain JSON\n}\n\nconst encodeSetting = createJsonEncoderFn\u003CSetting>();\n\nencodeSetting({level: null, expires: new Date('2024-05-01T10:00:00.000Z')});\n\u002F\u002F {\"level\":null,\"expires\":[1,\"2024-05-01T10:00:00.000Z\"]}\n\nencodeSetting({level: 3, expires: 'never'});\n\u002F\u002F {\"level\":3,\"expires\":[0,\"never\"]}\n",[409,1537,1538,1547,1567,1585,1589,1593,1615,1619,1662,1667,1671,1705],{"__ignoreMap":441},[445,1539,1540,1542,1545],{"class":447,"line":448},[445,1541,1179],{"class":451},[445,1543,1544],{"class":470}," Setting",[445,1546,719],{"class":459},[445,1548,1549,1552,1554,1556,1559,1562,1564],{"class":447,"line":483},[445,1550,1551],{"class":733},"  level",[445,1553,662],{"class":459},[445,1555,1224],{"class":470},[445,1557,1558],{"class":459}," |",[445,1560,1561],{"class":470}," null",[445,1563,1017],{"class":459},[445,1565,1566],{"class":541}," \u002F\u002F every member is plain JSON\n",[445,1568,1569,1572,1574,1576,1578,1580,1582],{"class":447,"line":506},[445,1570,1571],{"class":733},"  expires",[445,1573,662],{"class":459},[445,1575,678],{"class":470},[445,1577,1558],{"class":459},[445,1579,533],{"class":470},[445,1581,1017],{"class":459},[445,1583,1584],{"class":541}," \u002F\u002F Date is not plain JSON\n",[445,1586,1587],{"class":447,"line":513},[445,1588,784],{"class":459},[445,1590,1591],{"class":447,"line":538},[445,1592,510],{"emptyLinePlaceholder":509},[445,1594,1595,1597,1600,1602,1604,1606,1609,1611,1613],{"class":447,"line":545},[445,1596,452],{"class":451},[445,1598,1599],{"class":455}," encodeSetting ",[445,1601,460],{"class":459},[445,1603,464],{"class":463},[445,1605,467],{"class":459},[445,1607,1608],{"class":470},"Setting",[445,1610,474],{"class":459},[445,1612,477],{"class":455},[445,1614,480],{"class":459},[445,1616,1617],{"class":447,"line":550},[445,1618,510],{"emptyLinePlaceholder":509},[445,1620,1621,1624,1626,1629,1632,1634,1637,1640,1642,1644,1646,1648,1650,1652,1654,1656,1658,1660],{"class":447,"line":568},[445,1622,1623],{"class":463},"encodeSetting",[445,1625,899],{"class":455},[445,1627,1628],{"class":459},"{",[445,1630,1631],{"class":733},"level",[445,1633,662],{"class":459},[445,1635,1636],{"class":459}," null,",[445,1638,1639],{"class":733}," expires",[445,1641,662],{"class":459},[445,1643,728],{"class":459},[445,1645,678],{"class":463},[445,1647,899],{"class":455},[445,1649,631],{"class":459},[445,1651,1360],{"class":627},[445,1653,631],{"class":459},[445,1655,909],{"class":455},[445,1657,618],{"class":459},[445,1659,909],{"class":455},[445,1661,480],{"class":459},[445,1663,1664],{"class":447,"line":722},[445,1665,1666],{"class":541},"\u002F\u002F {\"level\":null,\"expires\":[1,\"2024-05-01T10:00:00.000Z\"]}\n",[445,1668,1669],{"class":447,"line":781},[445,1670,510],{"emptyLinePlaceholder":509},[445,1672,1673,1675,1677,1679,1681,1683,1686,1688,1690,1692,1694,1697,1699,1701,1703],{"class":447,"line":787},[445,1674,1623],{"class":463},[445,1676,899],{"class":455},[445,1678,1628],{"class":459},[445,1680,1631],{"class":733},[445,1682,662],{"class":459},[445,1684,1685],{"class":882}," 3",[445,1687,613],{"class":459},[445,1689,1639],{"class":733},[445,1691,662],{"class":459},[445,1693,624],{"class":459},[445,1695,1696],{"class":627},"never",[445,1698,631],{"class":459},[445,1700,618],{"class":459},[445,1702,909],{"class":455},[445,1704,480],{"class":459},[445,1706,1707],{"class":447,"line":810},[445,1708,1709],{"class":541},"\u002F\u002F {\"level\":3,\"expires\":[0,\"never\"]}\n",[1155,1711,1712],{},"Only a RunTypes decoder for the same type can read the index. If another tool reads your JSON, keep union members to plain JSON values.",[588,1714,1716],{"id":1715},"json-strategies","JSON Strategies",[405,1718,1719,1720,1723],{},"The ",[409,1721,1722],{},"strategy"," option sets what happens to properties your type does not declare. Use the same one on the encoder and the decoder.",[436,1725,1727],{"className":438,"code":1726,"language":440,"meta":441,"style":441},"const encodeClone = createJsonEncoderFn\u003CItem>(); \u002F\u002F same as {strategy: 'clone'}\nencodeClone(item); \u002F\u002F {\"name\":\"pen\",\"price\":\"5\"}   item is unchanged\n\nconst encodeCompact = createJsonEncoderFn\u003CItem>(undefined, {\n  strategy: 'compact',\n});\nencodeCompact(item); \u002F\u002F [\"pen\",\"5\"]   item is unchanged\n\nconst encodeMutate = createJsonEncoderFn\u003CItem>(undefined, {strategy: 'mutate'});\nencodeMutate(item); \u002F\u002F {\"name\":\"pen\",\"price\":\"5\",\"internalNote\":\"do not send\"}   item.price is now '5'\n\nconst body = '{\"name\":\"pen\",\"price\":\"5\",\"isAdmin\":true}';\n\nconst decodeClone = createJsonDecoderFn\u003CItem>(); \u002F\u002F same as {strategy: 'clone'}\ndecodeClone(body); \u002F\u002F {name: 'pen', price: 5n}\n\nconst decodeMutate = createJsonDecoderFn\u003CItem>(undefined, {\n  strategy: 'mutate',\n});\ndecodeMutate(body); \u002F\u002F {name: 'pen', price: 5n, isAdmin: true}\n\nconst decodeCompact = createJsonDecoderFn\u003CItem>(undefined, {\n  strategy: 'compact',\n});\ndecodeCompact('[\"pen\",\"5\"]'); \u002F\u002F {name: 'pen', price: 5n}\n",[409,1728,1729,1754,1767,1771,1795,1811,1819,1831,1835,1875,1887,1891,1908,1912,1935,1947,1951,1974,1988,1996,2008,2012,2035,2049,2057],{"__ignoreMap":441},[445,1730,1731,1733,1736,1738,1740,1742,1745,1747,1749,1751],{"class":447,"line":448},[445,1732,452],{"class":451},[445,1734,1735],{"class":455}," encodeClone ",[445,1737,460],{"class":459},[445,1739,464],{"class":463},[445,1741,467],{"class":459},[445,1743,1744],{"class":470},"Item",[445,1746,474],{"class":459},[445,1748,477],{"class":455},[445,1750,1017],{"class":459},[445,1752,1753],{"class":541}," \u002F\u002F same as {strategy: 'clone'}\n",[445,1755,1756,1759,1762,1764],{"class":447,"line":483},[445,1757,1758],{"class":463},"encodeClone",[445,1760,1761],{"class":455},"(item)",[445,1763,1017],{"class":459},[445,1765,1766],{"class":541}," \u002F\u002F {\"name\":\"pen\",\"price\":\"5\"}   item is unchanged\n",[445,1768,1769],{"class":447,"line":506},[445,1770,510],{"emptyLinePlaceholder":509},[445,1772,1773,1775,1778,1780,1782,1784,1786,1788,1790,1793],{"class":447,"line":513},[445,1774,452],{"class":451},[445,1776,1777],{"class":455}," encodeCompact ",[445,1779,460],{"class":459},[445,1781,464],{"class":463},[445,1783,467],{"class":459},[445,1785,1744],{"class":470},[445,1787,474],{"class":459},[445,1789,899],{"class":455},[445,1791,1792],{"class":459},"undefined,",[445,1794,719],{"class":459},[445,1796,1797,1800,1802,1804,1807,1809],{"class":447,"line":538},[445,1798,1799],{"class":733},"  strategy",[445,1801,662],{"class":459},[445,1803,624],{"class":459},[445,1805,1806],{"class":627},"compact",[445,1808,631],{"class":459},[445,1810,668],{"class":459},[445,1812,1813,1815,1817],{"class":447,"line":545},[445,1814,618],{"class":459},[445,1816,909],{"class":455},[445,1818,480],{"class":459},[445,1820,1821,1824,1826,1828],{"class":447,"line":550},[445,1822,1823],{"class":463},"encodeCompact",[445,1825,1761],{"class":455},[445,1827,1017],{"class":459},[445,1829,1830],{"class":541}," \u002F\u002F [\"pen\",\"5\"]   item is unchanged\n",[445,1832,1833],{"class":447,"line":568},[445,1834,510],{"emptyLinePlaceholder":509},[445,1836,1837,1839,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864,1867,1869,1871,1873],{"class":447,"line":722},[445,1838,452],{"class":451},[445,1840,1841],{"class":455}," encodeMutate ",[445,1843,460],{"class":459},[445,1845,464],{"class":463},[445,1847,467],{"class":459},[445,1849,1744],{"class":470},[445,1851,474],{"class":459},[445,1853,899],{"class":455},[445,1855,1792],{"class":459},[445,1857,607],{"class":459},[445,1859,1722],{"class":733},[445,1861,662],{"class":459},[445,1863,624],{"class":459},[445,1865,1866],{"class":627},"mutate",[445,1868,631],{"class":459},[445,1870,618],{"class":459},[445,1872,909],{"class":455},[445,1874,480],{"class":459},[445,1876,1877,1880,1882,1884],{"class":447,"line":781},[445,1878,1879],{"class":463},"encodeMutate",[445,1881,1761],{"class":455},[445,1883,1017],{"class":459},[445,1885,1886],{"class":541}," \u002F\u002F {\"name\":\"pen\",\"price\":\"5\",\"internalNote\":\"do not send\"}   item.price is now '5'\n",[445,1888,1889],{"class":447,"line":787},[445,1890,510],{"emptyLinePlaceholder":509},[445,1892,1893,1895,1897,1899,1901,1904,1906],{"class":447,"line":810},[445,1894,452],{"class":451},[445,1896,868],{"class":455},[445,1898,460],{"class":459},[445,1900,624],{"class":459},[445,1902,1903],{"class":627},"{\"name\":\"pen\",\"price\":\"5\",\"isAdmin\":true}",[445,1905,631],{"class":459},[445,1907,480],{"class":459},[445,1909,1910],{"class":447,"line":829},[445,1911,510],{"emptyLinePlaceholder":509},[445,1913,1914,1916,1919,1921,1923,1925,1927,1929,1931,1933],{"class":447,"line":834},[445,1915,452],{"class":451},[445,1917,1918],{"class":455}," decodeClone ",[445,1920,460],{"class":459},[445,1922,493],{"class":463},[445,1924,467],{"class":459},[445,1926,1744],{"class":470},[445,1928,474],{"class":459},[445,1930,477],{"class":455},[445,1932,1017],{"class":459},[445,1934,1753],{"class":541},[445,1936,1937,1940,1942,1944],{"class":447,"line":840},[445,1938,1939],{"class":463},"decodeClone",[445,1941,1014],{"class":455},[445,1943,1017],{"class":459},[445,1945,1946],{"class":541}," \u002F\u002F {name: 'pen', price: 5n}\n",[445,1948,1949],{"class":447,"line":863},[445,1950,510],{"emptyLinePlaceholder":509},[445,1952,1953,1955,1958,1960,1962,1964,1966,1968,1970,1972],{"class":447,"line":879},[445,1954,452],{"class":451},[445,1956,1957],{"class":455}," decodeMutate ",[445,1959,460],{"class":459},[445,1961,493],{"class":463},[445,1963,467],{"class":459},[445,1965,1744],{"class":470},[445,1967,474],{"class":459},[445,1969,899],{"class":455},[445,1971,1792],{"class":459},[445,1973,719],{"class":459},[445,1975,1976,1978,1980,1982,1984,1986],{"class":447,"line":891},[445,1977,1799],{"class":733},[445,1979,662],{"class":459},[445,1981,624],{"class":459},[445,1983,1866],{"class":627},[445,1985,631],{"class":459},[445,1987,668],{"class":459},[445,1989,1990,1992,1994],{"class":447,"line":914},[445,1991,618],{"class":459},[445,1993,909],{"class":455},[445,1995,480],{"class":459},[445,1997,1998,2001,2003,2005],{"class":447,"line":936},[445,1999,2000],{"class":463},"decodeMutate",[445,2002,1014],{"class":455},[445,2004,1017],{"class":459},[445,2006,2007],{"class":541}," \u002F\u002F {name: 'pen', price: 5n, isAdmin: true}\n",[445,2009,2010],{"class":447,"line":948},[445,2011,510],{"emptyLinePlaceholder":509},[445,2013,2014,2016,2019,2021,2023,2025,2027,2029,2031,2033],{"class":447,"line":954},[445,2015,452],{"class":451},[445,2017,2018],{"class":455}," decodeCompact ",[445,2020,460],{"class":459},[445,2022,493],{"class":463},[445,2024,467],{"class":459},[445,2026,1744],{"class":470},[445,2028,474],{"class":459},[445,2030,899],{"class":455},[445,2032,1792],{"class":459},[445,2034,719],{"class":459},[445,2036,2037,2039,2041,2043,2045,2047],{"class":447,"line":959},[445,2038,1799],{"class":733},[445,2040,662],{"class":459},[445,2042,624],{"class":459},[445,2044,1806],{"class":627},[445,2046,631],{"class":459},[445,2048,668],{"class":459},[445,2050,2051,2053,2055],{"class":447,"line":965},[445,2052,618],{"class":459},[445,2054,909],{"class":455},[445,2056,480],{"class":459},[445,2058,2059,2062,2064,2066,2069,2071,2073,2075],{"class":447,"line":987},[445,2060,2061],{"class":463},"decodeCompact",[445,2063,899],{"class":455},[445,2065,631],{"class":459},[445,2067,2068],{"class":627},"[\"pen\",\"5\"]",[445,2070,631],{"class":459},[445,2072,909],{"class":455},[445,2074,1017],{"class":459},[445,2076,1946],{"class":541},[2078,2079,2080,2096],"table",{},[2081,2082,2083],"thead",{},[2084,2085,2086,2090,2093],"tr",{},[2087,2088,2089],"th",{},"Strategy",[2087,2091,2092],{},"Undeclared properties",[2087,2094,2095],{},"Changes your value",[2097,2098,2099,2114,2126],"tbody",{},[2084,2100,2101,2108,2111],{},[2102,2103,2104,2107],"td",{},[409,2105,2106],{},"clone"," (default)",[2102,2109,2110],{},"dropped",[2102,2112,2113],{},"no, builds a new value",[2084,2115,2116,2120,2123],{},[2102,2117,2118],{},[409,2119,1866],{},[2102,2121,2122],{},"kept",[2102,2124,2125],{},"yes, converted in place",[2084,2127,2128,2132,2134],{},[2102,2129,2130],{},[409,2131,1806],{},[2102,2133,2110],{},[2102,2135,2136],{},"no",[1479,2138,2139,2151,2156,2190],{},[1482,2140,2141,2142,2144,2145,2147,2148,2150],{},"With ",[409,2143,1866],{},", an undeclared property goes to ",[409,2146,1512],{}," untouched. An undeclared ",[409,2149,411],{}," makes it throw.",[1482,2152,2153,2155],{},[409,2154,1806],{}," writes each object as a smaller array of its values, in the order your type declares them.",[1482,2157,2141,2158,2160,2161,412,2164,2166,2167,2170,2171,2174,2175,2177,2178,2166,2181,2184,2185,2187,2188,760],{},[409,2159,1806],{},", a missing optional property is written as the first of ",[409,2162,2163],{},"0",[409,2165,1493],{}," or ",[409,2168,2169],{},"false"," its type cannot hold. So ",[409,2172,2173],{},"s?: string | null"," keeps a present ",[409,2176,1493],{},". An optional that can hold all three, like ",[409,2179,2180],{},"any",[409,2182,2183],{},"unknown",", decodes a present ",[409,2186,1493],{}," as ",[409,2189,1489],{},[1482,2191,2141,2192,2194,2195,760],{},[409,2193,1806],{},", a union of objects is written as one array holding every member's properties. Each value is wrapped with its member index only when another member is not a plain string, number, boolean or ",[409,2196,1493],{},[1155,2198,2199,2200,2203],{},"Write the options as a literal object in the call, ",[409,2201,2202],{},"rejectCircularRefs"," included. A variable is ignored and the defaults apply.",[588,2205,2207],{"id":2206},"checking-decoded-data","Checking Decoded Data",[405,2209,2210,2211,760],{},"Decoders do not validate. They convert what they find and trust the shape. For data from outside your app, validate the decoded value with ",[409,2212,2213],{},"createValidateFn\u003CT>()",[436,2215,2217],{"className":438,"code":2216,"language":440,"meta":441,"style":441},"import {\n  createJsonDecoderFn,\n  createValidateFn,\n  createGetValidationErrorsFn,\n} from '@mionjs\u002Frun-types';\n\ninterface User {\n  id: string;\n  createdAt: Date;\n}\n\nconst decodeUser = createJsonDecoderFn\u003CUser>();\nconst isUser = createValidateFn\u003CUser>();\nconst getUserErrors = createGetValidationErrorsFn\u003CUser>();\n\nexport function readUser(body: string) {\n  const user = decodeUser(body);\n  if (!isUser(user))\n    throw new Error(`Invalid user: ${JSON.stringify(getUserErrors(user))}`);\n  return user;\n}\n\nreadUser('{\"id\":\"u1\",\"createdAt\":\"2024-05-01T10:00:00.000Z\"}'); \u002F\u002F ok, createdAt is a Date\nreadUser('{\"id\":\"u1\",\"createdAt\":\"yesterday\"}'); \u002F\u002F throws, createdAt is an invalid Date\n",[409,2218,2219,2225,2232,2239,2246,2260,2264,2273,2283,2294,2298,2302,2324,2346,2368,2372,2395,2416,2438,2480,2488,2492,2496,2517],{"__ignoreMap":441},[445,2220,2221,2223],{"class":447,"line":448},[445,2222,604],{"class":529},[445,2224,719],{"class":459},[445,2226,2227,2230],{"class":447,"line":483},[445,2228,2229],{"class":455},"  createJsonDecoderFn",[445,2231,668],{"class":459},[445,2233,2234,2237],{"class":447,"line":506},[445,2235,2236],{"class":455},"  createValidateFn",[445,2238,668],{"class":459},[445,2240,2241,2244],{"class":447,"line":513},[445,2242,2243],{"class":455},"  createGetValidationErrorsFn",[445,2245,668],{"class":459},[445,2247,2248,2250,2252,2254,2256,2258],{"class":447,"line":538},[445,2249,618],{"class":459},[445,2251,621],{"class":529},[445,2253,624],{"class":459},[445,2255,628],{"class":627},[445,2257,631],{"class":459},[445,2259,480],{"class":459},[445,2261,2262],{"class":447,"line":545},[445,2263,510],{"emptyLinePlaceholder":509},[445,2265,2266,2268,2271],{"class":447,"line":550},[445,2267,1179],{"class":451},[445,2269,2270],{"class":470}," User",[445,2272,719],{"class":459},[445,2274,2275,2277,2279,2281],{"class":447,"line":568},[445,2276,1189],{"class":733},[445,2278,662],{"class":459},[445,2280,533],{"class":470},[445,2282,480],{"class":459},[445,2284,2285,2288,2290,2292],{"class":447,"line":722},[445,2286,2287],{"class":733},"  createdAt",[445,2289,662],{"class":459},[445,2291,678],{"class":470},[445,2293,480],{"class":459},[445,2295,2296],{"class":447,"line":781},[445,2297,784],{"class":459},[445,2299,2300],{"class":447,"line":787},[445,2301,510],{"emptyLinePlaceholder":509},[445,2303,2304,2306,2309,2311,2313,2315,2318,2320,2322],{"class":447,"line":810},[445,2305,452],{"class":451},[445,2307,2308],{"class":455}," decodeUser ",[445,2310,460],{"class":459},[445,2312,493],{"class":463},[445,2314,467],{"class":459},[445,2316,2317],{"class":470},"User",[445,2319,474],{"class":459},[445,2321,477],{"class":455},[445,2323,480],{"class":459},[445,2325,2326,2328,2331,2333,2336,2338,2340,2342,2344],{"class":447,"line":829},[445,2327,452],{"class":451},[445,2329,2330],{"class":455}," isUser ",[445,2332,460],{"class":459},[445,2334,2335],{"class":463}," createValidateFn",[445,2337,467],{"class":459},[445,2339,2317],{"class":470},[445,2341,474],{"class":459},[445,2343,477],{"class":455},[445,2345,480],{"class":459},[445,2347,2348,2350,2353,2355,2358,2360,2362,2364,2366],{"class":447,"line":834},[445,2349,452],{"class":451},[445,2351,2352],{"class":455}," getUserErrors ",[445,2354,460],{"class":459},[445,2356,2357],{"class":463}," createGetValidationErrorsFn",[445,2359,467],{"class":459},[445,2361,2317],{"class":470},[445,2363,474],{"class":459},[445,2365,477],{"class":455},[445,2367,480],{"class":459},[445,2369,2370],{"class":447,"line":840},[445,2371,510],{"emptyLinePlaceholder":509},[445,2373,2374,2376,2379,2382,2384,2387,2389,2391,2393],{"class":447,"line":863},[445,2375,1145],{"class":529},[445,2377,2378],{"class":451}," function",[445,2380,2381],{"class":463}," readUser",[445,2383,899],{"class":459},[445,2385,2386],{"class":658},"body",[445,2388,662],{"class":459},[445,2390,533],{"class":470},[445,2392,909],{"class":459},[445,2394,719],{"class":459},[445,2396,2397,2400,2403,2405,2408,2410,2412,2414],{"class":447,"line":879},[445,2398,2399],{"class":451},"  const",[445,2401,2402],{"class":455}," user",[445,2404,796],{"class":459},[445,2406,2407],{"class":463}," decodeUser",[445,2409,899],{"class":733},[445,2411,2386],{"class":455},[445,2413,909],{"class":733},[445,2415,480],{"class":459},[445,2417,2418,2421,2424,2427,2430,2432,2435],{"class":447,"line":891},[445,2419,2420],{"class":529},"  if",[445,2422,2423],{"class":733}," (",[445,2425,2426],{"class":459},"!",[445,2428,2429],{"class":463},"isUser",[445,2431,899],{"class":733},[445,2433,2434],{"class":455},"user",[445,2436,2437],{"class":733},"))\n",[445,2439,2440,2443,2445,2448,2450,2453,2456,2458,2461,2463,2466,2468,2471,2474,2476,2478],{"class":447,"line":914},[445,2441,2442],{"class":529},"    throw",[445,2444,728],{"class":459},[445,2446,2447],{"class":463}," Error",[445,2449,899],{"class":733},[445,2451,2452],{"class":459},"`",[445,2454,2455],{"class":627},"Invalid user: ",[445,2457,748],{"class":459},[445,2459,2460],{"class":455},"JSON",[445,2462,760],{"class":459},[445,2464,2465],{"class":463},"stringify",[445,2467,899],{"class":455},[445,2469,2470],{"class":463},"getUserErrors",[445,2472,2473],{"class":455},"(user))",[445,2475,768],{"class":459},[445,2477,909],{"class":733},[445,2479,480],{"class":459},[445,2481,2482,2484,2486],{"class":447,"line":936},[445,2483,725],{"class":529},[445,2485,2402],{"class":455},[445,2487,480],{"class":459},[445,2489,2490],{"class":447,"line":948},[445,2491,784],{"class":459},[445,2493,2494],{"class":447,"line":954},[445,2495,510],{"emptyLinePlaceholder":509},[445,2497,2498,2501,2503,2505,2508,2510,2512,2514],{"class":447,"line":959},[445,2499,2500],{"class":463},"readUser",[445,2502,899],{"class":455},[445,2504,631],{"class":459},[445,2506,2507],{"class":627},"{\"id\":\"u1\",\"createdAt\":\"2024-05-01T10:00:00.000Z\"}",[445,2509,631],{"class":459},[445,2511,909],{"class":455},[445,2513,1017],{"class":459},[445,2515,2516],{"class":541}," \u002F\u002F ok, createdAt is a Date\n",[445,2518,2519,2521,2523,2525,2528,2530,2532,2534],{"class":447,"line":965},[445,2520,2500],{"class":463},[445,2522,899],{"class":455},[445,2524,631],{"class":459},[445,2526,2527],{"class":627},"{\"id\":\"u1\",\"createdAt\":\"yesterday\"}",[445,2529,631],{"class":459},[445,2531,909],{"class":455},[445,2533,1017],{"class":459},[445,2535,2536],{"class":541}," \u002F\u002F throws, createdAt is an invalid Date\n",[1155,2538,2539,2540,2542],{},"A decoder only converts the exact form the encoder writes. A Date field holding ",[409,2541,1493],{}," or a number stays as it is, so the validator rejects it.",[588,2544,2546],{"id":2545},"values-that-are-not-data","Values That Are Not Data",[405,2548,2549,2550,2553,2554,2557],{},"Functions, methods, symbols, promises, ",[409,2551,2552],{},"RegExp"," and typed arrays like ",[409,2555,2556],{},"Int8Array"," are not data. RunTypes handles them by position:",[1479,2559,2560,2567],{},[1482,2561,2562,2566],{},[2563,2564,2565],"strong",{},"As a property or a union member",", they are left out. The build shows a warning.",[1482,2568,2569,2572],{},[2563,2570,2571],{},"As the whole type, an array item or a tuple slot",", the build fails with an error.",[405,2574,2575,2576,2579],{},"Decoders return ",[409,2577,2578],{},"DataOnly\u003CT>",", your type without those members.",[436,2581,2583],{"className":438,"code":2582,"language":440,"meta":441,"style":441},"import {createJsonDecoderFn, createJsonEncoderFn} from '@mionjs\u002Frun-types';\n\ninterface Account {\n  id: string;\n  balance: number;\n  describe(): string; \u002F\u002F a method, so it is left out\n}\n\nconst encodeAccount = createJsonEncoderFn\u003CAccount>();\nconst decodeAccount = createJsonDecoderFn\u003CAccount>();\n\nconst account: Account = {id: 'a1', balance: 10, describe: () => 'a1: 10'};\nconst json = encodeAccount(account) as string; \u002F\u002F {\"id\":\"a1\",\"balance\":10}\n\nconst decoded = decodeAccount(json);\n\u002F\u002F decoded type is {id: string; balance: number}, with no describe()\n\nexport {decoded};\n",[409,2584,2585,2610,2614,2623,2633,2644,2659,2663,2667,2689,2710,2714,2773,2796,2800,2816,2821,2825],{"__ignoreMap":441},[445,2586,2587,2589,2591,2594,2596,2598,2600,2602,2604,2606,2608],{"class":447,"line":448},[445,2588,604],{"class":529},[445,2590,607],{"class":459},[445,2592,2593],{"class":455},"createJsonDecoderFn",[445,2595,613],{"class":459},[445,2597,464],{"class":455},[445,2599,618],{"class":459},[445,2601,621],{"class":529},[445,2603,624],{"class":459},[445,2605,628],{"class":627},[445,2607,631],{"class":459},[445,2609,480],{"class":459},[445,2611,2612],{"class":447,"line":483},[445,2613,510],{"emptyLinePlaceholder":509},[445,2615,2616,2618,2621],{"class":447,"line":506},[445,2617,1179],{"class":451},[445,2619,2620],{"class":470}," Account",[445,2622,719],{"class":459},[445,2624,2625,2627,2629,2631],{"class":447,"line":513},[445,2626,1189],{"class":733},[445,2628,662],{"class":459},[445,2630,533],{"class":470},[445,2632,480],{"class":459},[445,2634,2635,2638,2640,2642],{"class":447,"line":538},[445,2636,2637],{"class":733},"  balance",[445,2639,662],{"class":459},[445,2641,1224],{"class":470},[445,2643,480],{"class":459},[445,2645,2646,2649,2652,2654,2656],{"class":447,"line":545},[445,2647,2648],{"class":733},"  describe",[445,2650,2651],{"class":459},"():",[445,2653,533],{"class":470},[445,2655,1017],{"class":459},[445,2657,2658],{"class":541}," \u002F\u002F a method, so it is left out\n",[445,2660,2661],{"class":447,"line":550},[445,2662,784],{"class":459},[445,2664,2665],{"class":447,"line":568},[445,2666,510],{"emptyLinePlaceholder":509},[445,2668,2669,2671,2674,2676,2678,2680,2683,2685,2687],{"class":447,"line":722},[445,2670,452],{"class":451},[445,2672,2673],{"class":455}," encodeAccount ",[445,2675,460],{"class":459},[445,2677,464],{"class":463},[445,2679,467],{"class":459},[445,2681,2682],{"class":470},"Account",[445,2684,474],{"class":459},[445,2686,477],{"class":455},[445,2688,480],{"class":459},[445,2690,2691,2693,2696,2698,2700,2702,2704,2706,2708],{"class":447,"line":781},[445,2692,452],{"class":451},[445,2694,2695],{"class":455}," decodeAccount ",[445,2697,460],{"class":459},[445,2699,493],{"class":463},[445,2701,467],{"class":459},[445,2703,2682],{"class":470},[445,2705,474],{"class":459},[445,2707,477],{"class":455},[445,2709,480],{"class":459},[445,2711,2712],{"class":447,"line":787},[445,2713,510],{"emptyLinePlaceholder":509},[445,2715,2716,2718,2721,2723,2725,2727,2729,2732,2734,2736,2739,2741,2743,2746,2748,2751,2753,2756,2758,2761,2764,2766,2769,2771],{"class":447,"line":810},[445,2717,452],{"class":451},[445,2719,2720],{"class":455}," account",[445,2722,662],{"class":459},[445,2724,2620],{"class":470},[445,2726,796],{"class":459},[445,2728,607],{"class":459},[445,2730,2731],{"class":733},"id",[445,2733,662],{"class":459},[445,2735,624],{"class":459},[445,2737,2738],{"class":627},"a1",[445,2740,631],{"class":459},[445,2742,613],{"class":459},[445,2744,2745],{"class":733}," balance",[445,2747,662],{"class":459},[445,2749,2750],{"class":882}," 10",[445,2752,613],{"class":459},[445,2754,2755],{"class":463}," describe",[445,2757,662],{"class":459},[445,2759,2760],{"class":459}," ()",[445,2762,2763],{"class":451}," =>",[445,2765,624],{"class":459},[445,2767,2768],{"class":627},"a1: 10",[445,2770,631],{"class":459},[445,2772,1153],{"class":459},[445,2774,2775,2777,2779,2781,2784,2787,2789,2791,2793],{"class":447,"line":829},[445,2776,452],{"class":451},[445,2778,518],{"class":455},[445,2780,460],{"class":459},[445,2782,2783],{"class":463}," encodeAccount",[445,2785,2786],{"class":455},"(account) ",[445,2788,530],{"class":529},[445,2790,533],{"class":470},[445,2792,1017],{"class":459},[445,2794,2795],{"class":541}," \u002F\u002F {\"id\":\"a1\",\"balance\":10}\n",[445,2797,2798],{"class":447,"line":834},[445,2799,510],{"emptyLinePlaceholder":509},[445,2801,2802,2804,2807,2809,2812,2814],{"class":447,"line":840},[445,2803,452],{"class":451},[445,2805,2806],{"class":455}," decoded ",[445,2808,460],{"class":459},[445,2810,2811],{"class":463}," decodeAccount",[445,2813,563],{"class":455},[445,2815,480],{"class":459},[445,2817,2818],{"class":447,"line":863},[445,2819,2820],{"class":541},"\u002F\u002F decoded type is {id: string; balance: number}, with no describe()\n",[445,2822,2823],{"class":447,"line":879},[445,2824,510],{"emptyLinePlaceholder":509},[445,2826,2827,2829,2831,2834],{"class":447,"line":891},[445,2828,1145],{"class":529},[445,2830,607],{"class":459},[445,2832,2833],{"class":455},"decoded",[445,2835,1153],{"class":459},[588,2837,2839],{"id":2838},"circular-references","Circular References",[405,2841,2842,2843,2846,2847,2850,2851,2854],{},"Recursive types work, like a tree or a linked list. A value that points back to itself does not: by default the loop ends in a ",[409,2844,2845],{},"RangeError"," from the JavaScript stack. Pass ",[409,2848,2849],{},"rejectCircularRefs: true"," to the JSON encoder to throw a ",[409,2852,2853],{},"CircularReferenceError"," instead, before anything is written, with the path to the loop.",[436,2856,2858],{"className":438,"code":2857,"language":440,"meta":441,"style":441},"import {createJsonEncoderFn, CircularReferenceError} from '@mionjs\u002Frun-types';\n\ninterface Category {\n  name: string;\n  parent?: Category;\n}\n\nconst encodeCategory = createJsonEncoderFn\u003CCategory>(undefined, {\n  rejectCircularRefs: true,\n});\n\nconst root: Category = {name: 'root'};\nroot.parent = root; \u002F\u002F a value that points back to itself\n\ntry {\n  encodeCategory(root);\n} catch (err) {\n  if (err instanceof CircularReferenceError) console.log(err.message, err.path);\n  \u002F\u002F Circular reference detected at parent ['parent']\n}\n",[409,2859,2860,2885,2889,2898,2909,2920,2924,2928,2952,2965,2973,2977,3006,3024,3028,3035,3048,3060,3108,3113],{"__ignoreMap":441},[445,2861,2862,2864,2866,2868,2870,2873,2875,2877,2879,2881,2883],{"class":447,"line":448},[445,2863,604],{"class":529},[445,2865,607],{"class":459},[445,2867,610],{"class":455},[445,2869,613],{"class":459},[445,2871,2872],{"class":455}," CircularReferenceError",[445,2874,618],{"class":459},[445,2876,621],{"class":529},[445,2878,624],{"class":459},[445,2880,628],{"class":627},[445,2882,631],{"class":459},[445,2884,480],{"class":459},[445,2886,2887],{"class":447,"line":483},[445,2888,510],{"emptyLinePlaceholder":509},[445,2890,2891,2893,2896],{"class":447,"line":506},[445,2892,1179],{"class":451},[445,2894,2895],{"class":470}," Category",[445,2897,719],{"class":459},[445,2899,2900,2903,2905,2907],{"class":447,"line":513},[445,2901,2902],{"class":733},"  name",[445,2904,662],{"class":459},[445,2906,533],{"class":470},[445,2908,480],{"class":459},[445,2910,2911,2914,2916,2918],{"class":447,"line":538},[445,2912,2913],{"class":733},"  parent",[445,2915,1282],{"class":459},[445,2917,2895],{"class":470},[445,2919,480],{"class":459},[445,2921,2922],{"class":447,"line":545},[445,2923,784],{"class":459},[445,2925,2926],{"class":447,"line":550},[445,2927,510],{"emptyLinePlaceholder":509},[445,2929,2930,2932,2935,2937,2939,2941,2944,2946,2948,2950],{"class":447,"line":568},[445,2931,452],{"class":451},[445,2933,2934],{"class":455}," encodeCategory ",[445,2936,460],{"class":459},[445,2938,464],{"class":463},[445,2940,467],{"class":459},[445,2942,2943],{"class":470},"Category",[445,2945,474],{"class":459},[445,2947,899],{"class":455},[445,2949,1792],{"class":459},[445,2951,719],{"class":459},[445,2953,2954,2957,2959,2963],{"class":447,"line":722},[445,2955,2956],{"class":733},"  rejectCircularRefs",[445,2958,662],{"class":459},[445,2960,2962],{"class":2961},"sfNiH"," true",[445,2964,668],{"class":459},[445,2966,2967,2969,2971],{"class":447,"line":781},[445,2968,618],{"class":459},[445,2970,909],{"class":455},[445,2972,480],{"class":459},[445,2974,2975],{"class":447,"line":787},[445,2976,510],{"emptyLinePlaceholder":509},[445,2978,2979,2981,2984,2986,2988,2990,2992,2995,2997,2999,3002,3004],{"class":447,"line":810},[445,2980,452],{"class":451},[445,2982,2983],{"class":455}," root",[445,2985,662],{"class":459},[445,2987,2895],{"class":470},[445,2989,796],{"class":459},[445,2991,607],{"class":459},[445,2993,2994],{"class":733},"name",[445,2996,662],{"class":459},[445,2998,624],{"class":459},[445,3000,3001],{"class":627},"root",[445,3003,631],{"class":459},[445,3005,1153],{"class":459},[445,3007,3008,3010,3012,3015,3017,3019,3021],{"class":447,"line":829},[445,3009,3001],{"class":455},[445,3011,760],{"class":459},[445,3013,3014],{"class":455},"parent ",[445,3016,460],{"class":459},[445,3018,2983],{"class":455},[445,3020,1017],{"class":459},[445,3022,3023],{"class":541}," \u002F\u002F a value that points back to itself\n",[445,3025,3026],{"class":447,"line":834},[445,3027,510],{"emptyLinePlaceholder":509},[445,3029,3030,3033],{"class":447,"line":840},[445,3031,3032],{"class":529},"try",[445,3034,719],{"class":459},[445,3036,3037,3040,3042,3044,3046],{"class":447,"line":863},[445,3038,3039],{"class":463},"  encodeCategory",[445,3041,899],{"class":733},[445,3043,3001],{"class":455},[445,3045,909],{"class":733},[445,3047,480],{"class":459},[445,3049,3050,3052,3055,3058],{"class":447,"line":879},[445,3051,618],{"class":459},[445,3053,3054],{"class":529}," catch",[445,3056,3057],{"class":455}," (err) ",[445,3059,1330],{"class":459},[445,3061,3062,3064,3066,3069,3072,3074,3077,3080,3082,3085,3087,3089,3091,3094,3096,3099,3101,3104,3106],{"class":447,"line":891},[445,3063,2420],{"class":529},[445,3065,2423],{"class":733},[445,3067,3068],{"class":455},"err",[445,3070,3071],{"class":459}," instanceof",[445,3073,2872],{"class":470},[445,3075,3076],{"class":733},") ",[445,3078,3079],{"class":455},"console",[445,3081,760],{"class":459},[445,3083,3084],{"class":463},"log",[445,3086,899],{"class":733},[445,3088,3068],{"class":455},[445,3090,760],{"class":459},[445,3092,3093],{"class":455},"message",[445,3095,613],{"class":459},[445,3097,3098],{"class":455}," err",[445,3100,760],{"class":459},[445,3102,3103],{"class":455},"path",[445,3105,909],{"class":733},[445,3107,480],{"class":459},[445,3109,3110],{"class":447,"line":914},[445,3111,3112],{"class":541},"  \u002F\u002F Circular reference detected at parent ['parent']\n",[445,3114,3115],{"class":447,"line":936},[445,3116,784],{"class":459},[588,3118,3120],{"id":3119},"classes","Classes",[405,3122,3123,3124,3127,3128,3131],{},"A class instance encodes like an object with the same properties, and decodes to a plain object by default. Register the class with ",[409,3125,3126],{},"registerClassSerializer"," from ",[409,3129,3130],{},"@mionjs\u002Frun-types\u002Fruntime"," to get real instances back.",[405,3133,3134,3135,3138,3139,3142],{},"Pass ",[409,3136,3137],{},"deserialize"," when the constructor takes arguments. Without it, RunTypes creates the instance and copies the properties in. Pass ",[409,3140,3141],{},"serialize"," to change what is written, keeping it to the declared properties.",[436,3144,3146],{"className":438,"code":3145,"language":440,"meta":441,"style":441},"import {createJsonEncoderFn, createJsonDecoderFn} from '@mionjs\u002Frun-types';\nimport {registerClassSerializer} from '@mionjs\u002Frun-types\u002Fruntime';\n\nclass Money {\n  constructor(\n    public amount: number,\n    public currency: string\n  ) {}\n  format(): string {\n    return `${this.amount} ${this.currency}`;\n  }\n}\n\n\u002F\u002F the constructor takes arguments, so say how to rebuild it\nregisterClassSerializer(Money, {\n  deserialize: (data) => new Money(data.amount, data.currency),\n});\n\nconst encodeMoney = createJsonEncoderFn\u003CMoney>();\nconst decodeMoney = createJsonDecoderFn\u003CMoney>();\n\n\u002F\u002F decoded as data only, so cast to get the methods back\nconst price = decodeMoney(\n  encodeMoney(new Money(4999, 'USD')) as string\n) as Money;\nprice instanceof Money; \u002F\u002F true\nprice.format(); \u002F\u002F '4999 USD'\n",[409,3147,3148,3172,3192,3196,3206,3213,3227,3239,3247,3258,3286,3291,3295,3299,3304,3315,3354,3362,3366,3388,3409,3413,3418,3432,3465,3475,3490],{"__ignoreMap":441},[445,3149,3150,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170],{"class":447,"line":448},[445,3151,604],{"class":529},[445,3153,607],{"class":459},[445,3155,610],{"class":455},[445,3157,613],{"class":459},[445,3159,493],{"class":455},[445,3161,618],{"class":459},[445,3163,621],{"class":529},[445,3165,624],{"class":459},[445,3167,628],{"class":627},[445,3169,631],{"class":459},[445,3171,480],{"class":459},[445,3173,3174,3176,3178,3180,3182,3184,3186,3188,3190],{"class":447,"line":483},[445,3175,604],{"class":529},[445,3177,607],{"class":459},[445,3179,3126],{"class":455},[445,3181,618],{"class":459},[445,3183,621],{"class":529},[445,3185,624],{"class":459},[445,3187,3130],{"class":627},[445,3189,631],{"class":459},[445,3191,480],{"class":459},[445,3193,3194],{"class":447,"line":506},[445,3195,510],{"emptyLinePlaceholder":509},[445,3197,3198,3201,3204],{"class":447,"line":513},[445,3199,3200],{"class":451},"class",[445,3202,3203],{"class":470}," Money",[445,3205,719],{"class":459},[445,3207,3208,3211],{"class":447,"line":538},[445,3209,3210],{"class":451},"  constructor",[445,3212,653],{"class":459},[445,3214,3215,3218,3221,3223,3225],{"class":447,"line":545},[445,3216,3217],{"class":451},"    public",[445,3219,3220],{"class":658}," amount",[445,3222,662],{"class":459},[445,3224,1224],{"class":470},[445,3226,668],{"class":459},[445,3228,3229,3231,3234,3236],{"class":447,"line":550},[445,3230,3217],{"class":451},[445,3232,3233],{"class":658}," currency",[445,3235,662],{"class":459},[445,3237,3238],{"class":470}," string\n",[445,3240,3241,3244],{"class":447,"line":568},[445,3242,3243],{"class":459},"  )",[445,3245,3246],{"class":459}," {}\n",[445,3248,3249,3252,3254,3256],{"class":447,"line":722},[445,3250,3251],{"class":733},"  format",[445,3253,2651],{"class":459},[445,3255,533],{"class":470},[445,3257,719],{"class":459},[445,3259,3260,3263,3266,3269,3272,3274,3277,3279,3282,3284],{"class":447,"line":781},[445,3261,3262],{"class":529},"    return",[445,3264,3265],{"class":459}," `${",[445,3267,3268],{"class":459},"this.",[445,3270,3271],{"class":455},"amount",[445,3273,618],{"class":459},[445,3275,3276],{"class":459}," ${",[445,3278,3268],{"class":459},[445,3280,3281],{"class":455},"currency",[445,3283,768],{"class":459},[445,3285,480],{"class":459},[445,3287,3288],{"class":447,"line":787},[445,3289,3290],{"class":459},"  }\n",[445,3292,3293],{"class":447,"line":810},[445,3294,784],{"class":459},[445,3296,3297],{"class":447,"line":829},[445,3298,510],{"emptyLinePlaceholder":509},[445,3300,3301],{"class":447,"line":834},[445,3302,3303],{"class":541},"\u002F\u002F the constructor takes arguments, so say how to rebuild it\n",[445,3305,3306,3308,3311,3313],{"class":447,"line":840},[445,3307,3126],{"class":463},[445,3309,3310],{"class":455},"(Money",[445,3312,613],{"class":459},[445,3314,719],{"class":459},[445,3316,3317,3320,3322,3324,3327,3329,3331,3333,3335,3338,3340,3342,3344,3347,3349,3352],{"class":447,"line":863},[445,3318,3319],{"class":463},"  deserialize",[445,3321,662],{"class":459},[445,3323,2423],{"class":459},[445,3325,3326],{"class":658},"data",[445,3328,909],{"class":459},[445,3330,2763],{"class":451},[445,3332,728],{"class":459},[445,3334,3203],{"class":463},[445,3336,3337],{"class":455},"(data",[445,3339,760],{"class":459},[445,3341,3271],{"class":455},[445,3343,613],{"class":459},[445,3345,3346],{"class":455}," data",[445,3348,760],{"class":459},[445,3350,3351],{"class":455},"currency)",[445,3353,668],{"class":459},[445,3355,3356,3358,3360],{"class":447,"line":879},[445,3357,618],{"class":459},[445,3359,909],{"class":455},[445,3361,480],{"class":459},[445,3363,3364],{"class":447,"line":891},[445,3365,510],{"emptyLinePlaceholder":509},[445,3367,3368,3370,3373,3375,3377,3379,3382,3384,3386],{"class":447,"line":914},[445,3369,452],{"class":451},[445,3371,3372],{"class":455}," encodeMoney ",[445,3374,460],{"class":459},[445,3376,464],{"class":463},[445,3378,467],{"class":459},[445,3380,3381],{"class":470},"Money",[445,3383,474],{"class":459},[445,3385,477],{"class":455},[445,3387,480],{"class":459},[445,3389,3390,3392,3395,3397,3399,3401,3403,3405,3407],{"class":447,"line":936},[445,3391,452],{"class":451},[445,3393,3394],{"class":455}," decodeMoney ",[445,3396,460],{"class":459},[445,3398,493],{"class":463},[445,3400,467],{"class":459},[445,3402,3381],{"class":470},[445,3404,474],{"class":459},[445,3406,477],{"class":455},[445,3408,480],{"class":459},[445,3410,3411],{"class":447,"line":948},[445,3412,510],{"emptyLinePlaceholder":509},[445,3414,3415],{"class":447,"line":954},[445,3416,3417],{"class":541},"\u002F\u002F decoded as data only, so cast to get the methods back\n",[445,3419,3420,3422,3425,3427,3430],{"class":447,"line":959},[445,3421,452],{"class":451},[445,3423,3424],{"class":455}," price ",[445,3426,460],{"class":459},[445,3428,3429],{"class":463}," decodeMoney",[445,3431,653],{"class":455},[445,3433,3434,3437,3439,3442,3444,3446,3449,3451,3453,3456,3458,3461,3463],{"class":447,"line":965},[445,3435,3436],{"class":463},"  encodeMoney",[445,3438,899],{"class":455},[445,3440,3441],{"class":459},"new",[445,3443,3203],{"class":463},[445,3445,899],{"class":455},[445,3447,3448],{"class":882},"4999",[445,3450,613],{"class":459},[445,3452,624],{"class":459},[445,3454,3455],{"class":627},"USD",[445,3457,631],{"class":459},[445,3459,3460],{"class":455},")) ",[445,3462,530],{"class":529},[445,3464,3238],{"class":470},[445,3466,3467,3469,3471,3473],{"class":447,"line":987},[445,3468,3076],{"class":455},[445,3470,530],{"class":529},[445,3472,3203],{"class":470},[445,3474,480],{"class":459},[445,3476,3477,3480,3483,3485,3487],{"class":447,"line":1023},[445,3478,3479],{"class":455},"price ",[445,3481,3482],{"class":459},"instanceof",[445,3484,3203],{"class":470},[445,3486,1017],{"class":459},[445,3488,3489],{"class":541}," \u002F\u002F true\n",[445,3491,3492,3495,3497,3500,3502,3504],{"class":447,"line":1049},[445,3493,3494],{"class":455},"price",[445,3496,760],{"class":459},[445,3498,3499],{"class":463},"format",[445,3501,477],{"class":455},[445,3503,1017],{"class":459},[445,3505,3506],{"class":541}," \u002F\u002F '4999 USD'\n",[573,3508,3509,3510,412,3512,412,3514,422,3516,3518],{},"One registration covers every generic version of the class. ",[409,3511,415],{},[409,3513,418],{},[409,3515,421],{},[409,3517,425],{}," have their own handling and cannot be registered.",[588,3520,3522],{"id":3521},"private-class-fields","Private Class Fields",[405,3524,3525,422,3528,3531,3532,3535],{},[409,3526,3527],{},"private",[409,3529,3530],{},"protected"," fields are checked and encoded like public ones. ",[409,3533,3534],{},"#"," fields are left out.",[1155,3537,3538,3539,3542,3543,3546,3547,3550,3551,3553],{},"A class from an installed package built with plain ",[409,3540,3541],{},"tsc"," fails your build with marker-untyped-private-member, since its ",[409,3544,3545],{},".d.ts"," drops the type of private fields. Build the package with ",[409,3548,3549],{},"mion compile",", which keeps the type and writes the field as ",[409,3552,3530],{},", or ship its TypeScript sources.",[588,3555,3557],{"id":3556},"encoding-values-inside-your-own-json","Encoding Values Inside Your Own JSON",[405,3559,3560,3561,3563,3564,422,3566,3569],{},"Use the value functions to put several typed values in one JSON document. They take the same ",[409,3562,1722],{}," option, but leave ",[409,3565,1512],{},[409,3567,3568],{},"JSON.parse"," to you.",[436,3571,3573],{"className":438,"code":3572,"language":440,"meta":441,"style":441},"import {\n  createPrepareForJsonFn,\n  createRestoreFromJsonFn,\n} from '@mionjs\u002Frun-types';\n\ninterface Invoice {\n  id: bigint;\n  dueAt: Date;\n}\n\ninterface Customer {\n  name: string;\n  since: Date;\n}\n\nconst prepareInvoice = createPrepareForJsonFn\u003CInvoice>();\nconst prepareCustomer = createPrepareForJsonFn\u003CCustomer>();\nconst restoreInvoice = createRestoreFromJsonFn\u003CInvoice>();\nconst restoreCustomer = createRestoreFromJsonFn\u003CCustomer>();\n\n\u002F\u002F your own envelope, one JSON.stringify\nconst body = JSON.stringify({\n  invoice: prepareInvoice({\n    id: 7n,\n    dueAt: new Date('2024-06-01T00:00:00.000Z'),\n  }),\n  customer: prepareCustomer({\n    name: 'Ana',\n    since: new Date('2020-01-01T00:00:00.000Z'),\n  }),\n});\n\n\u002F\u002F one JSON.parse, then restore each value\nconst envelope = JSON.parse(body);\nconst invoice = restoreInvoice(envelope.invoice); \u002F\u002F id is a bigint, dueAt is a Date\nconst customer = restoreCustomer(envelope.customer); \u002F\u002F since is a Date\n\nexport {invoice, customer};\n",[409,3574,3575,3581,3588,3595,3609,3613,3622,3632,3643,3647,3651,3660,3670,3681,3685,3689,3712,3734,3756,3777,3781,3786,3805,3819,3833,3857,3866,3880,3896,3920,3928,3936,3940,3945,3966,3992,4017,4022],{"__ignoreMap":441},[445,3576,3577,3579],{"class":447,"line":448},[445,3578,604],{"class":529},[445,3580,719],{"class":459},[445,3582,3583,3586],{"class":447,"line":483},[445,3584,3585],{"class":455},"  createPrepareForJsonFn",[445,3587,668],{"class":459},[445,3589,3590,3593],{"class":447,"line":506},[445,3591,3592],{"class":455},"  createRestoreFromJsonFn",[445,3594,668],{"class":459},[445,3596,3597,3599,3601,3603,3605,3607],{"class":447,"line":513},[445,3598,618],{"class":459},[445,3600,621],{"class":529},[445,3602,624],{"class":459},[445,3604,628],{"class":627},[445,3606,631],{"class":459},[445,3608,480],{"class":459},[445,3610,3611],{"class":447,"line":538},[445,3612,510],{"emptyLinePlaceholder":509},[445,3614,3615,3617,3620],{"class":447,"line":545},[445,3616,1179],{"class":451},[445,3618,3619],{"class":470}," Invoice",[445,3621,719],{"class":459},[445,3623,3624,3626,3628,3630],{"class":447,"line":550},[445,3625,1189],{"class":733},[445,3627,662],{"class":459},[445,3629,665],{"class":470},[445,3631,480],{"class":459},[445,3633,3634,3637,3639,3641],{"class":447,"line":568},[445,3635,3636],{"class":733},"  dueAt",[445,3638,662],{"class":459},[445,3640,678],{"class":470},[445,3642,480],{"class":459},[445,3644,3645],{"class":447,"line":722},[445,3646,784],{"class":459},[445,3648,3649],{"class":447,"line":781},[445,3650,510],{"emptyLinePlaceholder":509},[445,3652,3653,3655,3658],{"class":447,"line":787},[445,3654,1179],{"class":451},[445,3656,3657],{"class":470}," Customer",[445,3659,719],{"class":459},[445,3661,3662,3664,3666,3668],{"class":447,"line":810},[445,3663,2902],{"class":733},[445,3665,662],{"class":459},[445,3667,533],{"class":470},[445,3669,480],{"class":459},[445,3671,3672,3675,3677,3679],{"class":447,"line":829},[445,3673,3674],{"class":733},"  since",[445,3676,662],{"class":459},[445,3678,678],{"class":470},[445,3680,480],{"class":459},[445,3682,3683],{"class":447,"line":834},[445,3684,784],{"class":459},[445,3686,3687],{"class":447,"line":840},[445,3688,510],{"emptyLinePlaceholder":509},[445,3690,3691,3693,3696,3698,3701,3703,3706,3708,3710],{"class":447,"line":863},[445,3692,452],{"class":451},[445,3694,3695],{"class":455}," prepareInvoice ",[445,3697,460],{"class":459},[445,3699,3700],{"class":463}," createPrepareForJsonFn",[445,3702,467],{"class":459},[445,3704,3705],{"class":470},"Invoice",[445,3707,474],{"class":459},[445,3709,477],{"class":455},[445,3711,480],{"class":459},[445,3713,3714,3716,3719,3721,3723,3725,3728,3730,3732],{"class":447,"line":879},[445,3715,452],{"class":451},[445,3717,3718],{"class":455}," prepareCustomer ",[445,3720,460],{"class":459},[445,3722,3700],{"class":463},[445,3724,467],{"class":459},[445,3726,3727],{"class":470},"Customer",[445,3729,474],{"class":459},[445,3731,477],{"class":455},[445,3733,480],{"class":459},[445,3735,3736,3738,3741,3743,3746,3748,3750,3752,3754],{"class":447,"line":891},[445,3737,452],{"class":451},[445,3739,3740],{"class":455}," restoreInvoice ",[445,3742,460],{"class":459},[445,3744,3745],{"class":463}," createRestoreFromJsonFn",[445,3747,467],{"class":459},[445,3749,3705],{"class":470},[445,3751,474],{"class":459},[445,3753,477],{"class":455},[445,3755,480],{"class":459},[445,3757,3758,3760,3763,3765,3767,3769,3771,3773,3775],{"class":447,"line":914},[445,3759,452],{"class":451},[445,3761,3762],{"class":455}," restoreCustomer ",[445,3764,460],{"class":459},[445,3766,3745],{"class":463},[445,3768,467],{"class":459},[445,3770,3727],{"class":470},[445,3772,474],{"class":459},[445,3774,477],{"class":455},[445,3776,480],{"class":459},[445,3778,3779],{"class":447,"line":936},[445,3780,510],{"emptyLinePlaceholder":509},[445,3782,3783],{"class":447,"line":948},[445,3784,3785],{"class":541},"\u002F\u002F your own envelope, one JSON.stringify\n",[445,3787,3788,3790,3792,3794,3797,3799,3801,3803],{"class":447,"line":954},[445,3789,452],{"class":451},[445,3791,868],{"class":455},[445,3793,460],{"class":459},[445,3795,3796],{"class":455}," JSON",[445,3798,760],{"class":459},[445,3800,2465],{"class":463},[445,3802,899],{"class":455},[445,3804,1330],{"class":459},[445,3806,3807,3810,3812,3815,3817],{"class":447,"line":959},[445,3808,3809],{"class":733},"  invoice",[445,3811,662],{"class":459},[445,3813,3814],{"class":463}," prepareInvoice",[445,3816,899],{"class":455},[445,3818,1330],{"class":459},[445,3820,3821,3824,3826,3829,3831],{"class":447,"line":965},[445,3822,3823],{"class":733},"    id",[445,3825,662],{"class":459},[445,3827,3828],{"class":882}," 7",[445,3830,886],{"class":451},[445,3832,668],{"class":459},[445,3834,3835,3838,3840,3842,3844,3846,3848,3851,3853,3855],{"class":447,"line":987},[445,3836,3837],{"class":733},"    dueAt",[445,3839,662],{"class":459},[445,3841,728],{"class":459},[445,3843,678],{"class":463},[445,3845,899],{"class":455},[445,3847,631],{"class":459},[445,3849,3850],{"class":627},"2024-06-01T00:00:00.000Z",[445,3852,631],{"class":459},[445,3854,909],{"class":455},[445,3856,668],{"class":459},[445,3858,3859,3862,3864],{"class":447,"line":1023},[445,3860,3861],{"class":459},"  }",[445,3863,909],{"class":455},[445,3865,668],{"class":459},[445,3867,3868,3871,3873,3876,3878],{"class":447,"line":1049},[445,3869,3870],{"class":733},"  customer",[445,3872,662],{"class":459},[445,3874,3875],{"class":463}," prepareCustomer",[445,3877,899],{"class":455},[445,3879,1330],{"class":459},[445,3881,3882,3885,3887,3889,3892,3894],{"class":447,"line":1054},[445,3883,3884],{"class":733},"    name",[445,3886,662],{"class":459},[445,3888,624],{"class":459},[445,3890,3891],{"class":627},"Ana",[445,3893,631],{"class":459},[445,3895,668],{"class":459},[445,3897,3898,3901,3903,3905,3907,3909,3911,3914,3916,3918],{"class":447,"line":1060},[445,3899,3900],{"class":733},"    since",[445,3902,662],{"class":459},[445,3904,728],{"class":459},[445,3906,678],{"class":463},[445,3908,899],{"class":455},[445,3910,631],{"class":459},[445,3912,3913],{"class":627},"2020-01-01T00:00:00.000Z",[445,3915,631],{"class":459},[445,3917,909],{"class":455},[445,3919,668],{"class":459},[445,3921,3922,3924,3926],{"class":447,"line":1083},[445,3923,3861],{"class":459},[445,3925,909],{"class":455},[445,3927,668],{"class":459},[445,3929,3930,3932,3934],{"class":447,"line":1105},[445,3931,618],{"class":459},[445,3933,909],{"class":455},[445,3935,480],{"class":459},[445,3937,3938],{"class":447,"line":1137},[445,3939,510],{"emptyLinePlaceholder":509},[445,3941,3942],{"class":447,"line":1142},[445,3943,3944],{"class":541},"\u002F\u002F one JSON.parse, then restore each value\n",[445,3946,3948,3950,3953,3955,3957,3959,3962,3964],{"class":447,"line":3947},34,[445,3949,452],{"class":451},[445,3951,3952],{"class":455}," envelope ",[445,3954,460],{"class":459},[445,3956,3796],{"class":455},[445,3958,760],{"class":459},[445,3960,3961],{"class":463},"parse",[445,3963,1014],{"class":455},[445,3965,480],{"class":459},[445,3967,3969,3971,3974,3976,3979,3982,3984,3987,3989],{"class":447,"line":3968},35,[445,3970,452],{"class":451},[445,3972,3973],{"class":455}," invoice ",[445,3975,460],{"class":459},[445,3977,3978],{"class":463}," restoreInvoice",[445,3980,3981],{"class":455},"(envelope",[445,3983,760],{"class":459},[445,3985,3986],{"class":455},"invoice)",[445,3988,1017],{"class":459},[445,3990,3991],{"class":541}," \u002F\u002F id is a bigint, dueAt is a Date\n",[445,3993,3995,3997,4000,4002,4005,4007,4009,4012,4014],{"class":447,"line":3994},36,[445,3996,452],{"class":451},[445,3998,3999],{"class":455}," customer ",[445,4001,460],{"class":459},[445,4003,4004],{"class":463}," restoreCustomer",[445,4006,3981],{"class":455},[445,4008,760],{"class":459},[445,4010,4011],{"class":455},"customer)",[445,4013,1017],{"class":459},[445,4015,4016],{"class":541}," \u002F\u002F since is a Date\n",[445,4018,4020],{"class":447,"line":4019},37,[445,4021,510],{"emptyLinePlaceholder":509},[445,4023,4025,4027,4029,4032,4034,4037],{"class":447,"line":4024},38,[445,4026,1145],{"class":529},[445,4028,607],{"class":459},[445,4030,4031],{"class":455},"invoice",[445,4033,613],{"class":459},[445,4035,4036],{"class":455}," customer",[445,4038,1153],{"class":459},[2078,4040,4041,4051],{},[2081,4042,4043],{},[2084,4044,4045,4048],{},[2087,4046,4047],{},"Function",[2087,4049,4050],{},"What it does",[2097,4052,4053,4066],{},[2084,4054,4055,4060],{},[2102,4056,4057],{},[409,4058,4059],{},"createPrepareForJsonFn\u003CT>()",[2102,4061,4062,4063,4065],{},"converts a typed value to a value ",[409,4064,1512],{}," can write",[2084,4067,4068,4073],{},[2102,4069,4070],{},[409,4071,4072],{},"createRestoreFromJsonFn\u003CT>()",[2102,4074,4075],{},"converts a parsed value back to your type",[588,4077,4079],{"id":4078},"typing-the-json-output","Typing the JSON Output",[405,4081,4082,4085,4086,4089],{},[409,4083,4084],{},"JSONShape\u003CT>"," is the type of the JSON a RunTypes encoder writes for ",[409,4087,4088],{},"T",". Use it to type data you build or receive in that form.",[436,4091,4093],{"className":438,"code":4092,"language":440,"meta":441,"style":441},"import type {JSONShape} from '@mionjs\u002Frun-types';\n\ninterface Order {\n  id: string;\n  total: bigint;\n  placedAt: Date;\n  tags: Set\u003Cstring>;\n}\n\ntype OrderJson = JSONShape\u003COrder>;\n\u002F\u002F {id: string; total: `${bigint}`; placedAt: string; tags: string[]}\n\nconst fromAnotherService: OrderJson = {\n  id: 'o-1',\n  total: '4999',\n  placedAt: '2024-05-01T10:00:00.000Z',\n  tags: ['gift'],\n};\n\nexport {fromAnotherService};\n",[409,4094,4095,4119,4123,4132,4142,4152,4163,4177,4181,4185,4203,4208,4212,4227,4242,4256,4270,4288,4292,4296],{"__ignoreMap":441},[445,4096,4097,4099,4102,4104,4107,4109,4111,4113,4115,4117],{"class":447,"line":448},[445,4098,604],{"class":529},[445,4100,4101],{"class":529}," type",[445,4103,607],{"class":459},[445,4105,4106],{"class":455},"JSONShape",[445,4108,618],{"class":459},[445,4110,621],{"class":529},[445,4112,624],{"class":459},[445,4114,628],{"class":627},[445,4116,631],{"class":459},[445,4118,480],{"class":459},[445,4120,4121],{"class":447,"line":483},[445,4122,510],{"emptyLinePlaceholder":509},[445,4124,4125,4127,4130],{"class":447,"line":506},[445,4126,1179],{"class":451},[445,4128,4129],{"class":470}," Order",[445,4131,719],{"class":459},[445,4133,4134,4136,4138,4140],{"class":447,"line":513},[445,4135,1189],{"class":733},[445,4137,662],{"class":459},[445,4139,533],{"class":470},[445,4141,480],{"class":459},[445,4143,4144,4146,4148,4150],{"class":447,"line":538},[445,4145,659],{"class":733},[445,4147,662],{"class":459},[445,4149,665],{"class":470},[445,4151,480],{"class":459},[445,4153,4154,4157,4159,4161],{"class":447,"line":545},[445,4155,4156],{"class":733},"  placedAt",[445,4158,662],{"class":459},[445,4160,678],{"class":470},[445,4162,480],{"class":459},[445,4164,4165,4167,4169,4171,4173,4175],{"class":447,"line":550},[445,4166,685],{"class":733},[445,4168,662],{"class":459},[445,4170,690],{"class":470},[445,4172,467],{"class":459},[445,4174,695],{"class":470},[445,4176,807],{"class":459},[445,4178,4179],{"class":447,"line":568},[445,4180,784],{"class":459},[445,4182,4183],{"class":447,"line":722},[445,4184,510],{"emptyLinePlaceholder":509},[445,4186,4187,4189,4192,4194,4197,4199,4201],{"class":447,"line":781},[445,4188,790],{"class":451},[445,4190,4191],{"class":470}," OrderJson",[445,4193,796],{"class":459},[445,4195,4196],{"class":470}," JSONShape",[445,4198,467],{"class":459},[445,4200,471],{"class":470},[445,4202,807],{"class":459},[445,4204,4205],{"class":447,"line":787},[445,4206,4207],{"class":541},"\u002F\u002F {id: string; total: `${bigint}`; placedAt: string; tags: string[]}\n",[445,4209,4210],{"class":447,"line":810},[445,4211,510],{"emptyLinePlaceholder":509},[445,4213,4214,4216,4219,4221,4223,4225],{"class":447,"line":829},[445,4215,452],{"class":451},[445,4217,4218],{"class":455}," fromAnotherService",[445,4220,662],{"class":459},[445,4222,4191],{"class":470},[445,4224,796],{"class":459},[445,4226,719],{"class":459},[445,4228,4229,4231,4233,4235,4238,4240],{"class":447,"line":834},[445,4230,1189],{"class":733},[445,4232,662],{"class":459},[445,4234,624],{"class":459},[445,4236,4237],{"class":627},"o-1",[445,4239,631],{"class":459},[445,4241,668],{"class":459},[445,4243,4244,4246,4248,4250,4252,4254],{"class":447,"line":840},[445,4245,659],{"class":733},[445,4247,662],{"class":459},[445,4249,624],{"class":459},[445,4251,3448],{"class":627},[445,4253,631],{"class":459},[445,4255,668],{"class":459},[445,4257,4258,4260,4262,4264,4266,4268],{"class":447,"line":863},[445,4259,4156],{"class":733},[445,4261,662],{"class":459},[445,4263,624],{"class":459},[445,4265,1360],{"class":627},[445,4267,631],{"class":459},[445,4269,668],{"class":459},[445,4271,4272,4274,4276,4278,4280,4282,4284,4286],{"class":447,"line":879},[445,4273,685],{"class":733},[445,4275,662],{"class":459},[445,4277,992],{"class":455},[445,4279,631],{"class":459},[445,4281,926],{"class":627},[445,4283,631],{"class":459},[445,4285,1006],{"class":455},[445,4287,668],{"class":459},[445,4289,4290],{"class":447,"line":891},[445,4291,1153],{"class":459},[445,4293,4294],{"class":447,"line":914},[445,4295,510],{"emptyLinePlaceholder":509},[445,4297,4298,4300,4302,4305],{"class":447,"line":936},[445,4299,1145],{"class":529},[445,4301,607],{"class":459},[445,4303,4304],{"class":455},"fromAnotherService",[445,4306,1153],{"class":459},[573,4308,4309,4311],{},[409,4310,4084],{}," describes the output. Do not validate against it: validate your own type after decoding.",[4313,4314,4315],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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 .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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}","Turn typed values into JSON and back, with Dates, bigints, Maps and Sets intact.","md",null,{"toc":24},{"title":56,"description":4316},"lyEvZOKXxYIya11j63iA1swWzYFqC0QkK-FvIC1dCQA",1793324363741]