Skip to main content

TypeScript 2026: New Features Every Developer Should Know

mubaidr
Wednesday, March 4, 2026
TypeScriptJavaScriptType SafetyDeveloper ToolsProgramming

TypeScript Mastery Series

Part 1 of 5

TypeScript 2026 New Features - Blue TypeScript logo with futuristic code symbols and type annotations on dark gradient background

TypeScript 2026: New Features Every Developer Should Know

TypeScript continues to evolve at a remarkable pace, and 2026 has brought some of the most significant updates since the language's inception. As someone who's been using TypeScript since version 3.0, I'm genuinely excited about how these new features are transforming the way we write type-safe code.

In this comprehensive guide, we'll explore the game-changing TypeScript features released in 2026, understand their practical applications, and see how they can improve your development workflow. Whether you're building Nuxt applications, Node.js backends, or full-stack solutions, these features will become essential tools in your toolkit.

Enhanced Type Inference

TypeScript 5.8's improved type inference engine is nothing short of revolutionary. The compiler now understands context better than ever, reducing the need for explicit type annotations while maintaining complete type safety.

Const Type Parameters

One of the most requested features has finally arrived. Const type parameters allow you to preserve literal types in generic functions, eliminating a whole class of type errors that previously required workarounds.

// Before TypeScript 5.8
function wrap<T>(value: T): { value: T } {
  return { value }
}
const result = wrap("hello") // Type: { value: string }

// With const type parameters
function wrap<const T>(value: T): { value: T } {
  return { value }
}
const result = wrap("hello") // Type: { value: 'hello' }

This feature is particularly valuable when working with configuration objects, API responses, and any scenario where preserving literal types provides better type safety.

Improved Control Flow Analysis

TypeScript 2026 introduces enhanced control flow analysis that tracks variable types through more complex code paths. This means fewer type assertions and better autocomplete in your IDE.

Module Resolution Improvements

The new module resolution strategy, called "bundler," is now the recommended approach for modern JavaScript projects. It aligns TypeScript's behavior with actual bundlers like Vite, Rollup, and Webpack, eliminating frustrating discrepancies between development and production builds.

Package.json Exports Support

TypeScript now fully respects the exports field in package.json, providing better support for modern ESM packages and reducing issues with dual CJS/ESM packages.

Path Mapping Enhancements

Path aliases in tsconfig.json are now resolved more efficiently, with better support for monorepo setups and complex project structures. This is particularly beneficial for Nuxt projects with custom directory structures.

Template Literal Type Improvements

Template literal types have been supercharged in 2026, enabling more sophisticated type-level string manipulation. This opens up new possibilities for type-safe APIs, routing systems, and DSL implementations.

String Manipulation Utilities

New built-in utility types make it easier to work with string types:

type Route = `/api/${string}/users/${number}`
type ExtractId<T> = T extends `/api/${string}/users/${infer Id extends number}`
  ? Id
  : never
type UserId = ExtractId<`/api/v1/users/123`> // Type: 123

Enhanced Inference in Template Literals

The compiler now better infers types from template literal patterns, making it easier to work with dynamic strings while maintaining type safety.

Decorator Standardization

After years of experimental support, decorators are now fully standardized in TypeScript 2026, following the TC39 Stage 3 proposal. This brings stability to metadata-driven programming patterns commonly used in frameworks like NestJS and Angular.

Class Decorators

Class decorators now work consistently across all JavaScript runtimes, enabling powerful patterns for dependency injection, logging, and validation.

Method and Property Decorators

Method and property decorators provide fine-grained control over class behavior, making it easier to implement cross-cutting concerns like authentication, caching, and rate limiting.

Performance Improvements

TypeScript 2026 isn't just about new features—it's also significantly faster. The compiler team has focused on reducing build times, especially for large projects.

Incremental Compilation Enhancements

Incremental compilation is now up to 40% faster for large codebases, thanks to improved caching strategies and more efficient dependency tracking.

Project References Optimization

Project references, essential for monorepo setups, now resolve dependencies more efficiently, reducing overall build times in complex workspace configurations.

Practical Applications

Building Type-Safe APIs

The new TypeScript features make it easier than ever to build type-safe APIs. Combined with tools like Zod for runtime validation, you can ensure type safety from database to frontend.

// Type-safe API response
type ApiResponse<T> = {
  data: T
  meta: {
    timestamp: string
    version: "v1" | "v2"
  }
}

async function fetchUser(
  id: number,
): Promise<ApiResponse<{ id: number; name: string }>> {
  const response = await fetch(`/api/users/${id}`)
  return response.json()
}

Enhanced Nuxt Development

Nuxt 4 developers benefit significantly from TypeScript 2026's improvements. Better type inference means less boilerplate in composables and pages, while improved module resolution simplifies working with Nuxt's auto-imports.

Full-Stack Type Safety

With TypeScript 2026, sharing types between frontend and backend becomes even more seamless. The improved module resolution and type inference make it practical to maintain a single source of truth for your data models.

Migration Strategies

If you're upgrading from an older TypeScript version, here's a practical migration strategy:

  1. Update TypeScript: Start with the latest version and fix any breaking changes
  2. Enable Strict Mode: If you haven't already, enable all strict type-checking options
  3. Adopt New Features Gradually: Start with const type parameters and enhanced inference
  4. Update Tooling: Ensure your build tools and IDE extensions support TypeScript 2026
  5. Test Thoroughly: Run your full test suite to catch any type-related issues

Conclusion

TypeScript 2026 represents a major leap forward in type safety, developer experience, and performance. The new features—particularly const type parameters, improved module resolution, and enhanced template literal types—solve real-world problems that developers face daily.

As the TypeScript ecosystem continues to mature, staying current with these features becomes essential for writing maintainable, type-safe code. Whether you're building a small project or a large enterprise application, TypeScript 2026 provides the tools you need to catch errors early and ship with confidence.

Start experimenting with these features today, and you'll quickly discover how they can transform your development workflow. The future of type-safe JavaScript is here, and it's more powerful than ever.

Full-stack engineer leading teams to build scalable systems & tools, with solid DevOps expertise.

Muhammad Ubaid R.

\n",[131,17401,17402,17407,17425,17447,17467,17471,17476,17517,17529,17533,17537,17542,17569,17578,17587,17608,17617,17621,17625,17639,17669,17673,17679],{"__ignoreMap":129},[134,17403,17404],{"class":136,"line":137},[134,17405,17406],{"class":140},"// app/pages/users.vue\n",[134,17408,17409,17411,17414,17416,17418,17421,17423],{"class":136,"line":144},[134,17410,156],{"class":155},[134,17412,17413],{"class":204},"script setup lang",[134,17415,225],{"class":155},[134,17417,233],{"class":155},[134,17419,17420],{"class":236},"ts",[134,17422,233],{"class":155},[134,17424,6411],{"class":155},[134,17426,17427,17429,17431,17434,17436,17438,17441,17444],{"class":136,"line":16},[134,17428,3968],{"class":198},[134,17430,179],{"class":155},[134,17432,17433],{"class":204}," usersApi",[134,17435,190],{"class":155},[134,17437,3988],{"class":198},[134,17439,17440],{"class":155}," '",[134,17442,17443],{"class":236},"@/lib/api/client",[134,17445,17446],{"class":155},"'\n",[134,17448,17449,17451,17453,17455,17457,17459,17461,17463,17465],{"class":136,"line":210},[134,17450,3968],{"class":198},[134,17452,16553],{"class":198},[134,17454,179],{"class":155},[134,17456,4525],{"class":204},[134,17458,190],{"class":155},[134,17460,3988],{"class":198},[134,17462,17440],{"class":155},[134,17464,16664],{"class":236},[134,17466,17446],{"class":155},[134,17468,17469],{"class":136,"line":216},[134,17470,252],{"emptyLinePlaceholder":251},[134,17472,17473],{"class":136,"line":248},[134,17474,17475],{"class":140},"// Fully typed with inference\n",[134,17477,17478,17480,17482,17484,17486,17488,17490,17493,17495,17497,17499,17502,17504,17507,17509,17511,17513,17515],{"class":136,"line":255},[134,17479,219],{"class":147},[134,17481,179],{"class":155},[134,17483,4750],{"class":182},[134,17485,170],{"class":155},[134,17487,14420],{"class":204},[134,17489,3259],{"class":155},[134,17491,17492],{"class":204}," error ",[134,17494,413],{"class":155},[134,17496,398],{"class":155},[134,17498,747],{"class":198},[134,17500,17501],{"class":151}," useAsyncData",[134,17503,230],{"class":204},[134,17505,17506],{"class":155},"'",[134,17508,7629],{"class":236},[134,17510,17506],{"class":155},[134,17512,3259],{"class":155},[134,17514,6369],{"class":155},[134,17516,17296],{"class":147},[134,17518,17519,17522,17524,17527],{"class":136,"line":261},[134,17520,17521],{"class":204}," usersApi",[134,17523,778],{"class":155},[134,17525,17526],{"class":151},"getAll",[134,17528,784],{"class":204},[134,17530,17531],{"class":136,"line":296},[134,17532,768],{"class":204},[134,17534,17535],{"class":136,"line":307},[134,17536,252],{"emptyLinePlaceholder":251},[134,17538,17539],{"class":136,"line":312},[134,17540,17541],{"class":140},"// Type-safe component\n",[134,17543,17544,17546,17549,17551,17554,17556,17558,17560,17562,17565,17567],{"class":136,"line":698},[134,17545,219],{"class":147},[134,17547,17548],{"class":204}," UserCard ",[134,17550,225],{"class":155},[134,17552,17553],{"class":151}," defineComponent",[134,17555,711],{"class":155},[134,17557,5408],{"class":182},[134,17559,170],{"class":155},[134,17561,4525],{"class":159},[134,17563,17564],{"class":155}," }>",[134,17566,230],{"class":204},[134,17568,1698],{"class":155},[134,17570,17571,17574,17576],{"class":136,"line":29},[134,17572,17573],{"class":182}," props",[134,17575,170],{"class":155},[134,17577,193],{"class":155},[134,17579,17580,17583,17585],{"class":136,"line":771},[134,17581,17582],{"class":182}," user",[134,17584,170],{"class":155},[134,17586,193],{"class":155},[134,17588,17589,17592,17594,17597,17599,17602,17604,17606],{"class":136,"line":787},[134,17590,17591],{"class":182}," type",[134,17593,170],{"class":155},[134,17595,17596],{"class":204}," Object ",[134,17598,4389],{"class":198},[134,17600,17601],{"class":159}," PropType",[134,17603,156],{"class":155},[134,17605,4600],{"class":159},[134,17607,11812],{"class":155},[134,17609,17610,17613,17615],{"class":136,"line":1944},[134,17611,17612],{"class":182}," required",[134,17614,170],{"class":155},[134,17616,3210],{"class":3739},[134,17618,17619],{"class":136,"line":1964},[134,17620,5608],{"class":155},[134,17622,17623],{"class":136,"line":1970},[134,17624,1967],{"class":155},[134,17626,17627,17630,17633,17635,17637],{"class":136,"line":1984},[134,17628,17629],{"class":182}," setup",[134,17631,17632],{"class":155},"({",[134,17634,5408],{"class":166},[134,17636,12933],{"class":155},[134,17638,193],{"class":155},[134,17640,17641,17643,17645,17647,17650,17652,17654,17657,17659,17661,17663,17665,17667],{"class":136,"line":2005},[134,17642,4110],{"class":198},[134,17644,6369],{"class":155},[134,17646,6372],{"class":147},[134,17648,17649],{"class":151}," h",[134,17651,230],{"class":182},[134,17653,17506],{"class":155},[134,17655,17656],{"class":236},"div",[134,17658,17506],{"class":155},[134,17660,3259],{"class":155},[134,17662,5408],{"class":204},[134,17664,778],{"class":155},[134,17666,8602],{"class":204},[134,17668,768],{"class":182},[134,17670,17671],{"class":136,"line":2026},[134,17672,661],{"class":155},[134,17674,17675,17677],{"class":136,"line":2040},[134,17676,413],{"class":155},[134,17678,768],{"class":204},[134,17680,17681,17684,17687],{"class":136,"line":2061},[134,17682,17683],{"class":155},"(dataSchema: T) =>\n z.object({\n data: dataSchema,\n meta: z.object({\n timestamp: z.string().datetime(),\n version: z.string(),\n requestId: z.string().uuid(),\n }),\n })\n\nexport type ApiResponse = z.infer>>\n",[131,17701,17702,17707,17725,17729,17734,17772,17785,17796,17812,17835,17851,17875,17883,17889,17893],{"__ignoreMap":129},[134,17703,17704],{"class":136,"line":137},[134,17705,17706],{"class":140},"// shared/types/common.ts\n",[134,17708,17709,17711,17713,17715,17717,17719,17721,17723],{"class":136,"line":144},[134,17710,3968],{"class":198},[134,17712,179],{"class":155},[134,17714,5130],{"class":204},[134,17716,190],{"class":155},[134,17718,3988],{"class":198},[134,17720,640],{"class":155},[134,17722,5139],{"class":236},[134,17724,656],{"class":155},[134,17726,17727],{"class":136,"line":16},[134,17728,252],{"emptyLinePlaceholder":251},[134,17730,17731],{"class":136,"line":210},[134,17732,17733],{"class":140},"// Common response structure\n",[134,17735,17736,17738,17740,17743,17745,17748,17750,17752,17754,17756,17759,17761,17764,17766,17768,17770],{"class":136,"line":216},[134,17737,3643],{"class":198},[134,17739,4024],{"class":147},[134,17741,17742],{"class":204}," apiResponseSchema ",[134,17744,225],{"class":155},[134,17746,17747],{"class":155}," <",[134,17749,160],{"class":159},[134,17751,445],{"class":147},[134,17753,5130],{"class":159},[134,17755,778],{"class":155},[134,17757,17758],{"class":159},"ZodType",[134,17760,163],{"class":155},[134,17762,17763],{"class":166},"dataSchema",[134,17765,170],{"class":155},[134,17767,173],{"class":159},[134,17769,3855],{"class":155},[134,17771,17296],{"class":147},[134,17773,17774,17777,17779,17781,17783],{"class":136,"line":248},[134,17775,17776],{"class":204}," z",[134,17778,778],{"class":155},[134,17780,5199],{"class":151},[134,17782,230],{"class":204},[134,17784,1698],{"class":155},[134,17786,17787,17789,17791,17794],{"class":136,"line":255},[134,17788,16846],{"class":182},[134,17790,170],{"class":155},[134,17792,17793],{"class":204}," dataSchema",[134,17795,695],{"class":155},[134,17797,17798,17800,17802,17804,17806,17808,17810],{"class":136,"line":261},[134,17799,16863],{"class":182},[134,17801,170],{"class":155},[134,17803,5130],{"class":204},[134,17805,778],{"class":155},[134,17807,5199],{"class":151},[134,17809,230],{"class":204},[134,17811,1698],{"class":155},[134,17813,17814,17816,17818,17820,17822,17824,17826,17828,17831,17833],{"class":136,"line":296},[134,17815,16872],{"class":182},[134,17817,170],{"class":155},[134,17819,5130],{"class":204},[134,17821,778],{"class":155},[134,17823,410],{"class":151},[134,17825,5218],{"class":204},[134,17827,778],{"class":155},[134,17829,17830],{"class":151},"datetime",[134,17832,5218],{"class":204},[134,17834,695],{"class":155},[134,17836,17837,17839,17841,17843,17845,17847,17849],{"class":136,"line":307},[134,17838,16894],{"class":182},[134,17840,170],{"class":155},[134,17842,5130],{"class":204},[134,17844,778],{"class":155},[134,17846,410],{"class":151},[134,17848,5218],{"class":204},[134,17850,695],{"class":155},[134,17852,17853,17856,17858,17860,17862,17864,17866,17868,17871,17873],{"class":136,"line":312},[134,17854,17855],{"class":182}," requestId",[134,17857,170],{"class":155},[134,17859,5130],{"class":204},[134,17861,778],{"class":155},[134,17863,410],{"class":151},[134,17865,5218],{"class":204},[134,17867,778],{"class":155},[134,17869,17870],{"class":151},"uuid",[134,17872,5218],{"class":204},[134,17874,695],{"class":155},[134,17876,17877,17879,17881],{"class":136,"line":698},[134,17878,4225],{"class":155},[134,17880,3855],{"class":204},[134,17882,695],{"class":155},[134,17884,17885,17887],{"class":136,"line":29},[134,17886,4326],{"class":155},[134,17888,768],{"class":204},[134,17890,17891],{"class":136,"line":771},[134,17892,252],{"emptyLinePlaceholder":251},[134,17894,17895,17897,17899,17901,17903,17905,17907,17909,17911,17913,17915,17917,17920,17923,17926,17928,17930],{"class":136,"line":787},[134,17896,3643],{"class":198},[134,17898,16553],{"class":147},[134,17900,591],{"class":159},[134,17902,156],{"class":155},[134,17904,160],{"class":159},[134,17906,438],{"class":155},[134,17908,398],{"class":155},[134,17910,5130],{"class":159},[134,17912,778],{"class":155},[134,17914,462],{"class":159},[134,17916,156],{"class":155},[134,17918,17919],{"class":159},"ReturnType",[134,17921,17922],{"class":155},"\n",[131,17940,17941,17946,17964,17968,17987,18011,18038,18082,18088,18092,18117],{"__ignoreMap":129},[134,17942,17943],{"class":136,"line":137},[134,17944,17945],{"class":140},"// lib/env.ts\n",[134,17947,17948,17950,17952,17954,17956,17958,17960,17962],{"class":136,"line":144},[134,17949,3968],{"class":198},[134,17951,179],{"class":155},[134,17953,5130],{"class":204},[134,17955,190],{"class":155},[134,17957,3988],{"class":198},[134,17959,640],{"class":155},[134,17961,5139],{"class":236},[134,17963,656],{"class":155},[134,17965,17966],{"class":136,"line":16},[134,17967,252],{"emptyLinePlaceholder":251},[134,17969,17970,17972,17975,17977,17979,17981,17983,17985],{"class":136,"line":210},[134,17971,219],{"class":147},[134,17973,17974],{"class":204}," envSchema ",[134,17976,225],{"class":155},[134,17978,5130],{"class":204},[134,17980,778],{"class":155},[134,17982,5199],{"class":151},[134,17984,230],{"class":204},[134,17986,1698],{"class":155},[134,17988,17989,17992,17994,17996,17998,18000,18002,18004,18007,18009],{"class":136,"line":216},[134,17990,17991],{"class":182}," DATABASE_URL",[134,17993,170],{"class":155},[134,17995,5130],{"class":204},[134,17997,778],{"class":155},[134,17999,410],{"class":151},[134,18001,5218],{"class":204},[134,18003,778],{"class":155},[134,18005,18006],{"class":151},"url",[134,18008,5218],{"class":204},[134,18010,695],{"class":155},[134,18012,18013,18016,18018,18020,18022,18024,18026,18028,18030,18032,18034,18036],{"class":136,"line":248},[134,18014,18015],{"class":182}," API_KEY",[134,18017,170],{"class":155},[134,18019,5130],{"class":204},[134,18021,778],{"class":155},[134,18023,410],{"class":151},[134,18025,5218],{"class":204},[134,18027,778],{"class":155},[134,18029,5246],{"class":151},[134,18031,230],{"class":204},[134,18033,6606],{"class":1846},[134,18035,3855],{"class":204},[134,18037,695],{"class":155},[134,18039,18040,18043,18045,18047,18049,18052,18055,18057,18059,18061,18063,18065,18067,18069,18071,18073,18075,18077,18080],{"class":136,"line":255},[134,18041,18042],{"class":182}," NODE_ENV",[134,18044,170],{"class":155},[134,18046,5130],{"class":204},[134,18048,778],{"class":155},[134,18050,18051],{"class":151},"enum",[134,18053,18054],{"class":204},"([",[134,18056,233],{"class":155},[134,18058,4195],{"class":236},[134,18060,233],{"class":155},[134,18062,3259],{"class":155},[134,18064,640],{"class":155},[134,18066,4477],{"class":236},[134,18068,233],{"class":155},[134,18070,3259],{"class":155},[134,18072,640],{"class":155},[134,18074,3444],{"class":236},[134,18076,233],{"class":155},[134,18078,18079],{"class":204},"])",[134,18081,695],{"class":155},[134,18083,18084,18086],{"class":136,"line":261},[134,18085,413],{"class":155},[134,18087,768],{"class":204},[134,18089,18090],{"class":136,"line":296},[134,18091,252],{"emptyLinePlaceholder":251},[134,18093,18094,18096,18098,18101,18103,18106,18108,18110,18112,18114],{"class":136,"line":307},[134,18095,3643],{"class":198},[134,18097,4024],{"class":147},[134,18099,18100],{"class":204}," env ",[134,18102,225],{"class":155},[134,18104,18105],{"class":204}," envSchema",[134,18107,778],{"class":155},[134,18109,5390],{"class":151},[134,18111,6166],{"class":204},[134,18113,778],{"class":155},[134,18115,18116],{"class":204},"env)\n",[134,18118,18119,18121,18123,18126,18128,18130,18132,18134,18136,18138],{"class":136,"line":312},[134,18120,3643],{"class":198},[134,18122,16553],{"class":147},[134,18124,18125],{"class":159}," Env",[134,18127,398],{"class":155},[134,18129,5130],{"class":159},[134,18131,778],{"class":155},[134,18133,462],{"class":159},[134,18135,17922],{"class":155},[134,18137,18105],{"class":204},[134,18139,6411],{"class":155},[116,18141,18143],{"id":18142},"_3-database-migrations-with-type-safety","3. Database Migrations with Type Safety",[124,18145,18147],{"className":126,"code":18146,"language":128,"meta":129,"style":129},"// db/migrations/001_create_users.ts\nimport { sql } from \"drizzle-orm\"\n\nexport async function up() {\n await sql`\n CREATE TABLE users (\n id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n email TEXT NOT NULL UNIQUE,\n name TEXT NOT NULL,\n created_at TIMESTAMPTZ DEFAULT NOW()\n )\n `\n}\n\nexport async function down() {\n await sql`DROP TABLE users`\n}\n",[131,18148,18149,18154,18174,18178,18193,18203,18208,18213,18218,18223,18228,18233,18238,18242,18246,18261,18274],{"__ignoreMap":129},[134,18150,18151],{"class":136,"line":137},[134,18152,18153],{"class":140},"// db/migrations/001_create_users.ts\n",[134,18155,18156,18158,18160,18163,18165,18167,18169,18172],{"class":136,"line":144},[134,18157,3968],{"class":198},[134,18159,179],{"class":155},[134,18161,18162],{"class":204}," sql",[134,18164,190],{"class":155},[134,18166,3988],{"class":198},[134,18168,640],{"class":155},[134,18170,18171],{"class":236},"drizzle-orm",[134,18173,656],{"class":155},[134,18175,18176],{"class":136,"line":16},[134,18177,252],{"emptyLinePlaceholder":251},[134,18179,18180,18182,18184,18186,18189,18191],{"class":136,"line":210},[134,18181,3643],{"class":198},[134,18183,6503],{"class":147},[134,18185,677],{"class":147},[134,18187,18188],{"class":151}," up",[134,18190,5218],{"class":155},[134,18192,193],{"class":155},[134,18194,18195,18198,18200],{"class":136,"line":216},[134,18196,18197],{"class":198}," await",[134,18199,18162],{"class":151},[134,18201,18202],{"class":155},"`\n",[134,18204,18205],{"class":136,"line":248},[134,18206,18207],{"class":236}," CREATE TABLE users (\n",[134,18209,18210],{"class":136,"line":255},[134,18211,18212],{"class":236}," id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n",[134,18214,18215],{"class":136,"line":261},[134,18216,18217],{"class":236}," email TEXT NOT NULL UNIQUE,\n",[134,18219,18220],{"class":136,"line":296},[134,18221,18222],{"class":236}," name TEXT NOT NULL,\n",[134,18224,18225],{"class":136,"line":307},[134,18226,18227],{"class":236}," created_at TIMESTAMPTZ DEFAULT NOW()\n",[134,18229,18230],{"class":136,"line":312},[134,18231,18232],{"class":236}," )\n",[134,18234,18235],{"class":136,"line":698},[134,18236,18237],{"class":155}," `\n",[134,18239,18240],{"class":136,"line":29},[134,18241,213],{"class":155},[134,18243,18244],{"class":136,"line":771},[134,18245,252],{"emptyLinePlaceholder":251},[134,18247,18248,18250,18252,18254,18257,18259],{"class":136,"line":787},[134,18249,3643],{"class":198},[134,18251,6503],{"class":147},[134,18253,677],{"class":147},[134,18255,18256],{"class":151}," down",[134,18258,5218],{"class":155},[134,18260,193],{"class":155},[134,18262,18263,18265,18267,18269,18272],{"class":136,"line":1944},[134,18264,18197],{"class":198},[134,18266,18162],{"class":151},[134,18268,504],{"class":155},[134,18270,18271],{"class":236},"DROP TABLE users",[134,18273,18202],{"class":155},[134,18275,18276],{"class":136,"line":1964},[134,18277,213],{"class":155},[98,18279,18281],{"id":18280},"real-world-example-e-commerce-product-api","Real-World Example: E-Commerce Product API",[116,18283,18285],{"id":18284},"database-schema","Database Schema",[124,18287,18289],{"className":126,"code":18288,"language":128,"meta":129,"style":129},"// db/schema/products.ts\nexport const products = pgTable(\"products\", {\n id: uuid(\"id\").primaryKey(),\n name: text(\"name\").notNull(),\n description: text(\"description\"),\n price: numeric(\"price\").notNull(),\n inventory: integer(\"inventory\").default(0),\n categoryId: uuid(\"category_id\").references(() => categories.id),\n})\n",[131,18290,18291,18296,18321,18347,18373,18395,18423,18457,18498],{"__ignoreMap":129},[134,18292,18293],{"class":136,"line":137},[134,18294,18295],{"class":140},"// db/schema/products.ts\n",[134,18297,18298,18300,18302,18304,18306,18308,18310,18312,18315,18317,18319],{"class":136,"line":144},[134,18299,3643],{"class":198},[134,18301,4024],{"class":147},[134,18303,9361],{"class":204},[134,18305,225],{"class":155},[134,18307,16266],{"class":151},[134,18309,230],{"class":204},[134,18311,233],{"class":155},[134,18313,18314],{"class":236},"products",[134,18316,233],{"class":155},[134,18318,3259],{"class":155},[134,18320,193],{"class":155},[134,18322,18323,18325,18327,18329,18331,18333,18335,18337,18339,18341,18343,18345],{"class":136,"line":16},[134,18324,688],{"class":182},[134,18326,170],{"class":155},[134,18328,16281],{"class":151},[134,18330,230],{"class":204},[134,18332,233],{"class":155},[134,18334,762],{"class":236},[134,18336,233],{"class":155},[134,18338,3855],{"class":204},[134,18340,778],{"class":155},[134,18342,16386],{"class":151},[134,18344,5218],{"class":204},[134,18346,695],{"class":155},[134,18348,18349,18351,18353,18355,18357,18359,18361,18363,18365,18367,18369,18371],{"class":136,"line":210},[134,18350,4940],{"class":182},[134,18352,170],{"class":155},[134,18354,16271],{"class":151},[134,18356,230],{"class":204},[134,18358,233],{"class":155},[134,18360,8602],{"class":236},[134,18362,233],{"class":155},[134,18364,3855],{"class":204},[134,18366,778],{"class":155},[134,18368,16420],{"class":151},[134,18370,5218],{"class":204},[134,18372,695],{"class":155},[134,18374,18375,18378,18380,18382,18384,18386,18389,18391,18393],{"class":136,"line":216},[134,18376,18377],{"class":182}," description",[134,18379,170],{"class":155},[134,18381,16271],{"class":151},[134,18383,230],{"class":204},[134,18385,233],{"class":155},[134,18387,18388],{"class":236},"description",[134,18390,233],{"class":155},[134,18392,3855],{"class":204},[134,18394,695],{"class":155},[134,18396,18397,18399,18401,18404,18406,18408,18411,18413,18415,18417,18419,18421],{"class":136,"line":248},[134,18398,9292],{"class":182},[134,18400,170],{"class":155},[134,18402,18403],{"class":151}," numeric",[134,18405,230],{"class":204},[134,18407,233],{"class":155},[134,18409,18410],{"class":236},"price",[134,18412,233],{"class":155},[134,18414,3855],{"class":204},[134,18416,778],{"class":155},[134,18418,16420],{"class":151},[134,18420,5218],{"class":204},[134,18422,695],{"class":155},[134,18424,18425,18428,18430,18433,18435,18437,18440,18442,18444,18446,18449,18451,18453,18455],{"class":136,"line":255},[134,18426,18427],{"class":182}," inventory",[134,18429,170],{"class":155},[134,18431,18432],{"class":151}," integer",[134,18434,230],{"class":204},[134,18436,233],{"class":155},[134,18438,18439],{"class":236},"inventory",[134,18441,233],{"class":155},[134,18443,3855],{"class":204},[134,18445,778],{"class":155},[134,18447,18448],{"class":151},"default",[134,18450,230],{"class":204},[134,18452,5552],{"class":1846},[134,18454,3855],{"class":204},[134,18456,695],{"class":155},[134,18458,18459,18462,18464,18466,18468,18470,18473,18475,18477,18479,18482,18484,18486,18488,18491,18493,18496],{"class":136,"line":261},[134,18460,18461],{"class":182}," categoryId",[134,18463,170],{"class":155},[134,18465,16281],{"class":151},[134,18467,230],{"class":204},[134,18469,233],{"class":155},[134,18471,18472],{"class":236},"category_id",[134,18474,233],{"class":155},[134,18476,3855],{"class":204},[134,18478,778],{"class":155},[134,18480,18481],{"class":151},"references",[134,18483,230],{"class":204},[134,18485,5218],{"class":155},[134,18487,6372],{"class":147},[134,18489,18490],{"class":204}," categories",[134,18492,778],{"class":155},[134,18494,18495],{"class":204},"id)",[134,18497,695],{"class":155},[134,18499,18500,18502],{"class":136,"line":296},[134,18501,413],{"class":155},[134,18503,768],{"class":204},[116,18505,18507],{"id":18506},"api-route","API Route",[124,18509,18511],{"className":126,"code":18510,"language":128,"meta":129,"style":129},"// server/routes/api/products.ts\napp.get(\n \"/products/:id\",\n zValidator(\"param\", z.object({ id: z.string().uuid() })),\n async (c) => {\n const { id } = c.req.valid(\"param\")\n\n const product = await db.query.products.findFirst({\n where: eq(products.id, id),\n with: {\n category: true,\n images: true,\n },\n })\n\n if (!product) {\n return c.json({ error: \"Product not found\" }, 404)\n }\n\n return c.json({ data: product })\n },\n)\n",[131,18512,18513,18518,18528,18539,18590,18604,18636,18640,18671,18695,18704,18715,18726,18731,18737,18741,18756,18789,18793,18797,18821,18825],{"__ignoreMap":129},[134,18514,18515],{"class":136,"line":137},[134,18516,18517],{"class":140},"// server/routes/api/products.ts\n",[134,18519,18520,18522,18524,18526],{"class":136,"line":144},[134,18521,16699],{"class":204},[134,18523,778],{"class":155},[134,18525,8664],{"class":151},[134,18527,683],{"class":204},[134,18529,18530,18532,18535,18537],{"class":136,"line":16},[134,18531,1703],{"class":155},[134,18533,18534],{"class":236},"/products/:id",[134,18536,233],{"class":155},[134,18538,695],{"class":155},[134,18540,18541,18544,18546,18548,18551,18553,18555,18557,18559,18561,18563,18565,18567,18569,18571,18573,18575,18577,18579,18581,18583,18585,18588],{"class":136,"line":210},[134,18542,18543],{"class":151}," zValidator",[134,18545,230],{"class":204},[134,18547,233],{"class":155},[134,18549,18550],{"class":236},"param",[134,18552,233],{"class":155},[134,18554,3259],{"class":155},[134,18556,5130],{"class":204},[134,18558,778],{"class":155},[134,18560,5199],{"class":151},[134,18562,230],{"class":204},[134,18564,6027],{"class":155},[134,18566,714],{"class":182},[134,18568,170],{"class":155},[134,18570,5130],{"class":204},[134,18572,778],{"class":155},[134,18574,410],{"class":151},[134,18576,5218],{"class":204},[134,18578,778],{"class":155},[134,18580,17870],{"class":151},[134,18582,6442],{"class":204},[134,18584,413],{"class":155},[134,18586,18587],{"class":204},"))",[134,18589,695],{"class":155},[134,18591,18592,18594,18596,18598,18600,18602],{"class":136,"line":216},[134,18593,4580],{"class":147},[134,18595,4093],{"class":155},[134,18597,16737],{"class":166},[134,18599,3855],{"class":155},[134,18601,6372],{"class":147},[134,18603,193],{"class":155},[134,18605,18606,18608,18610,18612,18614,18616,18618,18620,18622,18624,18626,18628,18630,18632,18634],{"class":136,"line":248},[134,18607,6514],{"class":147},[134,18609,179],{"class":155},[134,18611,714],{"class":204},[134,18613,190],{"class":155},[134,18615,398],{"class":155},[134,18617,13912],{"class":204},[134,18619,778],{"class":155},[134,18621,5340],{"class":204},[134,18623,778],{"class":155},[134,18625,16762],{"class":151},[134,18627,230],{"class":182},[134,18629,233],{"class":155},[134,18631,18550],{"class":236},[134,18633,233],{"class":155},[134,18635,768],{"class":182},[134,18637,18638],{"class":136,"line":255},[134,18639,252],{"emptyLinePlaceholder":251},[134,18641,18642,18644,18647,18649,18651,18653,18655,18658,18660,18662,18664,18667,18669],{"class":136,"line":261},[134,18643,6514],{"class":147},[134,18645,18646],{"class":204}," product",[134,18648,398],{"class":155},[134,18650,747],{"class":198},[134,18652,16794],{"class":204},[134,18654,778],{"class":155},[134,18656,18657],{"class":204},"query",[134,18659,778],{"class":155},[134,18661,18314],{"class":204},[134,18663,778],{"class":155},[134,18665,18666],{"class":151},"findFirst",[134,18668,230],{"class":182},[134,18670,1698],{"class":155},[134,18672,18673,18675,18677,18679,18681,18683,18685,18687,18689,18691,18693],{"class":136,"line":296},[134,18674,4634],{"class":182},[134,18676,170],{"class":155},[134,18678,9428],{"class":151},[134,18680,230],{"class":182},[134,18682,18314],{"class":204},[134,18684,778],{"class":155},[134,18686,762],{"class":204},[134,18688,3259],{"class":155},[134,18690,714],{"class":204},[134,18692,3855],{"class":182},[134,18694,695],{"class":155},[134,18696,18697,18700,18702],{"class":136,"line":307},[134,18698,18699],{"class":182}," with",[134,18701,170],{"class":155},[134,18703,193],{"class":155},[134,18705,18706,18709,18711,18713],{"class":136,"line":312},[134,18707,18708],{"class":182}," category",[134,18710,170],{"class":155},[134,18712,3740],{"class":3739},[134,18714,695],{"class":155},[134,18716,18717,18720,18722,18724],{"class":136,"line":698},[134,18718,18719],{"class":182}," images",[134,18721,170],{"class":155},[134,18723,3740],{"class":3739},[134,18725,695],{"class":155},[134,18727,18728],{"class":136,"line":29},[134,18729,18730],{"class":155}," },\n",[134,18732,18733,18735],{"class":136,"line":771},[134,18734,4225],{"class":155},[134,18736,768],{"class":182},[134,18738,18739],{"class":136,"line":787},[134,18740,252],{"emptyLinePlaceholder":251},[134,18742,18743,18745,18747,18749,18752,18754],{"class":136,"line":1944},[134,18744,12527],{"class":198},[134,18746,4093],{"class":182},[134,18748,11420],{"class":155},[134,18750,18751],{"class":204},"product",[134,18753,242],{"class":182},[134,18755,1698],{"class":155},[134,18757,18758,18761,18763,18765,18767,18769,18771,18773,18775,18777,18780,18782,18785,18787],{"class":136,"line":1964},[134,18759,18760],{"class":198}," return",[134,18762,13912],{"class":204},[134,18764,778],{"class":155},[134,18766,781],{"class":151},[134,18768,230],{"class":182},[134,18770,6027],{"class":155},[134,18772,4161],{"class":182},[134,18774,170],{"class":155},[134,18776,640],{"class":155},[134,18778,18779],{"class":236},"Product not found",[134,18781,233],{"class":155},[134,18783,18784],{"class":155}," },",[134,18786,3939],{"class":1846},[134,18788,768],{"class":182},[134,18790,18791],{"class":136,"line":1970},[134,18792,5608],{"class":155},[134,18794,18795],{"class":136,"line":1984},[134,18796,252],{"emptyLinePlaceholder":251},[134,18798,18799,18801,18803,18805,18807,18809,18811,18813,18815,18817,18819],{"class":136,"line":2005},[134,18800,4110],{"class":198},[134,18802,13912],{"class":204},[134,18804,778],{"class":155},[134,18806,781],{"class":151},[134,18808,230],{"class":182},[134,18810,6027],{"class":155},[134,18812,4750],{"class":182},[134,18814,170],{"class":155},[134,18816,18646],{"class":204},[134,18818,190],{"class":155},[134,18820,768],{"class":182},[134,18822,18823],{"class":136,"line":2026},[134,18824,1967],{"class":155},[134,18826,18827],{"class":136,"line":2040},[134,18828,768],{"class":204},[116,18830,18832],{"id":18831},"frontend-component","Frontend Component",[124,18834,18838],{"className":18835,"code":18836,"language":18837,"meta":129,"style":129},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\n\n\n\n","vue",[131,18839,18840,18845,18867,18887,18891,18906,18916,18923,18927,18945,18971,18987,19002,19031,19035,19043,19047,19056,19076,19094,19111,19120],{"__ignoreMap":129},[134,18841,18842],{"class":136,"line":137},[134,18843,18844],{"class":140},"\n",[134,18846,18847,18849,18851,18854,18857,18859,18861,18863,18865],{"class":136,"line":144},[134,18848,156],{"class":155},[134,18850,17686],{"class":182},[134,18852,18853],{"class":147}," setup",[134,18855,18856],{"class":147}," lang",[134,18858,225],{"class":155},[134,18860,233],{"class":155},[134,18862,17420],{"class":236},[134,18864,233],{"class":155},[134,18866,6411],{"class":155},[134,18868,18869,18871,18873,18875,18877,18879,18881,18883,18885],{"class":136,"line":16},[134,18870,3968],{"class":198},[134,18872,16553],{"class":198},[134,18874,179],{"class":155},[134,18876,9269],{"class":204},[134,18878,190],{"class":155},[134,18880,3988],{"class":198},[134,18882,640],{"class":155},[134,18884,16664],{"class":236},[134,18886,656],{"class":155},[134,18888,18889],{"class":136,"line":210},[134,18890,252],{"emptyLinePlaceholder":251},[134,18892,18893,18895,18898,18900,18903],{"class":136,"line":216},[134,18894,219],{"class":147},[134,18896,18897],{"class":204}," props ",[134,18899,225],{"class":155},[134,18901,18902],{"class":151}," defineProps",[134,18904,18905],{"class":155},"<{\n",[134,18907,18908,18911,18913],{"class":136,"line":248},[134,18909,18910],{"class":182}," product",[134,18912,170],{"class":155},[134,18914,18915],{"class":159}," Product\n",[134,18917,18918,18921],{"class":136,"line":255},[134,18919,18920],{"class":155},"}>",[134,18922,784],{"class":204},[134,18924,18925],{"class":136,"line":261},[134,18926,252],{"emptyLinePlaceholder":251},[134,18928,18929,18931,18934,18936,18939,18941,18943],{"class":136,"line":296},[134,18930,219],{"class":147},[134,18932,18933],{"class":204}," formattedPrice ",[134,18935,225],{"class":155},[134,18937,18938],{"class":151}," computed",[134,18940,230],{"class":204},[134,18942,5218],{"class":155},[134,18944,17296],{"class":147},[134,18946,18947,18950,18953,18955,18958,18960,18962,18965,18967,18969],{"class":136,"line":307},[134,18948,18949],{"class":155}," new",[134,18951,18952],{"class":204}," Intl",[134,18954,778],{"class":155},[134,18956,18957],{"class":151},"NumberFormat",[134,18959,230],{"class":204},[134,18961,233],{"class":155},[134,18963,18964],{"class":236},"en-US",[134,18966,233],{"class":155},[134,18968,3259],{"class":155},[134,18970,193],{"class":155},[134,18972,18973,18976,18978,18980,18983,18985],{"class":136,"line":312},[134,18974,18975],{"class":182}," style",[134,18977,170],{"class":155},[134,18979,640],{"class":155},[134,18981,18982],{"class":236},"currency",[134,18984,233],{"class":155},[134,18986,695],{"class":155},[134,18988,18989,18992,18994,18996,18998,19000],{"class":136,"line":698},[134,18990,18991],{"class":182}," currency",[134,18993,170],{"class":155},[134,18995,640],{"class":155},[134,18997,41],{"class":236},[134,18999,233],{"class":155},[134,19001,695],{"class":155},[134,19003,19004,19006,19008,19010,19012,19014,19017,19020,19022,19024,19026,19029],{"class":136,"line":29},[134,19005,4326],{"class":155},[134,19007,3855],{"class":204},[134,19009,778],{"class":155},[134,19011,5985],{"class":151},[134,19013,230],{"class":204},[134,19015,19016],{"class":151},"Number",[134,19018,19019],{"class":204},"(props",[134,19021,778],{"class":155},[134,19023,18751],{"class":204},[134,19025,778],{"class":155},[134,19027,19028],{"class":204},"price))",[134,19030,695],{"class":155},[134,19032,19033],{"class":136,"line":771},[134,19034,768],{"class":204},[134,19036,19037,19039,19041],{"class":136,"line":787},[134,19038,17683],{"class":155},[134,19040,17686],{"class":182},[134,19042,6411],{"class":155},[134,19044,19045],{"class":136,"line":1944},[134,19046,252],{"emptyLinePlaceholder":251},[134,19048,19049,19051,19054],{"class":136,"line":1964},[134,19050,156],{"class":155},[134,19052,19053],{"class":182},"template",[134,19055,6411],{"class":155},[134,19057,19058,19061,19063,19065,19067,19069,19072,19074],{"class":136,"line":1970},[134,19059,19060],{"class":155}," <",[134,19062,17656],{"class":182},[134,19064,3646],{"class":147},[134,19066,225],{"class":155},[134,19068,233],{"class":155},[134,19070,19071],{"class":236},"product-card",[134,19073,233],{"class":155},[134,19075,6411],{"class":155},[134,19077,19078,19081,19083,19085,19088,19090,19092],{"class":136,"line":1984},[134,19079,19080],{"class":155}," <",[134,19082,116],{"class":182},[134,19084,438],{"class":155},[134,19086,19087],{"class":204},"{{ product.name }}",[134,19089,17683],{"class":155},[134,19091,116],{"class":182},[134,19093,6411],{"class":155},[134,19095,19096,19098,19100,19102,19105,19107,19109],{"class":136,"line":2005},[134,19097,19080],{"class":155},[134,19099,102],{"class":182},[134,19101,438],{"class":155},[134,19103,19104],{"class":204},"{{ formattedPrice }}",[134,19106,17683],{"class":155},[134,19108,102],{"class":182},[134,19110,6411],{"class":155},[134,19112,19113,19116,19118],{"class":136,"line":2026},[134,19114,19115],{"class":155}," {\n expectTypeOf(usersApi.getAll()).resolves.toEqualTypeOf()\n})\n\ntest(\"usersApi.create accepts NewUser\", () => {\n expectTypeOf(usersApi.create).parameter(0).toEqualTypeOf()\n})\n",[131,19595,19596,19601,19621,19639,19643,19664,19701,19707,19711,19732,19770],{"__ignoreMap":129},[134,19597,19598],{"class":136,"line":137},[134,19599,19600],{"class":140},"// tests/types.test.ts\n",[134,19602,19603,19605,19607,19610,19612,19614,19616,19619],{"class":136,"line":144},[134,19604,3968],{"class":198},[134,19606,179],{"class":155},[134,19608,19609],{"class":204}," expectTypeOf",[134,19611,190],{"class":155},[134,19613,3988],{"class":198},[134,19615,640],{"class":155},[134,19617,19618],{"class":236},"expect-type",[134,19620,656],{"class":155},[134,19622,19623,19625,19627,19629,19631,19633,19635,19637],{"class":136,"line":16},[134,19624,3968],{"class":198},[134,19626,179],{"class":155},[134,19628,17433],{"class":204},[134,19630,190],{"class":155},[134,19632,3988],{"class":198},[134,19634,640],{"class":155},[134,19636,17443],{"class":236},[134,19638,656],{"class":155},[134,19640,19641],{"class":136,"line":210},[134,19642,252],{"emptyLinePlaceholder":251},[134,19644,19645,19647,19649,19651,19654,19656,19658,19660,19662],{"class":136,"line":216},[134,19646,3444],{"class":151},[134,19648,230],{"class":204},[134,19650,233],{"class":155},[134,19652,19653],{"class":236},"usersApi.getAll returns User[]",[134,19655,233],{"class":155},[134,19657,3259],{"class":155},[134,19659,6369],{"class":155},[134,19661,6372],{"class":147},[134,19663,193],{"class":155},[134,19665,19666,19669,19671,19674,19676,19678,19681,19683,19686,19688,19691,19693,19695,19697,19699],{"class":136,"line":248},[134,19667,19668],{"class":151}," expectTypeOf",[134,19670,230],{"class":182},[134,19672,19673],{"class":204},"usersApi",[134,19675,778],{"class":155},[134,19677,17526],{"class":151},[134,19679,19680],{"class":182},"())",[134,19682,778],{"class":155},[134,19684,19685],{"class":204},"resolves",[134,19687,778],{"class":155},[134,19689,19690],{"class":151},"toEqualTypeOf",[134,19692,156],{"class":155},[134,19694,4600],{"class":159},[134,19696,7032],{"class":182},[134,19698,438],{"class":155},[134,19700,784],{"class":182},[134,19702,19703,19705],{"class":136,"line":255},[134,19704,413],{"class":155},[134,19706,768],{"class":204},[134,19708,19709],{"class":136,"line":261},[134,19710,252],{"emptyLinePlaceholder":251},[134,19712,19713,19715,19717,19719,19722,19724,19726,19728,19730],{"class":136,"line":296},[134,19714,3444],{"class":151},[134,19716,230],{"class":204},[134,19718,233],{"class":155},[134,19720,19721],{"class":236},"usersApi.create accepts NewUser",[134,19723,233],{"class":155},[134,19725,3259],{"class":155},[134,19727,6369],{"class":155},[134,19729,6372],{"class":147},[134,19731,193],{"class":155},[134,19733,19734,19736,19738,19740,19742,19744,19746,19748,19751,19753,19755,19757,19759,19761,19763,19766,19768],{"class":136,"line":307},[134,19735,19668],{"class":151},[134,19737,230],{"class":182},[134,19739,19673],{"class":204},[134,19741,778],{"class":155},[134,19743,4705],{"class":204},[134,19745,3855],{"class":182},[134,19747,778],{"class":155},[134,19749,19750],{"class":151},"parameter",[134,19752,230],{"class":182},[134,19754,5552],{"class":1846},[134,19756,3855],{"class":182},[134,19758,778],{"class":155},[134,19760,19690],{"class":151},[134,19762,156],{"class":155},[134,19764,19765],{"class":159},"NewUser",[134,19767,438],{"class":155},[134,19769,784],{"class":182},[134,19771,19772,19774],{"class":136,"line":312},[134,19773,413],{"class":155},[134,19775,768],{"class":204},[98,19777,19779],{"id":19778},"performance-considerations","Performance Considerations",[102,19781,19782],{},"Type safety doesn't have to impact performance:",[812,19784,19785,19791,19801,19810],{},[815,19786,19787,19790],{},[818,19788,19789],{},"Tree-shaking",": Unused types are removed in production",[815,19792,19793,19796,19797,19800],{},[818,19794,19795],{},"Type-only imports",": Use ",[131,19798,19799],{},"import type"," to avoid runtime overhead",[815,19802,19803,19796,19806,19809],{},[818,19804,19805],{},"Zod optimization",[131,19807,19808],{},"z.safeParse()"," for better performance",[815,19811,19812,19815],{},[818,19813,19814],{},"Code splitting",": Split types by feature/route",[98,19817,849],{"id":848},[102,19819,19820],{},"End-to-end type safety is no longer optional in 2026—it's a fundamental requirement for building reliable, maintainable applications. By leveraging modern tools like TypeScript, Zod, and type-safe frameworks, you can catch errors before they reach production and provide a better developer experience.",[102,19822,19823],{},"Start small by adding types to your most critical paths, then gradually expand coverage. The investment pays dividends in reduced bugs, better documentation, and improved developer confidence.",[2571,19825],{},[102,19827,19828,19831],{},[818,19829,19830],{},"Ready to implement end-to-end type safety?"," Start with your database schema and work outward. Each layer builds on the previous one, creating a solid foundation for your entire application.",[860,19833,19834],{},"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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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}",{"title":129,"searchDepth":144,"depth":144,"links":19836},[19837,19838,19839,19843,19849,19854,19859,19864,19869,19870,19871],{"id":16130,"depth":144,"text":16125},{"id":16136,"depth":144,"text":16137},{"id":16171,"depth":144,"text":16172,"children":19840},[19841,19842],{"id":16175,"depth":16,"text":16176},{"id":16209,"depth":16,"text":16210},{"id":16239,"depth":144,"text":16240,"children":19844},[19845,19846,19847,19848],{"id":16243,"depth":16,"text":16244},{"id":16590,"depth":16,"text":16591},{"id":16949,"depth":16,"text":16950},{"id":17395,"depth":16,"text":17396},{"id":17691,"depth":144,"text":17692,"children":19850},[19851,19852,19853],{"id":17695,"depth":16,"text":17696},{"id":17934,"depth":16,"text":17935},{"id":18142,"depth":16,"text":18143},{"id":18280,"depth":144,"text":18281,"children":19855},[19856,19857,19858],{"id":18284,"depth":16,"text":18285},{"id":18506,"depth":16,"text":18507},{"id":18831,"depth":16,"text":18832},{"id":19130,"depth":144,"text":19131,"children":19860},[19861,19862,19863],{"id":19134,"depth":16,"text":19135},{"id":19198,"depth":16,"text":19199},{"id":19418,"depth":16,"text":19419},{"id":19507,"depth":144,"text":19508,"children":19865},[19866,19867,19868],{"id":19511,"depth":16,"text":19512},{"id":19541,"depth":16,"text":19542},{"id":19565,"depth":16,"text":19566},{"id":19589,"depth":144,"text":19590},{"id":19778,"depth":144,"text":19779},{"id":848,"depth":144,"text":849},"2026-02-22","Master end-to-end type safety in 2026 with TypeScript, Zod, and modern tools that eliminate runtime errors across your entire stack.",{"readingTime":19875},"11 min read","/blog/27-end-to-end-type-safety-guide-2026",{"title":16125,"description":19873},"Advanced TypeScript patterns for full-stack development",{"src":19880,"mime":904,"alt":19881,"width":906,"height":907},"/img/blog/27-end-to-end-type-safety-guide-2026/banner.svg","End-to-End Type Safety - Connected type chain from database to frontend on blue gradient","blog/27-end-to-end-type-safety-guide-2026",[910,912,19884,19549,19885],"Full-Stack","API Design","N8RnEQivPlHqHoUy1OdwWQLnfChWlNh-gR5oMZhHnsA",[19888,23260,23820],{"id":16124,"title":16125,"abstract":92,"author":93,"authorUrl":92,"body":19889,"date":19872,"dateUpdated":19872,"description":19873,"excerpt":92,"extension":895,"featured":251,"headline":92,"image":92,"meta":23256,"navigation":251,"ogImage":92,"path":19876,"seo":23257,"series":900,"seriesDescription":19878,"seriesOrder":16,"socialImage":23258,"stem":19882,"tags":23259,"__hash__":19886},{"type":95,"value":19890,"toc":23219},[19891,19893,19895,19897,19899,19917,19919,19921,19923,19947,19949,19967,19969,19971,19973,20287,20289,20615,20617,21031,21033,21295,21297,21299,21519,21521,21711,21713,21831,21833,21835,22037,22039,22343,22345,22609,22611,22613,22667,22669,22877,22879,22883,22951,22953,22955,22973,22975,22989,22991,23005,23007,23179,23181,23183,23205,23207,23209,23211,23213,23217],[98,19892,16125],{"id":16130},[102,19894,16133],{},[98,19896,16137],{"id":16136},[102,19898,16140],{},[1539,19900,19901,19905,19909,19913],{},[815,19902,19903,16148],{},[818,19904,16147],{},[815,19906,19907,16153],{},[818,19908,6880],{},[815,19910,19911,16159],{},[818,19912,16158],{},[815,19914,19915,16165],{},[818,19916,16164],{},[102,19918,16168],{},[98,19920,16172],{"id":16171},[116,19922,16176],{"id":16175},[124,19924,19925],{"className":126,"code":16179,"language":128,"meta":129,"style":129},[131,19926,19927,19931,19935,19939,19943],{"__ignoreMap":129},[134,19928,19929],{"class":136,"line":137},[134,19930,16186],{"class":140},[134,19932,19933],{"class":136,"line":144},[134,19934,16191],{"class":140},[134,19936,19937],{"class":136,"line":16},[134,19938,16196],{"class":140},[134,19940,19941],{"class":136,"line":210},[134,19942,16201],{"class":140},[134,19944,19945],{"class":136,"line":216},[134,19946,16206],{"class":140},[116,19948,16210],{"id":16209},[812,19950,19951,19955,19959,19963],{},[815,19952,19953,16218],{},[818,19954,16217],{},[815,19956,19957,16224],{},[818,19958,16223],{},[815,19960,19961,16230],{},[818,19962,16229],{},[815,19964,19965,16236],{},[818,19966,16235],{},[98,19968,16240],{"id":16239},[116,19970,16244],{"id":16243},[102,19972,16247],{},[124,19974,19975],{"className":126,"code":16250,"language":128,"meta":129,"style":129},[131,19976,19977,19981,20011,20033,20051,20055,20079,20111,20143,20169,20201,20207,20211,20215,20229,20243,20247,20251,20269],{"__ignoreMap":129},[134,19978,19979],{"class":136,"line":137},[134,19980,16257],{"class":140},[134,19982,19983,19985,19987,19989,19991,19993,19995,19997,19999,20001,20003,20005,20007,20009],{"class":136,"line":144},[134,19984,3968],{"class":198},[134,19986,179],{"class":155},[134,19988,16266],{"class":204},[134,19990,3259],{"class":155},[134,19992,16271],{"class":204},[134,19994,3259],{"class":155},[134,19996,16276],{"class":204},[134,19998,3259],{"class":155},[134,20000,16281],{"class":204},[134,20002,190],{"class":155},[134,20004,3988],{"class":198},[134,20006,640],{"class":155},[134,20008,16290],{"class":236},[134,20010,656],{"class":155},[134,20012,20013,20015,20017,20019,20021,20023,20025,20027,20029,20031],{"class":136,"line":16},[134,20014,3968],{"class":198},[134,20016,179],{"class":155},[134,20018,16301],{"class":204},[134,20020,3259],{"class":155},[134,20022,16306],{"class":204},[134,20024,190],{"class":155},[134,20026,3988],{"class":198},[134,20028,640],{"class":155},[134,20030,16315],{"class":236},[134,20032,656],{"class":155},[134,20034,20035,20037,20039,20041,20043,20045,20047,20049],{"class":136,"line":210},[134,20036,3968],{"class":198},[134,20038,179],{"class":155},[134,20040,5130],{"class":204},[134,20042,190],{"class":155},[134,20044,3988],{"class":198},[134,20046,640],{"class":155},[134,20048,5139],{"class":236},[134,20050,656],{"class":155},[134,20052,20053],{"class":136,"line":216},[134,20054,252],{"emptyLinePlaceholder":251},[134,20056,20057,20059,20061,20063,20065,20067,20069,20071,20073,20075,20077],{"class":136,"line":248},[134,20058,3643],{"class":198},[134,20060,4024],{"class":147},[134,20062,15832],{"class":204},[134,20064,225],{"class":155},[134,20066,16266],{"class":151},[134,20068,230],{"class":204},[134,20070,233],{"class":155},[134,20072,7629],{"class":236},[134,20074,233],{"class":155},[134,20076,3259],{"class":155},[134,20078,193],{"class":155},[134,20080,20081,20083,20085,20087,20089,20091,20093,20095,20097,20099,20101,20103,20105,20107,20109],{"class":136,"line":255},[134,20082,688],{"class":182},[134,20084,170],{"class":155},[134,20086,16281],{"class":151},[134,20088,230],{"class":204},[134,20090,233],{"class":155},[134,20092,762],{"class":236},[134,20094,233],{"class":155},[134,20096,3855],{"class":204},[134,20098,778],{"class":155},[134,20100,16386],{"class":151},[134,20102,5218],{"class":204},[134,20104,778],{"class":155},[134,20106,16393],{"class":151},[134,20108,5218],{"class":204},[134,20110,695],{"class":155},[134,20112,20113,20115,20117,20119,20121,20123,20125,20127,20129,20131,20133,20135,20137,20139,20141],{"class":136,"line":261},[134,20114,4931],{"class":182},[134,20116,170],{"class":155},[134,20118,16271],{"class":151},[134,20120,230],{"class":204},[134,20122,233],{"class":155},[134,20124,5223],{"class":236},[134,20126,233],{"class":155},[134,20128,3855],{"class":204},[134,20130,778],{"class":155},[134,20132,16420],{"class":151},[134,20134,5218],{"class":204},[134,20136,778],{"class":155},[134,20138,16427],{"class":151},[134,20140,5218],{"class":204},[134,20142,695],{"class":155},[134,20144,20145,20147,20149,20151,20153,20155,20157,20159,20161,20163,20165,20167],{"class":136,"line":296},[134,20146,4940],{"class":182},[134,20148,170],{"class":155},[134,20150,16271],{"class":151},[134,20152,230],{"class":204},[134,20154,233],{"class":155},[134,20156,8602],{"class":236},[134,20158,233],{"class":155},[134,20160,3855],{"class":204},[134,20162,778],{"class":155},[134,20164,16420],{"class":151},[134,20166,5218],{"class":204},[134,20168,695],{"class":155},[134,20170,20171,20173,20175,20177,20179,20181,20183,20185,20187,20189,20191,20193,20195,20197,20199],{"class":136,"line":307},[134,20172,5001],{"class":182},[134,20174,170],{"class":155},[134,20176,16276],{"class":151},[134,20178,230],{"class":204},[134,20180,233],{"class":155},[134,20182,16472],{"class":236},[134,20184,233],{"class":155},[134,20186,3855],{"class":204},[134,20188,778],{"class":155},[134,20190,16481],{"class":151},[134,20192,5218],{"class":204},[134,20194,778],{"class":155},[134,20196,16420],{"class":151},[134,20198,5218],{"class":204},[134,20200,695],{"class":155},[134,20202,20203,20205],{"class":136,"line":312},[134,20204,413],{"class":155},[134,20206,768],{"class":204},[134,20208,20209],{"class":136,"line":698},[134,20210,252],{"emptyLinePlaceholder":251},[134,20212,20213],{"class":136,"line":29},[134,20214,16506],{"class":140},[134,20216,20217,20219,20221,20223,20225,20227],{"class":136,"line":771},[134,20218,3643],{"class":198},[134,20220,4024],{"class":147},[134,20222,16515],{"class":204},[134,20224,225],{"class":155},[134,20226,16301],{"class":151},[134,20228,16522],{"class":204},[134,20230,20231,20233,20235,20237,20239,20241],{"class":136,"line":787},[134,20232,3643],{"class":198},[134,20234,4024],{"class":147},[134,20236,16531],{"class":204},[134,20238,225],{"class":155},[134,20240,16306],{"class":151},[134,20242,16522],{"class":204},[134,20244,20245],{"class":136,"line":1944},[134,20246,252],{"emptyLinePlaceholder":251},[134,20248,20249],{"class":136,"line":1964},[134,20250,16546],{"class":140},[134,20252,20253,20255,20257,20259,20261,20263,20265,20267],{"class":136,"line":1970},[134,20254,3643],{"class":198},[134,20256,16553],{"class":147},[134,20258,4525],{"class":159},[134,20260,398],{"class":155},[134,20262,16560],{"class":155},[134,20264,14420],{"class":204},[134,20266,778],{"class":155},[134,20268,16567],{"class":204},[134,20270,20271,20273,20275,20277,20279,20281,20283,20285],{"class":136,"line":1984},[134,20272,3643],{"class":198},[134,20274,16553],{"class":147},[134,20276,16576],{"class":159},[134,20278,398],{"class":155},[134,20280,16560],{"class":155},[134,20282,14420],{"class":204},[134,20284,778],{"class":155},[134,20286,16587],{"class":204},[116,20288,16591],{"id":16590},[124,20290,20291],{"className":126,"code":16594,"language":128,"meta":129,"style":129},[131,20292,20293,20297,20315,20333,20355,20359,20373,20377,20381,20427,20455,20459,20463,20501,20505,20519,20535,20543,20563,20577,20581,20587,20593,20597,20601],{"__ignoreMap":129},[134,20294,20295],{"class":136,"line":137},[134,20296,16601],{"class":140},[134,20298,20299,20301,20303,20305,20307,20309,20311,20313],{"class":136,"line":144},[134,20300,3968],{"class":198},[134,20302,179],{"class":155},[134,20304,16610],{"class":204},[134,20306,190],{"class":155},[134,20308,3988],{"class":198},[134,20310,640],{"class":155},[134,20312,16619],{"class":236},[134,20314,656],{"class":155},[134,20316,20317,20319,20321,20323,20325,20327,20329,20331],{"class":136,"line":16},[134,20318,3968],{"class":198},[134,20320,179],{"class":155},[134,20322,16630],{"class":204},[134,20324,190],{"class":155},[134,20326,3988],{"class":198},[134,20328,640],{"class":155},[134,20330,16639],{"class":236},[134,20332,656],{"class":155},[134,20334,20335,20337,20339,20341,20343,20345,20347,20349,20351,20353],{"class":136,"line":210},[134,20336,3968],{"class":198},[134,20338,179],{"class":155},[134,20340,16650],{"class":204},[134,20342,3259],{"class":155},[134,20344,16655],{"class":204},[134,20346,190],{"class":155},[134,20348,3988],{"class":198},[134,20350,640],{"class":155},[134,20352,16664],{"class":236},[134,20354,656],{"class":155},[134,20356,20357],{"class":136,"line":216},[134,20358,252],{"emptyLinePlaceholder":251},[134,20360,20361,20363,20365,20367,20369,20371],{"class":136,"line":248},[134,20362,219],{"class":147},[134,20364,16677],{"class":204},[134,20366,225],{"class":155},[134,20368,4444],{"class":155},[134,20370,16610],{"class":151},[134,20372,784],{"class":204},[134,20374,20375],{"class":136,"line":255},[134,20376,252],{"emptyLinePlaceholder":251},[134,20378,20379],{"class":136,"line":261},[134,20380,16694],{"class":140},[134,20382,20383,20385,20387,20389,20391,20393,20395,20397,20399,20401,20403,20405,20407,20409,20411,20413,20415,20417,20419,20421,20423,20425],{"class":136,"line":296},[134,20384,16699],{"class":204},[134,20386,778],{"class":155},[134,20388,15944],{"class":151},[134,20390,230],{"class":204},[134,20392,233],{"class":155},[134,20394,14366],{"class":236},[134,20396,233],{"class":155},[134,20398,3259],{"class":155},[134,20400,16630],{"class":151},[134,20402,230],{"class":204},[134,20404,233],{"class":155},[134,20406,781],{"class":236},[134,20408,233],{"class":155},[134,20410,3259],{"class":155},[134,20412,16728],{"class":204},[134,20414,3259],{"class":155},[134,20416,6503],{"class":147},[134,20418,4093],{"class":155},[134,20420,16737],{"class":166},[134,20422,3855],{"class":155},[134,20424,6372],{"class":147},[134,20426,193],{"class":155},[134,20428,20429,20431,20433,20435,20437,20439,20441,20443,20445,20447,20449,20451,20453],{"class":136,"line":307},[134,20430,739],{"class":147},[134,20432,4750],{"class":204},[134,20434,398],{"class":155},[134,20436,13912],{"class":204},[134,20438,778],{"class":155},[134,20440,5340],{"class":204},[134,20442,778],{"class":155},[134,20444,16762],{"class":151},[134,20446,230],{"class":182},[134,20448,233],{"class":155},[134,20450,781],{"class":236},[134,20452,233],{"class":155},[134,20454,768],{"class":182},[134,20456,20457],{"class":136,"line":312},[134,20458,16777],{"class":140},[134,20460,20461],{"class":136,"line":698},[134,20462,252],{"emptyLinePlaceholder":251},[134,20464,20465,20467,20469,20471,20473,20475,20477,20479,20481,20483,20485,20487,20489,20491,20493,20495,20497,20499],{"class":136,"line":29},[134,20466,739],{"class":147},[134,20468,5408],{"class":204},[134,20470,398],{"class":155},[134,20472,747],{"class":198},[134,20474,16794],{"class":204},[134,20476,778],{"class":155},[134,20478,16799],{"class":151},[134,20480,230],{"class":182},[134,20482,7629],{"class":204},[134,20484,3855],{"class":182},[134,20486,778],{"class":155},[134,20488,16810],{"class":151},[134,20490,230],{"class":182},[134,20492,4669],{"class":204},[134,20494,3855],{"class":182},[134,20496,778],{"class":155},[134,20498,16821],{"class":151},[134,20500,784],{"class":182},[134,20502,20503],{"class":136,"line":771},[134,20504,252],{"emptyLinePlaceholder":251},[134,20506,20507,20509,20511,20513,20515,20517],{"class":136,"line":787},[134,20508,199],{"class":198},[134,20510,13912],{"class":204},[134,20512,778],{"class":155},[134,20514,781],{"class":151},[134,20516,230],{"class":182},[134,20518,1698],{"class":155},[134,20520,20521,20523,20525,20527,20529,20531,20533],{"class":136,"line":1944},[134,20522,16846],{"class":182},[134,20524,170],{"class":155},[134,20526,5408],{"class":204},[134,20528,5549],{"class":182},[134,20530,5552],{"class":1846},[134,20532,5555],{"class":182},[134,20534,695],{"class":155},[134,20536,20537,20539,20541],{"class":136,"line":1964},[134,20538,16863],{"class":182},[134,20540,170],{"class":155},[134,20542,193],{"class":155},[134,20544,20545,20547,20549,20551,20553,20555,20557,20559,20561],{"class":136,"line":1970},[134,20546,16872],{"class":182},[134,20548,170],{"class":155},[134,20550,4444],{"class":155},[134,20552,6631],{"class":151},[134,20554,5218],{"class":182},[134,20556,778],{"class":155},[134,20558,16885],{"class":151},[134,20560,5218],{"class":182},[134,20562,695],{"class":155},[134,20564,20565,20567,20569,20571,20573,20575],{"class":136,"line":1984},[134,20566,16894],{"class":182},[134,20568,170],{"class":155},[134,20570,640],{"class":155},[134,20572,643],{"class":236},[134,20574,233],{"class":155},[134,20576,695],{"class":155},[134,20578,20579],{"class":136,"line":2005},[134,20580,16909],{"class":155},[134,20582,20583,20585],{"class":136,"line":2026},[134,20584,4326],{"class":155},[134,20586,768],{"class":182},[134,20588,20589,20591],{"class":136,"line":2040},[134,20590,413],{"class":155},[134,20592,768],{"class":204},[134,20594,20595],{"class":136,"line":2061},[134,20596,252],{"emptyLinePlaceholder":251},[134,20598,20599],{"class":136,"line":2078},[134,20600,16930],{"class":140},[134,20602,20603,20605,20607,20609,20611,20613],{"class":136,"line":2095},[134,20604,3643],{"class":198},[134,20606,16553],{"class":147},[134,20608,16939],{"class":159},[134,20610,398],{"class":155},[134,20612,16560],{"class":155},[134,20614,16946],{"class":204},[116,20616,16950],{"id":16949},[124,20618,20619],{"className":126,"code":16953,"language":128,"meta":129,"style":129},[131,20620,20621,20625,20645,20665,20669,20673,20685,20689,20729,20759,20763,20781,20807,20811,20815,20827,20831,20835,20839,20851,20883,20925,20943,20965,20979,20995,21019,21027],{"__ignoreMap":129},[134,20622,20623],{"class":136,"line":137},[134,20624,16960],{"class":140},[134,20626,20627,20629,20631,20633,20635,20637,20639,20641,20643],{"class":136,"line":144},[134,20628,3968],{"class":198},[134,20630,16553],{"class":198},[134,20632,179],{"class":155},[134,20634,16939],{"class":204},[134,20636,190],{"class":155},[134,20638,3988],{"class":198},[134,20640,640],{"class":155},[134,20642,16979],{"class":236},[134,20644,656],{"class":155},[134,20646,20647,20649,20651,20653,20655,20657,20659,20661,20663],{"class":136,"line":16},[134,20648,3968],{"class":198},[134,20650,16553],{"class":198},[134,20652,179],{"class":155},[134,20654,16992],{"class":204},[134,20656,190],{"class":155},[134,20658,3988],{"class":198},[134,20660,640],{"class":155},[134,20662,16664],{"class":236},[134,20664,656],{"class":155},[134,20666,20667],{"class":136,"line":210},[134,20668,252],{"emptyLinePlaceholder":251},[134,20670,20671],{"class":136,"line":216},[134,20672,17011],{"class":140},[134,20674,20675,20677,20679,20681,20683],{"class":136,"line":248},[134,20676,392],{"class":147},[134,20678,17018],{"class":159},[134,20680,398],{"class":155},[134,20682,16560],{"class":155},[134,20684,17025],{"class":204},[134,20686,20687],{"class":136,"line":255},[134,20688,252],{"emptyLinePlaceholder":251},[134,20690,20691,20693,20695,20697,20699,20701,20703,20705,20707,20709,20711,20713,20715,20717,20719,20721,20723,20725,20727],{"class":136,"line":261},[134,20692,674],{"class":147},[134,20694,677],{"class":147},[134,20696,15839],{"class":151},[134,20698,156],{"class":155},[134,20700,160],{"class":159},[134,20702,163],{"class":155},[134,20704,17046],{"class":166},[134,20706,170],{"class":155},[134,20708,729],{"class":159},[134,20710,3259],{"class":155},[134,20712,14988],{"class":166},[134,20714,5058],{"class":155},[134,20716,17059],{"class":159},[134,20718,176],{"class":155},[134,20720,703],{"class":159},[134,20722,156],{"class":155},[134,20724,160],{"class":159},[134,20726,438],{"class":155},[134,20728,193],{"class":155},[134,20730,20731,20733,20735,20737,20739,20741,20743,20745,20747,20749,20751,20753,20755,20757],{"class":136,"line":296},[134,20732,739],{"class":147},[134,20734,742],{"class":204},[134,20736,398],{"class":155},[134,20738,747],{"class":198},[134,20740,750],{"class":151},[134,20742,230],{"class":182},[134,20744,504],{"class":155},[134,20746,404],{"class":236},[134,20748,407],{"class":155},[134,20750,17046],{"class":204},[134,20752,765],{"class":155},[134,20754,3259],{"class":155},[134,20756,14988],{"class":204},[134,20758,768],{"class":182},[134,20760,20761],{"class":136,"line":307},[134,20762,252],{"emptyLinePlaceholder":251},[134,20764,20765,20767,20769,20771,20773,20775,20777,20779],{"class":136,"line":312},[134,20766,4090],{"class":198},[134,20768,4093],{"class":182},[134,20770,11420],{"class":155},[134,20772,17116],{"class":204},[134,20774,778],{"class":155},[134,20776,17121],{"class":204},[134,20778,242],{"class":182},[134,20780,1698],{"class":155},[134,20782,20783,20785,20787,20789,20791,20793,20795,20797,20799,20801,20803,20805],{"class":136,"line":698},[134,20784,17130],{"class":198},[134,20786,4444],{"class":155},[134,20788,3654],{"class":151},[134,20790,230],{"class":182},[134,20792,504],{"class":155},[134,20794,17141],{"class":236},[134,20796,407],{"class":155},[134,20798,17116],{"class":204},[134,20800,778],{"class":155},[134,20802,4118],{"class":204},[134,20804,765],{"class":155},[134,20806,768],{"class":182},[134,20808,20809],{"class":136,"line":29},[134,20810,661],{"class":155},[134,20812,20813],{"class":136,"line":771},[134,20814,252],{"emptyLinePlaceholder":251},[134,20816,20817,20819,20821,20823,20825],{"class":136,"line":787},[134,20818,199],{"class":198},[134,20820,742],{"class":204},[134,20822,778],{"class":155},[134,20824,781],{"class":151},[134,20826,784],{"class":182},[134,20828,20829],{"class":136,"line":1944},[134,20830,213],{"class":155},[134,20832,20833],{"class":136,"line":1964},[134,20834,252],{"emptyLinePlaceholder":251},[134,20836,20837],{"class":136,"line":1970},[134,20838,17186],{"class":140},[134,20840,20841,20843,20845,20847,20849],{"class":136,"line":1984},[134,20842,3643],{"class":198},[134,20844,4024],{"class":147},[134,20846,17195],{"class":204},[134,20848,225],{"class":155},[134,20850,193],{"class":155},[134,20852,20853,20855,20857,20859,20861,20863,20865,20867,20869,20871,20873,20875,20877,20879,20881],{"class":136,"line":2005},[134,20854,17204],{"class":151},[134,20856,170],{"class":155},[134,20858,6369],{"class":155},[134,20860,6372],{"class":147},[134,20862,15839],{"class":151},[134,20864,156],{"class":155},[134,20866,17217],{"class":159},[134,20868,7032],{"class":204},[134,20870,438],{"class":155},[134,20872,230],{"class":204},[134,20874,233],{"class":155},[134,20876,17228],{"class":236},[134,20878,233],{"class":155},[134,20880,3855],{"class":204},[134,20882,695],{"class":155},[134,20884,20885,20887,20889,20891,20893,20895,20897,20899,20901,20903,20905,20907,20909,20911,20913,20915,20917,20919,20921,20923],{"class":136,"line":2026},[134,20886,17239],{"class":151},[134,20888,170],{"class":155},[134,20890,4093],{"class":155},[134,20892,762],{"class":166},[134,20894,170],{"class":155},[134,20896,729],{"class":159},[134,20898,3855],{"class":155},[134,20900,6372],{"class":147},[134,20902,15839],{"class":151},[134,20904,156],{"class":155},[134,20906,17217],{"class":159},[134,20908,438],{"class":155},[134,20910,230],{"class":204},[134,20912,504],{"class":155},[134,20914,757],{"class":236},[134,20916,407],{"class":155},[134,20918,762],{"class":204},[134,20920,765],{"class":155},[134,20922,3855],{"class":204},[134,20924,695],{"class":155},[134,20926,20927,20929,20931,20933,20935,20937,20939,20941],{"class":136,"line":2040},[134,20928,11876],{"class":151},[134,20930,170],{"class":155},[134,20932,4093],{"class":155},[134,20934,4669],{"class":166},[134,20936,170],{"class":155},[134,20938,16576],{"class":159},[134,20940,3855],{"class":155},[134,20942,17296],{"class":147},[134,20944,20945,20947,20949,20951,20953,20955,20957,20959,20961,20963],{"class":136,"line":2061},[134,20946,17301],{"class":151},[134,20948,156],{"class":155},[134,20950,17217],{"class":159},[134,20952,438],{"class":155},[134,20954,230],{"class":204},[134,20956,233],{"class":155},[134,20958,17228],{"class":236},[134,20960,233],{"class":155},[134,20962,3259],{"class":155},[134,20964,193],{"class":155},[134,20966,20967,20969,20971,20973,20975,20977],{"class":136,"line":2078},[134,20968,17324],{"class":182},[134,20970,170],{"class":155},[134,20972,640],{"class":155},[134,20974,7572],{"class":236},[134,20976,233],{"class":155},[134,20978,695],{"class":155},[134,20980,20981,20983,20985,20987,20989,20991,20993],{"class":136,"line":2095},[134,20982,14455],{"class":182},[134,20984,170],{"class":155},[134,20986,17343],{"class":204},[134,20988,778],{"class":155},[134,20990,17348],{"class":151},[134,20992,17351],{"class":204},[134,20994,695],{"class":155},[134,20996,20997,20999,21001,21003,21005,21007,21009,21011,21013,21015,21017],{"class":136,"line":2116},[134,20998,17358],{"class":182},[134,21000,170],{"class":155},[134,21002,179],{"class":155},[134,21004,640],{"class":155},[134,21006,17367],{"class":182},[134,21008,233],{"class":155},[134,21010,170],{"class":155},[134,21012,640],{"class":155},[134,21014,17376],{"class":236},[134,21016,233],{"class":155},[134,21018,4643],{"class":155},[134,21020,21021,21023,21025],{"class":136,"line":2130},[134,21022,4225],{"class":155},[134,21024,3855],{"class":204},[134,21026,695],{"class":155},[134,21028,21029],{"class":136,"line":2147},[134,21030,213],{"class":155},[116,21032,17396],{"id":17395},[124,21034,21035],{"className":126,"code":17399,"language":128,"meta":129,"style":129},[131,21036,21037,21041,21057,21075,21095,21099,21103,21141,21151,21155,21159,21163,21187,21195,21203,21221,21229,21233,21237,21249,21277,21281,21287],{"__ignoreMap":129},[134,21038,21039],{"class":136,"line":137},[134,21040,17406],{"class":140},[134,21042,21043,21045,21047,21049,21051,21053,21055],{"class":136,"line":144},[134,21044,156],{"class":155},[134,21046,17413],{"class":204},[134,21048,225],{"class":155},[134,21050,233],{"class":155},[134,21052,17420],{"class":236},[134,21054,233],{"class":155},[134,21056,6411],{"class":155},[134,21058,21059,21061,21063,21065,21067,21069,21071,21073],{"class":136,"line":16},[134,21060,3968],{"class":198},[134,21062,179],{"class":155},[134,21064,17433],{"class":204},[134,21066,190],{"class":155},[134,21068,3988],{"class":198},[134,21070,17440],{"class":155},[134,21072,17443],{"class":236},[134,21074,17446],{"class":155},[134,21076,21077,21079,21081,21083,21085,21087,21089,21091,21093],{"class":136,"line":210},[134,21078,3968],{"class":198},[134,21080,16553],{"class":198},[134,21082,179],{"class":155},[134,21084,4525],{"class":204},[134,21086,190],{"class":155},[134,21088,3988],{"class":198},[134,21090,17440],{"class":155},[134,21092,16664],{"class":236},[134,21094,17446],{"class":155},[134,21096,21097],{"class":136,"line":216},[134,21098,252],{"emptyLinePlaceholder":251},[134,21100,21101],{"class":136,"line":248},[134,21102,17475],{"class":140},[134,21104,21105,21107,21109,21111,21113,21115,21117,21119,21121,21123,21125,21127,21129,21131,21133,21135,21137,21139],{"class":136,"line":255},[134,21106,219],{"class":147},[134,21108,179],{"class":155},[134,21110,4750],{"class":182},[134,21112,170],{"class":155},[134,21114,14420],{"class":204},[134,21116,3259],{"class":155},[134,21118,17492],{"class":204},[134,21120,413],{"class":155},[134,21122,398],{"class":155},[134,21124,747],{"class":198},[134,21126,17501],{"class":151},[134,21128,230],{"class":204},[134,21130,17506],{"class":155},[134,21132,7629],{"class":236},[134,21134,17506],{"class":155},[134,21136,3259],{"class":155},[134,21138,6369],{"class":155},[134,21140,17296],{"class":147},[134,21142,21143,21145,21147,21149],{"class":136,"line":261},[134,21144,17521],{"class":204},[134,21146,778],{"class":155},[134,21148,17526],{"class":151},[134,21150,784],{"class":204},[134,21152,21153],{"class":136,"line":296},[134,21154,768],{"class":204},[134,21156,21157],{"class":136,"line":307},[134,21158,252],{"emptyLinePlaceholder":251},[134,21160,21161],{"class":136,"line":312},[134,21162,17541],{"class":140},[134,21164,21165,21167,21169,21171,21173,21175,21177,21179,21181,21183,21185],{"class":136,"line":698},[134,21166,219],{"class":147},[134,21168,17548],{"class":204},[134,21170,225],{"class":155},[134,21172,17553],{"class":151},[134,21174,711],{"class":155},[134,21176,5408],{"class":182},[134,21178,170],{"class":155},[134,21180,4525],{"class":159},[134,21182,17564],{"class":155},[134,21184,230],{"class":204},[134,21186,1698],{"class":155},[134,21188,21189,21191,21193],{"class":136,"line":29},[134,21190,17573],{"class":182},[134,21192,170],{"class":155},[134,21194,193],{"class":155},[134,21196,21197,21199,21201],{"class":136,"line":771},[134,21198,17582],{"class":182},[134,21200,170],{"class":155},[134,21202,193],{"class":155},[134,21204,21205,21207,21209,21211,21213,21215,21217,21219],{"class":136,"line":787},[134,21206,17591],{"class":182},[134,21208,170],{"class":155},[134,21210,17596],{"class":204},[134,21212,4389],{"class":198},[134,21214,17601],{"class":159},[134,21216,156],{"class":155},[134,21218,4600],{"class":159},[134,21220,11812],{"class":155},[134,21222,21223,21225,21227],{"class":136,"line":1944},[134,21224,17612],{"class":182},[134,21226,170],{"class":155},[134,21228,3210],{"class":3739},[134,21230,21231],{"class":136,"line":1964},[134,21232,5608],{"class":155},[134,21234,21235],{"class":136,"line":1970},[134,21236,1967],{"class":155},[134,21238,21239,21241,21243,21245,21247],{"class":136,"line":1984},[134,21240,17629],{"class":182},[134,21242,17632],{"class":155},[134,21244,5408],{"class":166},[134,21246,12933],{"class":155},[134,21248,193],{"class":155},[134,21250,21251,21253,21255,21257,21259,21261,21263,21265,21267,21269,21271,21273,21275],{"class":136,"line":2005},[134,21252,4110],{"class":198},[134,21254,6369],{"class":155},[134,21256,6372],{"class":147},[134,21258,17649],{"class":151},[134,21260,230],{"class":182},[134,21262,17506],{"class":155},[134,21264,17656],{"class":236},[134,21266,17506],{"class":155},[134,21268,3259],{"class":155},[134,21270,5408],{"class":204},[134,21272,778],{"class":155},[134,21274,8602],{"class":204},[134,21276,768],{"class":182},[134,21278,21279],{"class":136,"line":2026},[134,21280,661],{"class":155},[134,21282,21283,21285],{"class":136,"line":2040},[134,21284,413],{"class":155},[134,21286,768],{"class":204},[134,21288,21289,21291,21293],{"class":136,"line":2061},[134,21290,17683],{"class":155},[134,21292,17686],{"class":204},[134,21294,6411],{"class":155},[98,21296,17692],{"id":17691},[116,21298,17696],{"id":17695},[124,21300,21301],{"className":126,"code":17699,"language":128,"meta":129,"style":129},[131,21302,21303,21307,21325,21329,21333,21367,21379,21389,21405,21427,21443,21465,21473,21479,21483],{"__ignoreMap":129},[134,21304,21305],{"class":136,"line":137},[134,21306,17706],{"class":140},[134,21308,21309,21311,21313,21315,21317,21319,21321,21323],{"class":136,"line":144},[134,21310,3968],{"class":198},[134,21312,179],{"class":155},[134,21314,5130],{"class":204},[134,21316,190],{"class":155},[134,21318,3988],{"class":198},[134,21320,640],{"class":155},[134,21322,5139],{"class":236},[134,21324,656],{"class":155},[134,21326,21327],{"class":136,"line":16},[134,21328,252],{"emptyLinePlaceholder":251},[134,21330,21331],{"class":136,"line":210},[134,21332,17733],{"class":140},[134,21334,21335,21337,21339,21341,21343,21345,21347,21349,21351,21353,21355,21357,21359,21361,21363,21365],{"class":136,"line":216},[134,21336,3643],{"class":198},[134,21338,4024],{"class":147},[134,21340,17742],{"class":204},[134,21342,225],{"class":155},[134,21344,17747],{"class":155},[134,21346,160],{"class":159},[134,21348,445],{"class":147},[134,21350,5130],{"class":159},[134,21352,778],{"class":155},[134,21354,17758],{"class":159},[134,21356,163],{"class":155},[134,21358,17763],{"class":166},[134,21360,170],{"class":155},[134,21362,173],{"class":159},[134,21364,3855],{"class":155},[134,21366,17296],{"class":147},[134,21368,21369,21371,21373,21375,21377],{"class":136,"line":248},[134,21370,17776],{"class":204},[134,21372,778],{"class":155},[134,21374,5199],{"class":151},[134,21376,230],{"class":204},[134,21378,1698],{"class":155},[134,21380,21381,21383,21385,21387],{"class":136,"line":255},[134,21382,16846],{"class":182},[134,21384,170],{"class":155},[134,21386,17793],{"class":204},[134,21388,695],{"class":155},[134,21390,21391,21393,21395,21397,21399,21401,21403],{"class":136,"line":261},[134,21392,16863],{"class":182},[134,21394,170],{"class":155},[134,21396,5130],{"class":204},[134,21398,778],{"class":155},[134,21400,5199],{"class":151},[134,21402,230],{"class":204},[134,21404,1698],{"class":155},[134,21406,21407,21409,21411,21413,21415,21417,21419,21421,21423,21425],{"class":136,"line":296},[134,21408,16872],{"class":182},[134,21410,170],{"class":155},[134,21412,5130],{"class":204},[134,21414,778],{"class":155},[134,21416,410],{"class":151},[134,21418,5218],{"class":204},[134,21420,778],{"class":155},[134,21422,17830],{"class":151},[134,21424,5218],{"class":204},[134,21426,695],{"class":155},[134,21428,21429,21431,21433,21435,21437,21439,21441],{"class":136,"line":307},[134,21430,16894],{"class":182},[134,21432,170],{"class":155},[134,21434,5130],{"class":204},[134,21436,778],{"class":155},[134,21438,410],{"class":151},[134,21440,5218],{"class":204},[134,21442,695],{"class":155},[134,21444,21445,21447,21449,21451,21453,21455,21457,21459,21461,21463],{"class":136,"line":312},[134,21446,17855],{"class":182},[134,21448,170],{"class":155},[134,21450,5130],{"class":204},[134,21452,778],{"class":155},[134,21454,410],{"class":151},[134,21456,5218],{"class":204},[134,21458,778],{"class":155},[134,21460,17870],{"class":151},[134,21462,5218],{"class":204},[134,21464,695],{"class":155},[134,21466,21467,21469,21471],{"class":136,"line":698},[134,21468,4225],{"class":155},[134,21470,3855],{"class":204},[134,21472,695],{"class":155},[134,21474,21475,21477],{"class":136,"line":29},[134,21476,4326],{"class":155},[134,21478,768],{"class":204},[134,21480,21481],{"class":136,"line":771},[134,21482,252],{"emptyLinePlaceholder":251},[134,21484,21485,21487,21489,21491,21493,21495,21497,21499,21501,21503,21505,21507,21509,21511,21513,21515,21517],{"class":136,"line":787},[134,21486,3643],{"class":198},[134,21488,16553],{"class":147},[134,21490,591],{"class":159},[134,21492,156],{"class":155},[134,21494,160],{"class":159},[134,21496,438],{"class":155},[134,21498,398],{"class":155},[134,21500,5130],{"class":159},[134,21502,778],{"class":155},[134,21504,462],{"class":159},[134,21506,156],{"class":155},[134,21508,17919],{"class":159},[134,21510,17922],{"class":155},[134,21512,17925],{"class":204},[134,21514,156],{"class":155},[134,21516,160],{"class":159},[134,21518,9993],{"class":155},[116,21520,17935],{"id":17934},[124,21522,21523],{"className":126,"code":17938,"language":128,"meta":129,"style":129},[131,21524,21525,21529,21547,21551,21569,21591,21617,21657,21663,21667,21689],{"__ignoreMap":129},[134,21526,21527],{"class":136,"line":137},[134,21528,17945],{"class":140},[134,21530,21531,21533,21535,21537,21539,21541,21543,21545],{"class":136,"line":144},[134,21532,3968],{"class":198},[134,21534,179],{"class":155},[134,21536,5130],{"class":204},[134,21538,190],{"class":155},[134,21540,3988],{"class":198},[134,21542,640],{"class":155},[134,21544,5139],{"class":236},[134,21546,656],{"class":155},[134,21548,21549],{"class":136,"line":16},[134,21550,252],{"emptyLinePlaceholder":251},[134,21552,21553,21555,21557,21559,21561,21563,21565,21567],{"class":136,"line":210},[134,21554,219],{"class":147},[134,21556,17974],{"class":204},[134,21558,225],{"class":155},[134,21560,5130],{"class":204},[134,21562,778],{"class":155},[134,21564,5199],{"class":151},[134,21566,230],{"class":204},[134,21568,1698],{"class":155},[134,21570,21571,21573,21575,21577,21579,21581,21583,21585,21587,21589],{"class":136,"line":216},[134,21572,17991],{"class":182},[134,21574,170],{"class":155},[134,21576,5130],{"class":204},[134,21578,778],{"class":155},[134,21580,410],{"class":151},[134,21582,5218],{"class":204},[134,21584,778],{"class":155},[134,21586,18006],{"class":151},[134,21588,5218],{"class":204},[134,21590,695],{"class":155},[134,21592,21593,21595,21597,21599,21601,21603,21605,21607,21609,21611,21613,21615],{"class":136,"line":248},[134,21594,18015],{"class":182},[134,21596,170],{"class":155},[134,21598,5130],{"class":204},[134,21600,778],{"class":155},[134,21602,410],{"class":151},[134,21604,5218],{"class":204},[134,21606,778],{"class":155},[134,21608,5246],{"class":151},[134,21610,230],{"class":204},[134,21612,6606],{"class":1846},[134,21614,3855],{"class":204},[134,21616,695],{"class":155},[134,21618,21619,21621,21623,21625,21627,21629,21631,21633,21635,21637,21639,21641,21643,21645,21647,21649,21651,21653,21655],{"class":136,"line":255},[134,21620,18042],{"class":182},[134,21622,170],{"class":155},[134,21624,5130],{"class":204},[134,21626,778],{"class":155},[134,21628,18051],{"class":151},[134,21630,18054],{"class":204},[134,21632,233],{"class":155},[134,21634,4195],{"class":236},[134,21636,233],{"class":155},[134,21638,3259],{"class":155},[134,21640,640],{"class":155},[134,21642,4477],{"class":236},[134,21644,233],{"class":155},[134,21646,3259],{"class":155},[134,21648,640],{"class":155},[134,21650,3444],{"class":236},[134,21652,233],{"class":155},[134,21654,18079],{"class":204},[134,21656,695],{"class":155},[134,21658,21659,21661],{"class":136,"line":261},[134,21660,413],{"class":155},[134,21662,768],{"class":204},[134,21664,21665],{"class":136,"line":296},[134,21666,252],{"emptyLinePlaceholder":251},[134,21668,21669,21671,21673,21675,21677,21679,21681,21683,21685,21687],{"class":136,"line":307},[134,21670,3643],{"class":198},[134,21672,4024],{"class":147},[134,21674,18100],{"class":204},[134,21676,225],{"class":155},[134,21678,18105],{"class":204},[134,21680,778],{"class":155},[134,21682,5390],{"class":151},[134,21684,6166],{"class":204},[134,21686,778],{"class":155},[134,21688,18116],{"class":204},[134,21690,21691,21693,21695,21697,21699,21701,21703,21705,21707,21709],{"class":136,"line":312},[134,21692,3643],{"class":198},[134,21694,16553],{"class":147},[134,21696,18125],{"class":159},[134,21698,398],{"class":155},[134,21700,5130],{"class":159},[134,21702,778],{"class":155},[134,21704,462],{"class":159},[134,21706,17922],{"class":155},[134,21708,18105],{"class":204},[134,21710,6411],{"class":155},[116,21712,18143],{"id":18142},[124,21714,21715],{"className":126,"code":18146,"language":128,"meta":129,"style":129},[131,21716,21717,21721,21739,21743,21757,21765,21769,21773,21777,21781,21785,21789,21793,21797,21801,21815,21827],{"__ignoreMap":129},[134,21718,21719],{"class":136,"line":137},[134,21720,18153],{"class":140},[134,21722,21723,21725,21727,21729,21731,21733,21735,21737],{"class":136,"line":144},[134,21724,3968],{"class":198},[134,21726,179],{"class":155},[134,21728,18162],{"class":204},[134,21730,190],{"class":155},[134,21732,3988],{"class":198},[134,21734,640],{"class":155},[134,21736,18171],{"class":236},[134,21738,656],{"class":155},[134,21740,21741],{"class":136,"line":16},[134,21742,252],{"emptyLinePlaceholder":251},[134,21744,21745,21747,21749,21751,21753,21755],{"class":136,"line":210},[134,21746,3643],{"class":198},[134,21748,6503],{"class":147},[134,21750,677],{"class":147},[134,21752,18188],{"class":151},[134,21754,5218],{"class":155},[134,21756,193],{"class":155},[134,21758,21759,21761,21763],{"class":136,"line":216},[134,21760,18197],{"class":198},[134,21762,18162],{"class":151},[134,21764,18202],{"class":155},[134,21766,21767],{"class":136,"line":248},[134,21768,18207],{"class":236},[134,21770,21771],{"class":136,"line":255},[134,21772,18212],{"class":236},[134,21774,21775],{"class":136,"line":261},[134,21776,18217],{"class":236},[134,21778,21779],{"class":136,"line":296},[134,21780,18222],{"class":236},[134,21782,21783],{"class":136,"line":307},[134,21784,18227],{"class":236},[134,21786,21787],{"class":136,"line":312},[134,21788,18232],{"class":236},[134,21790,21791],{"class":136,"line":698},[134,21792,18237],{"class":155},[134,21794,21795],{"class":136,"line":29},[134,21796,213],{"class":155},[134,21798,21799],{"class":136,"line":771},[134,21800,252],{"emptyLinePlaceholder":251},[134,21802,21803,21805,21807,21809,21811,21813],{"class":136,"line":787},[134,21804,3643],{"class":198},[134,21806,6503],{"class":147},[134,21808,677],{"class":147},[134,21810,18256],{"class":151},[134,21812,5218],{"class":155},[134,21814,193],{"class":155},[134,21816,21817,21819,21821,21823,21825],{"class":136,"line":1944},[134,21818,18197],{"class":198},[134,21820,18162],{"class":151},[134,21822,504],{"class":155},[134,21824,18271],{"class":236},[134,21826,18202],{"class":155},[134,21828,21829],{"class":136,"line":1964},[134,21830,213],{"class":155},[98,21832,18281],{"id":18280},[116,21834,18285],{"id":18284},[124,21836,21837],{"className":126,"code":18288,"language":128,"meta":129,"style":129},[131,21838,21839,21843,21867,21893,21919,21939,21965,21995,22031],{"__ignoreMap":129},[134,21840,21841],{"class":136,"line":137},[134,21842,18295],{"class":140},[134,21844,21845,21847,21849,21851,21853,21855,21857,21859,21861,21863,21865],{"class":136,"line":144},[134,21846,3643],{"class":198},[134,21848,4024],{"class":147},[134,21850,9361],{"class":204},[134,21852,225],{"class":155},[134,21854,16266],{"class":151},[134,21856,230],{"class":204},[134,21858,233],{"class":155},[134,21860,18314],{"class":236},[134,21862,233],{"class":155},[134,21864,3259],{"class":155},[134,21866,193],{"class":155},[134,21868,21869,21871,21873,21875,21877,21879,21881,21883,21885,21887,21889,21891],{"class":136,"line":16},[134,21870,688],{"class":182},[134,21872,170],{"class":155},[134,21874,16281],{"class":151},[134,21876,230],{"class":204},[134,21878,233],{"class":155},[134,21880,762],{"class":236},[134,21882,233],{"class":155},[134,21884,3855],{"class":204},[134,21886,778],{"class":155},[134,21888,16386],{"class":151},[134,21890,5218],{"class":204},[134,21892,695],{"class":155},[134,21894,21895,21897,21899,21901,21903,21905,21907,21909,21911,21913,21915,21917],{"class":136,"line":210},[134,21896,4940],{"class":182},[134,21898,170],{"class":155},[134,21900,16271],{"class":151},[134,21902,230],{"class":204},[134,21904,233],{"class":155},[134,21906,8602],{"class":236},[134,21908,233],{"class":155},[134,21910,3855],{"class":204},[134,21912,778],{"class":155},[134,21914,16420],{"class":151},[134,21916,5218],{"class":204},[134,21918,695],{"class":155},[134,21920,21921,21923,21925,21927,21929,21931,21933,21935,21937],{"class":136,"line":216},[134,21922,18377],{"class":182},[134,21924,170],{"class":155},[134,21926,16271],{"class":151},[134,21928,230],{"class":204},[134,21930,233],{"class":155},[134,21932,18388],{"class":236},[134,21934,233],{"class":155},[134,21936,3855],{"class":204},[134,21938,695],{"class":155},[134,21940,21941,21943,21945,21947,21949,21951,21953,21955,21957,21959,21961,21963],{"class":136,"line":248},[134,21942,9292],{"class":182},[134,21944,170],{"class":155},[134,21946,18403],{"class":151},[134,21948,230],{"class":204},[134,21950,233],{"class":155},[134,21952,18410],{"class":236},[134,21954,233],{"class":155},[134,21956,3855],{"class":204},[134,21958,778],{"class":155},[134,21960,16420],{"class":151},[134,21962,5218],{"class":204},[134,21964,695],{"class":155},[134,21966,21967,21969,21971,21973,21975,21977,21979,21981,21983,21985,21987,21989,21991,21993],{"class":136,"line":255},[134,21968,18427],{"class":182},[134,21970,170],{"class":155},[134,21972,18432],{"class":151},[134,21974,230],{"class":204},[134,21976,233],{"class":155},[134,21978,18439],{"class":236},[134,21980,233],{"class":155},[134,21982,3855],{"class":204},[134,21984,778],{"class":155},[134,21986,18448],{"class":151},[134,21988,230],{"class":204},[134,21990,5552],{"class":1846},[134,21992,3855],{"class":204},[134,21994,695],{"class":155},[134,21996,21997,21999,22001,22003,22005,22007,22009,22011,22013,22015,22017,22019,22021,22023,22025,22027,22029],{"class":136,"line":261},[134,21998,18461],{"class":182},[134,22000,170],{"class":155},[134,22002,16281],{"class":151},[134,22004,230],{"class":204},[134,22006,233],{"class":155},[134,22008,18472],{"class":236},[134,22010,233],{"class":155},[134,22012,3855],{"class":204},[134,22014,778],{"class":155},[134,22016,18481],{"class":151},[134,22018,230],{"class":204},[134,22020,5218],{"class":155},[134,22022,6372],{"class":147},[134,22024,18490],{"class":204},[134,22026,778],{"class":155},[134,22028,18495],{"class":204},[134,22030,695],{"class":155},[134,22032,22033,22035],{"class":136,"line":296},[134,22034,413],{"class":155},[134,22036,768],{"class":204},[116,22038,18507],{"id":18506},[124,22040,22041],{"className":126,"code":18510,"language":128,"meta":129,"style":129},[131,22042,22043,22047,22057,22067,22115,22129,22161,22165,22193,22217,22225,22235,22245,22249,22255,22259,22273,22303,22307,22311,22335,22339],{"__ignoreMap":129},[134,22044,22045],{"class":136,"line":137},[134,22046,18517],{"class":140},[134,22048,22049,22051,22053,22055],{"class":136,"line":144},[134,22050,16699],{"class":204},[134,22052,778],{"class":155},[134,22054,8664],{"class":151},[134,22056,683],{"class":204},[134,22058,22059,22061,22063,22065],{"class":136,"line":16},[134,22060,1703],{"class":155},[134,22062,18534],{"class":236},[134,22064,233],{"class":155},[134,22066,695],{"class":155},[134,22068,22069,22071,22073,22075,22077,22079,22081,22083,22085,22087,22089,22091,22093,22095,22097,22099,22101,22103,22105,22107,22109,22111,22113],{"class":136,"line":210},[134,22070,18543],{"class":151},[134,22072,230],{"class":204},[134,22074,233],{"class":155},[134,22076,18550],{"class":236},[134,22078,233],{"class":155},[134,22080,3259],{"class":155},[134,22082,5130],{"class":204},[134,22084,778],{"class":155},[134,22086,5199],{"class":151},[134,22088,230],{"class":204},[134,22090,6027],{"class":155},[134,22092,714],{"class":182},[134,22094,170],{"class":155},[134,22096,5130],{"class":204},[134,22098,778],{"class":155},[134,22100,410],{"class":151},[134,22102,5218],{"class":204},[134,22104,778],{"class":155},[134,22106,17870],{"class":151},[134,22108,6442],{"class":204},[134,22110,413],{"class":155},[134,22112,18587],{"class":204},[134,22114,695],{"class":155},[134,22116,22117,22119,22121,22123,22125,22127],{"class":136,"line":216},[134,22118,4580],{"class":147},[134,22120,4093],{"class":155},[134,22122,16737],{"class":166},[134,22124,3855],{"class":155},[134,22126,6372],{"class":147},[134,22128,193],{"class":155},[134,22130,22131,22133,22135,22137,22139,22141,22143,22145,22147,22149,22151,22153,22155,22157,22159],{"class":136,"line":248},[134,22132,6514],{"class":147},[134,22134,179],{"class":155},[134,22136,714],{"class":204},[134,22138,190],{"class":155},[134,22140,398],{"class":155},[134,22142,13912],{"class":204},[134,22144,778],{"class":155},[134,22146,5340],{"class":204},[134,22148,778],{"class":155},[134,22150,16762],{"class":151},[134,22152,230],{"class":182},[134,22154,233],{"class":155},[134,22156,18550],{"class":236},[134,22158,233],{"class":155},[134,22160,768],{"class":182},[134,22162,22163],{"class":136,"line":255},[134,22164,252],{"emptyLinePlaceholder":251},[134,22166,22167,22169,22171,22173,22175,22177,22179,22181,22183,22185,22187,22189,22191],{"class":136,"line":261},[134,22168,6514],{"class":147},[134,22170,18646],{"class":204},[134,22172,398],{"class":155},[134,22174,747],{"class":198},[134,22176,16794],{"class":204},[134,22178,778],{"class":155},[134,22180,18657],{"class":204},[134,22182,778],{"class":155},[134,22184,18314],{"class":204},[134,22186,778],{"class":155},[134,22188,18666],{"class":151},[134,22190,230],{"class":182},[134,22192,1698],{"class":155},[134,22194,22195,22197,22199,22201,22203,22205,22207,22209,22211,22213,22215],{"class":136,"line":296},[134,22196,4634],{"class":182},[134,22198,170],{"class":155},[134,22200,9428],{"class":151},[134,22202,230],{"class":182},[134,22204,18314],{"class":204},[134,22206,778],{"class":155},[134,22208,762],{"class":204},[134,22210,3259],{"class":155},[134,22212,714],{"class":204},[134,22214,3855],{"class":182},[134,22216,695],{"class":155},[134,22218,22219,22221,22223],{"class":136,"line":307},[134,22220,18699],{"class":182},[134,22222,170],{"class":155},[134,22224,193],{"class":155},[134,22226,22227,22229,22231,22233],{"class":136,"line":312},[134,22228,18708],{"class":182},[134,22230,170],{"class":155},[134,22232,3740],{"class":3739},[134,22234,695],{"class":155},[134,22236,22237,22239,22241,22243],{"class":136,"line":698},[134,22238,18719],{"class":182},[134,22240,170],{"class":155},[134,22242,3740],{"class":3739},[134,22244,695],{"class":155},[134,22246,22247],{"class":136,"line":29},[134,22248,18730],{"class":155},[134,22250,22251,22253],{"class":136,"line":771},[134,22252,4225],{"class":155},[134,22254,768],{"class":182},[134,22256,22257],{"class":136,"line":787},[134,22258,252],{"emptyLinePlaceholder":251},[134,22260,22261,22263,22265,22267,22269,22271],{"class":136,"line":1944},[134,22262,12527],{"class":198},[134,22264,4093],{"class":182},[134,22266,11420],{"class":155},[134,22268,18751],{"class":204},[134,22270,242],{"class":182},[134,22272,1698],{"class":155},[134,22274,22275,22277,22279,22281,22283,22285,22287,22289,22291,22293,22295,22297,22299,22301],{"class":136,"line":1964},[134,22276,18760],{"class":198},[134,22278,13912],{"class":204},[134,22280,778],{"class":155},[134,22282,781],{"class":151},[134,22284,230],{"class":182},[134,22286,6027],{"class":155},[134,22288,4161],{"class":182},[134,22290,170],{"class":155},[134,22292,640],{"class":155},[134,22294,18779],{"class":236},[134,22296,233],{"class":155},[134,22298,18784],{"class":155},[134,22300,3939],{"class":1846},[134,22302,768],{"class":182},[134,22304,22305],{"class":136,"line":1970},[134,22306,5608],{"class":155},[134,22308,22309],{"class":136,"line":1984},[134,22310,252],{"emptyLinePlaceholder":251},[134,22312,22313,22315,22317,22319,22321,22323,22325,22327,22329,22331,22333],{"class":136,"line":2005},[134,22314,4110],{"class":198},[134,22316,13912],{"class":204},[134,22318,778],{"class":155},[134,22320,781],{"class":151},[134,22322,230],{"class":182},[134,22324,6027],{"class":155},[134,22326,4750],{"class":182},[134,22328,170],{"class":155},[134,22330,18646],{"class":204},[134,22332,190],{"class":155},[134,22334,768],{"class":182},[134,22336,22337],{"class":136,"line":2026},[134,22338,1967],{"class":155},[134,22340,22341],{"class":136,"line":2040},[134,22342,768],{"class":204},[116,22344,18832],{"id":18831},[124,22346,22347],{"className":18835,"code":18836,"language":18837,"meta":129,"style":129},[131,22348,22349,22353,22373,22393,22397,22409,22417,22423,22427,22443,22465,22479,22493,22519,22523,22531,22535,22543,22561,22577,22593,22601],{"__ignoreMap":129},[134,22350,22351],{"class":136,"line":137},[134,22352,18844],{"class":140},[134,22354,22355,22357,22359,22361,22363,22365,22367,22369,22371],{"class":136,"line":144},[134,22356,156],{"class":155},[134,22358,17686],{"class":182},[134,22360,18853],{"class":147},[134,22362,18856],{"class":147},[134,22364,225],{"class":155},[134,22366,233],{"class":155},[134,22368,17420],{"class":236},[134,22370,233],{"class":155},[134,22372,6411],{"class":155},[134,22374,22375,22377,22379,22381,22383,22385,22387,22389,22391],{"class":136,"line":16},[134,22376,3968],{"class":198},[134,22378,16553],{"class":198},[134,22380,179],{"class":155},[134,22382,9269],{"class":204},[134,22384,190],{"class":155},[134,22386,3988],{"class":198},[134,22388,640],{"class":155},[134,22390,16664],{"class":236},[134,22392,656],{"class":155},[134,22394,22395],{"class":136,"line":210},[134,22396,252],{"emptyLinePlaceholder":251},[134,22398,22399,22401,22403,22405,22407],{"class":136,"line":216},[134,22400,219],{"class":147},[134,22402,18897],{"class":204},[134,22404,225],{"class":155},[134,22406,18902],{"class":151},[134,22408,18905],{"class":155},[134,22410,22411,22413,22415],{"class":136,"line":248},[134,22412,18910],{"class":182},[134,22414,170],{"class":155},[134,22416,18915],{"class":159},[134,22418,22419,22421],{"class":136,"line":255},[134,22420,18920],{"class":155},[134,22422,784],{"class":204},[134,22424,22425],{"class":136,"line":261},[134,22426,252],{"emptyLinePlaceholder":251},[134,22428,22429,22431,22433,22435,22437,22439,22441],{"class":136,"line":296},[134,22430,219],{"class":147},[134,22432,18933],{"class":204},[134,22434,225],{"class":155},[134,22436,18938],{"class":151},[134,22438,230],{"class":204},[134,22440,5218],{"class":155},[134,22442,17296],{"class":147},[134,22444,22445,22447,22449,22451,22453,22455,22457,22459,22461,22463],{"class":136,"line":307},[134,22446,18949],{"class":155},[134,22448,18952],{"class":204},[134,22450,778],{"class":155},[134,22452,18957],{"class":151},[134,22454,230],{"class":204},[134,22456,233],{"class":155},[134,22458,18964],{"class":236},[134,22460,233],{"class":155},[134,22462,3259],{"class":155},[134,22464,193],{"class":155},[134,22466,22467,22469,22471,22473,22475,22477],{"class":136,"line":312},[134,22468,18975],{"class":182},[134,22470,170],{"class":155},[134,22472,640],{"class":155},[134,22474,18982],{"class":236},[134,22476,233],{"class":155},[134,22478,695],{"class":155},[134,22480,22481,22483,22485,22487,22489,22491],{"class":136,"line":698},[134,22482,18991],{"class":182},[134,22484,170],{"class":155},[134,22486,640],{"class":155},[134,22488,41],{"class":236},[134,22490,233],{"class":155},[134,22492,695],{"class":155},[134,22494,22495,22497,22499,22501,22503,22505,22507,22509,22511,22513,22515,22517],{"class":136,"line":29},[134,22496,4326],{"class":155},[134,22498,3855],{"class":204},[134,22500,778],{"class":155},[134,22502,5985],{"class":151},[134,22504,230],{"class":204},[134,22506,19016],{"class":151},[134,22508,19019],{"class":204},[134,22510,778],{"class":155},[134,22512,18751],{"class":204},[134,22514,778],{"class":155},[134,22516,19028],{"class":204},[134,22518,695],{"class":155},[134,22520,22521],{"class":136,"line":771},[134,22522,768],{"class":204},[134,22524,22525,22527,22529],{"class":136,"line":787},[134,22526,17683],{"class":155},[134,22528,17686],{"class":182},[134,22530,6411],{"class":155},[134,22532,22533],{"class":136,"line":1944},[134,22534,252],{"emptyLinePlaceholder":251},[134,22536,22537,22539,22541],{"class":136,"line":1964},[134,22538,156],{"class":155},[134,22540,19053],{"class":182},[134,22542,6411],{"class":155},[134,22544,22545,22547,22549,22551,22553,22555,22557,22559],{"class":136,"line":1970},[134,22546,19060],{"class":155},[134,22548,17656],{"class":182},[134,22550,3646],{"class":147},[134,22552,225],{"class":155},[134,22554,233],{"class":155},[134,22556,19071],{"class":236},[134,22558,233],{"class":155},[134,22560,6411],{"class":155},[134,22562,22563,22565,22567,22569,22571,22573,22575],{"class":136,"line":1984},[134,22564,19080],{"class":155},[134,22566,116],{"class":182},[134,22568,438],{"class":155},[134,22570,19087],{"class":204},[134,22572,17683],{"class":155},[134,22574,116],{"class":182},[134,22576,6411],{"class":155},[134,22578,22579,22581,22583,22585,22587,22589,22591],{"class":136,"line":2005},[134,22580,19080],{"class":155},[134,22582,102],{"class":182},[134,22584,438],{"class":155},[134,22586,19104],{"class":204},[134,22588,17683],{"class":155},[134,22590,102],{"class":182},[134,22592,6411],{"class":155},[134,22594,22595,22597,22599],{"class":136,"line":2026},[134,22596,19115],{"class":155},[134,22598,17656],{"class":182},[134,22600,6411],{"class":155},[134,22602,22603,22605,22607],{"class":136,"line":2040},[134,22604,17683],{"class":155},[134,22606,19053],{"class":182},[134,22608,6411],{"class":155},[98,22610,19131],{"id":19130},[116,22612,19135],{"id":19134},[124,22614,22615],{"className":126,"code":19138,"language":128,"meta":129,"style":129},[131,22616,22617,22621,22637,22641,22645],{"__ignoreMap":129},[134,22618,22619],{"class":136,"line":137},[134,22620,19145],{"class":140},[134,22622,22623,22625,22627,22629,22631,22633,22635],{"class":136,"line":144},[134,22624,219],{"class":147},[134,22626,19152],{"class":204},[134,22628,225],{"class":155},[134,22630,14995],{"class":204},[134,22632,778],{"class":155},[134,22634,19161],{"class":204},[134,22636,19164],{"class":140},[134,22638,22639],{"class":136,"line":16},[134,22640,252],{"emptyLinePlaceholder":251},[134,22642,22643],{"class":136,"line":210},[134,22644,19173],{"class":140},[134,22646,22647,22649,22651,22653,22655,22657,22659,22661,22663,22665],{"class":136,"line":216},[134,22648,219],{"class":147},[134,22650,19152],{"class":204},[134,22652,225],{"class":155},[134,22654,14995],{"class":204},[134,22656,778],{"class":155},[134,22658,19161],{"class":204},[134,22660,4389],{"class":198},[134,22662,729],{"class":159},[134,22664,8508],{"class":155},[134,22666,5324],{"class":155},[116,22668,19199],{"id":19198},[124,22670,22671],{"className":126,"code":19202,"language":128,"meta":129,"style":129},[131,22672,22673,22677,22685,22693,22701,22705,22709,22727,22743,22747,22751,22755,22773,22795,22817,22823,22827,22845,22867,22873],{"__ignoreMap":129},[134,22674,22675],{"class":136,"line":137},[134,22676,19209],{"class":140},[134,22678,22679,22681,22683],{"class":136,"line":144},[134,22680,5797],{"class":147},[134,22682,4525],{"class":159},[134,22684,193],{"class":155},[134,22686,22687,22689,22691],{"class":136,"line":16},[134,22688,688],{"class":182},[134,22690,170],{"class":155},[134,22692,630],{"class":159},[134,22694,22695,22697,22699],{"class":136,"line":210},[134,22696,4931],{"class":182},[134,22698,170],{"class":155},[134,22700,630],{"class":159},[134,22702,22703],{"class":136,"line":216},[134,22704,213],{"class":155},[134,22706,22707],{"class":136,"line":248},[134,22708,252],{"emptyLinePlaceholder":251},[134,22710,22711,22713,22715,22717,22719,22721,22723,22725],{"class":136,"line":255},[134,22712,148],{"class":147},[134,22714,5335],{"class":151},[134,22716,230],{"class":155},[134,22718,4669],{"class":166},[134,22720,170],{"class":155},[134,22722,4392],{"class":159},[134,22724,3855],{"class":155},[134,22726,193],{"class":155},[134,22728,22729,22731,22733,22735,22737,22739,22741],{"class":136,"line":261},[134,22730,739],{"class":147},[134,22732,5408],{"class":204},[134,22734,398],{"class":155},[134,22736,4750],{"class":204},[134,22738,4395],{"class":198},[134,22740,4525],{"class":159},[134,22742,19276],{"class":140},[134,22744,22745],{"class":136,"line":296},[134,22746,213],{"class":155},[134,22748,22749],{"class":136,"line":307},[134,22750,252],{"emptyLinePlaceholder":251},[134,22752,22753],{"class":136,"line":312},[134,22754,19289],{"class":140},[134,22756,22757,22759,22761,22763,22765,22767,22769,22771],{"class":136,"line":698},[134,22758,219],{"class":147},[134,22760,19296],{"class":204},[134,22762,225],{"class":155},[134,22764,5130],{"class":204},[134,22766,778],{"class":155},[134,22768,5199],{"class":151},[134,22770,230],{"class":204},[134,22772,1698],{"class":155},[134,22774,22775,22777,22779,22781,22783,22785,22787,22789,22791,22793],{"class":136,"line":29},[134,22776,688],{"class":182},[134,22778,170],{"class":155},[134,22780,5130],{"class":204},[134,22782,778],{"class":155},[134,22784,410],{"class":151},[134,22786,5218],{"class":204},[134,22788,778],{"class":155},[134,22790,17870],{"class":151},[134,22792,5218],{"class":204},[134,22794,695],{"class":155},[134,22796,22797,22799,22801,22803,22805,22807,22809,22811,22813,22815],{"class":136,"line":771},[134,22798,4931],{"class":182},[134,22800,170],{"class":155},[134,22802,5130],{"class":204},[134,22804,778],{"class":155},[134,22806,410],{"class":151},[134,22808,5218],{"class":204},[134,22810,778],{"class":155},[134,22812,5223],{"class":151},[134,22814,5218],{"class":204},[134,22816,695],{"class":155},[134,22818,22819,22821],{"class":136,"line":787},[134,22820,413],{"class":155},[134,22822,768],{"class":204},[134,22824,22825],{"class":136,"line":1944},[134,22826,252],{"emptyLinePlaceholder":251},[134,22828,22829,22831,22833,22835,22837,22839,22841,22843],{"class":136,"line":1964},[134,22830,148],{"class":147},[134,22832,5335],{"class":151},[134,22834,230],{"class":155},[134,22836,4669],{"class":166},[134,22838,170],{"class":155},[134,22840,4392],{"class":159},[134,22842,3855],{"class":155},[134,22844,193],{"class":155},[134,22846,22847,22849,22851,22853,22855,22857,22859,22861,22863,22865],{"class":136,"line":1970},[134,22848,739],{"class":147},[134,22850,5408],{"class":204},[134,22852,398],{"class":155},[134,22854,19391],{"class":204},[134,22856,778],{"class":155},[134,22858,5390],{"class":151},[134,22860,230],{"class":182},[134,22862,4669],{"class":204},[134,22864,242],{"class":182},[134,22866,19404],{"class":140},[134,22868,22869,22871],{"class":136,"line":1984},[134,22870,199],{"class":198},[134,22872,19411],{"class":204},[134,22874,22875],{"class":136,"line":2005},[134,22876,213],{"class":155},[116,22878,19419],{"id":19418},[102,22880,22881,19425],{},[818,22882,19424],{},[124,22884,22885],{"className":19428,"code":19429,"language":19430,"meta":129,"style":129},[131,22886,22887,22891,22895,22909,22917,22931,22943,22947],{"__ignoreMap":129},[134,22888,22889],{"class":136,"line":137},[134,22890,19437],{"class":140},[134,22892,22893],{"class":136,"line":144},[134,22894,1698],{"class":155},[134,22896,22897,22899,22901,22903,22905,22907],{"class":136,"line":16},[134,22898,19446],{"class":159},[134,22900,170],{"class":151},[134,22902,640],{"class":155},[134,22904,19453],{"class":236},[134,22906,233],{"class":155},[134,22908,695],{"class":236},[134,22910,22911,22913,22915],{"class":136,"line":210},[134,22912,19462],{"class":159},[134,22914,170],{"class":151},[134,22916,193],{"class":236},[134,22918,22919,22921,22923,22925,22927,22929],{"class":136,"line":216},[134,22920,19471],{"class":159},[134,22922,170],{"class":151},[134,22924,640],{"class":155},[134,22926,19478],{"class":236},[134,22928,233],{"class":155},[134,22930,695],{"class":236},[134,22932,22933,22935,22937,22939,22941],{"class":136,"line":248},[134,22934,19487],{"class":159},[134,22936,170],{"class":151},[134,22938,640],{"class":155},[134,22940,19494],{"class":236},[134,22942,656],{"class":155},[134,22944,22945],{"class":136,"line":255},[134,22946,661],{"class":155},[134,22948,22949],{"class":136,"line":261},[134,22950,213],{"class":204},[98,22952,19508],{"id":19507},[116,22954,19512],{"id":19511},[1539,22956,22957,22961,22965,22969],{},[815,22958,22959,19520],{},[818,22960,19519],{},[815,22962,22963,19526],{},[818,22964,19525],{},[815,22966,22967,19532],{},[818,22968,19531],{},[815,22970,22971,19538],{},[818,22972,19537],{},[116,22974,19542],{"id":19541},[1539,22976,22977,22981,22985],{},[815,22978,22979,19550],{},[818,22980,19549],{},[815,22982,22983,19556],{},[818,22984,19555],{},[815,22986,22987,19562],{},[818,22988,19561],{},[116,22990,19566],{"id":19565},[1539,22992,22993,22997,23001],{},[815,22994,22995,19574],{},[818,22996,19573],{},[815,22998,22999,19580],{},[818,23000,19579],{},[815,23002,23003,19586],{},[818,23004,19585],{},[98,23006,19590],{"id":19589},[124,23008,23009],{"className":126,"code":19593,"language":128,"meta":129,"style":129},[131,23010,23011,23015,23033,23051,23055,23075,23107,23113,23117,23137,23173],{"__ignoreMap":129},[134,23012,23013],{"class":136,"line":137},[134,23014,19600],{"class":140},[134,23016,23017,23019,23021,23023,23025,23027,23029,23031],{"class":136,"line":144},[134,23018,3968],{"class":198},[134,23020,179],{"class":155},[134,23022,19609],{"class":204},[134,23024,190],{"class":155},[134,23026,3988],{"class":198},[134,23028,640],{"class":155},[134,23030,19618],{"class":236},[134,23032,656],{"class":155},[134,23034,23035,23037,23039,23041,23043,23045,23047,23049],{"class":136,"line":16},[134,23036,3968],{"class":198},[134,23038,179],{"class":155},[134,23040,17433],{"class":204},[134,23042,190],{"class":155},[134,23044,3988],{"class":198},[134,23046,640],{"class":155},[134,23048,17443],{"class":236},[134,23050,656],{"class":155},[134,23052,23053],{"class":136,"line":210},[134,23054,252],{"emptyLinePlaceholder":251},[134,23056,23057,23059,23061,23063,23065,23067,23069,23071,23073],{"class":136,"line":216},[134,23058,3444],{"class":151},[134,23060,230],{"class":204},[134,23062,233],{"class":155},[134,23064,19653],{"class":236},[134,23066,233],{"class":155},[134,23068,3259],{"class":155},[134,23070,6369],{"class":155},[134,23072,6372],{"class":147},[134,23074,193],{"class":155},[134,23076,23077,23079,23081,23083,23085,23087,23089,23091,23093,23095,23097,23099,23101,23103,23105],{"class":136,"line":248},[134,23078,19668],{"class":151},[134,23080,230],{"class":182},[134,23082,19673],{"class":204},[134,23084,778],{"class":155},[134,23086,17526],{"class":151},[134,23088,19680],{"class":182},[134,23090,778],{"class":155},[134,23092,19685],{"class":204},[134,23094,778],{"class":155},[134,23096,19690],{"class":151},[134,23098,156],{"class":155},[134,23100,4600],{"class":159},[134,23102,7032],{"class":182},[134,23104,438],{"class":155},[134,23106,784],{"class":182},[134,23108,23109,23111],{"class":136,"line":255},[134,23110,413],{"class":155},[134,23112,768],{"class":204},[134,23114,23115],{"class":136,"line":261},[134,23116,252],{"emptyLinePlaceholder":251},[134,23118,23119,23121,23123,23125,23127,23129,23131,23133,23135],{"class":136,"line":296},[134,23120,3444],{"class":151},[134,23122,230],{"class":204},[134,23124,233],{"class":155},[134,23126,19721],{"class":236},[134,23128,233],{"class":155},[134,23130,3259],{"class":155},[134,23132,6369],{"class":155},[134,23134,6372],{"class":147},[134,23136,193],{"class":155},[134,23138,23139,23141,23143,23145,23147,23149,23151,23153,23155,23157,23159,23161,23163,23165,23167,23169,23171],{"class":136,"line":307},[134,23140,19668],{"class":151},[134,23142,230],{"class":182},[134,23144,19673],{"class":204},[134,23146,778],{"class":155},[134,23148,4705],{"class":204},[134,23150,3855],{"class":182},[134,23152,778],{"class":155},[134,23154,19750],{"class":151},[134,23156,230],{"class":182},[134,23158,5552],{"class":1846},[134,23160,3855],{"class":182},[134,23162,778],{"class":155},[134,23164,19690],{"class":151},[134,23166,156],{"class":155},[134,23168,19765],{"class":159},[134,23170,438],{"class":155},[134,23172,784],{"class":182},[134,23174,23175,23177],{"class":136,"line":312},[134,23176,413],{"class":155},[134,23178,768],{"class":204},[98,23180,19779],{"id":19778},[102,23182,19782],{},[812,23184,23185,23189,23195,23201],{},[815,23186,23187,19790],{},[818,23188,19789],{},[815,23190,23191,19796,23193,19800],{},[818,23192,19795],{},[131,23194,19799],{},[815,23196,23197,19796,23199,19809],{},[818,23198,19805],{},[131,23200,19808],{},[815,23202,23203,19815],{},[818,23204,19814],{},[98,23206,849],{"id":848},[102,23208,19820],{},[102,23210,19823],{},[2571,23212],{},[102,23214,23215,19831],{},[818,23216,19830],{},[860,23218,19834],{},{"title":129,"searchDepth":144,"depth":144,"links":23220},[23221,23222,23223,23227,23233,23238,23243,23248,23253,23254,23255],{"id":16130,"depth":144,"text":16125},{"id":16136,"depth":144,"text":16137},{"id":16171,"depth":144,"text":16172,"children":23224},[23225,23226],{"id":16175,"depth":16,"text":16176},{"id":16209,"depth":16,"text":16210},{"id":16239,"depth":144,"text":16240,"children":23228},[23229,23230,23231,23232],{"id":16243,"depth":16,"text":16244},{"id":16590,"depth":16,"text":16591},{"id":16949,"depth":16,"text":16950},{"id":17395,"depth":16,"text":17396},{"id":17691,"depth":144,"text":17692,"children":23234},[23235,23236,23237],{"id":17695,"depth":16,"text":17696},{"id":17934,"depth":16,"text":17935},{"id":18142,"depth":16,"text":18143},{"id":18280,"depth":144,"text":18281,"children":23239},[23240,23241,23242],{"id":18284,"depth":16,"text":18285},{"id":18506,"depth":16,"text":18507},{"id":18831,"depth":16,"text":18832},{"id":19130,"depth":144,"text":19131,"children":23244},[23245,23246,23247],{"id":19134,"depth":16,"text":19135},{"id":19198,"depth":16,"text":19199},{"id":19418,"depth":16,"text":19419},{"id":19507,"depth":144,"text":19508,"children":23249},[23250,23251,23252],{"id":19511,"depth":16,"text":19512},{"id":19541,"depth":16,"text":19542},{"id":19565,"depth":16,"text":19566},{"id":19589,"depth":144,"text":19590},{"id":19778,"depth":144,"text":19779},{"id":848,"depth":144,"text":849},{"readingTime":19875},{"title":16125,"description":19873},{"src":19880,"mime":904,"alt":19881,"width":906,"height":907},[910,912,19884,19549,19885],{"id":23261,"title":23262,"abstract":92,"author":93,"authorUrl":92,"body":23263,"date":23806,"dateUpdated":92,"description":23807,"excerpt":92,"extension":895,"featured":251,"headline":92,"image":23808,"meta":23809,"navigation":251,"ogImage":92,"path":23811,"seo":23812,"series":92,"seriesDescription":92,"seriesOrder":92,"socialImage":92,"stem":23813,"tags":23814,"__hash__":23819},"blog/blog/36-gem-team-v1.75.0-release.md","gem-team v1.75.0 - Pre-Flight Verification, A11y Audits & Agent Quality Gates",{"type":95,"value":23264,"toc":23791},[23265,23279,23283,23287,23297,23306,23327,23336,23338,23342,23348,23373,23375,23379,23386,23523,23525,23529,23533,23543,23549,23553,23568,23571,23591,23595,23608,23610,23614,23620,23626,23699,23701,23705,23747,23749,23753,23756,23776,23778,23788],[102,23266,23267,23268,3610,23271,23274,23275,23278],{},"gem-team v1.75.0 represents a significant step toward production-grade AI-assisted development. This release focuses on ",[818,23269,23270],{},"quality gates",[818,23272,23273],{},"verification protocols",", and ",[818,23276,23277],{},"agent reasoning discipline"," - the infrastructure that turns \"AI-generated code\" into \"production-ready code.\"",[98,23280,23282],{"id":23281},"whats-new-in-v1750","What's New in v1.75.0",[116,23284,23286],{"id":23285},"new-quality-gates-verification","🚀 New Quality Gates & Verification",[102,23288,23289,23292,23293,23296],{},[818,23290,23291],{},"Pre-Flight Verification Steps"," - Every agent now runs a pre-flight checklist before executing tasks. This catches configuration issues, missing dependencies, and context gaps ",[2594,23294,23295],{},"before"," they waste tokens or produce broken output.",[102,23298,23299,4093,23302,23305],{},[818,23300,23301],{},"Visual Diff Thresholds",[131,23303,23304],{},"quality.visual_diff_threshold",") - Configure pixel-perfect or perceptual thresholds for browser testing. Catch unintended UI changes in PRs automatically.",[102,23307,23308,4093,23311,23314,23315,23317,23318,23317,23321,23317,23323,23326],{},[818,23309,23310],{},"Accessibility Audit Levels",[131,23312,23313],{},"quality.a11y_audit_level",") - Choose from ",[131,23316,1715],{}," | ",[131,23319,23320],{},"basic",[131,23322,3047],{},[131,23324,23325],{},"wcag-aa"," to enforce accessibility standards at the agent level. The new A11y cache uses page snapshot hashes for instant re-runs.",[102,23328,23329,4093,23332,23335],{},[818,23330,23331],{},"Screenshot on Failure",[131,23333,23334],{},"testing.screenshot_on_failure",") - Automatic visual capture when browser tests fail, making debugging visual regressions trivial.",[2571,23337],{},[116,23339,23341],{"id":23340},"documentation-agent-discipline","📝 Documentation & Agent Discipline",[102,23343,23344,23347],{},[818,23345,23346],{},"Impact Triage & Scope Discipline"," - Agent documentation now includes explicit impact triage (low/medium/high/critical) and scope discipline rules. Agents must declare blast radius before acting.",[102,23349,23350,23353,23354,23317,23356,23359,23360,23317,23363,23317,23366,23317,23369,23372],{},[818,23351,23352],{},"gem-designer-mobile Parsing Modes"," - New parsing mode descriptions for mobile UI analysis: ",[131,23355,4705],{},[131,23357,23358],{},"validate"," with scope targeting (",[131,23361,23362],{},"component",[131,23364,23365],{},"screen",[131,23367,23368],{},"navigation",[131,23370,23371],{},"design_system",").",[2571,23374],{},[116,23376,23378],{"id":23377},"housekeeping-major-agent-workflow-improvements","🧹 Housekeeping: Major Agent Workflow Improvements",[102,23380,23381,23382,23385],{},"This release includes ",[818,23383,23384],{},"15+ housekeeping commits"," that fundamentally improve how agents reason and execute:",[23387,23388,23389,23405],"table",{},[23390,23391,23392],"thead",{},[23393,23394,23395,23399,23402],"tr",{},[23396,23397,23398],"th",{"align":7985},"Improvement",[23396,23400,23401],{"align":7985},"Agent(s) Affected",[23396,23403,23404],{"align":7985},"Impact",[23406,23407,23408,23422,23435,23448,23460,23473,23486,23498,23510],"tbody",{},[23393,23409,23410,23416,23419],{},[23411,23412,23413],"td",{"align":7985},[818,23414,23415],{},"Devil's Advocate Step",[23411,23417,23418],{"align":7985},"All agents",[23411,23420,23421],{"align":7985},"Agents now explicitly challenge their own assumptions before proceeding",[23393,23423,23424,23429,23432],{},[23411,23425,23426],{"align":7985},[818,23427,23428],{},"Differential Diagnosis",[23411,23430,23431],{"align":7985},"gem-debugger",[23411,23433,23434],{"align":7985},"Structured root-cause analysis with minimal reproduction steps",[23393,23436,23437,23442,23445],{},[23411,23438,23439],{"align":7985},[818,23440,23441],{},"Hypothesis-Driven Planning",[23411,23443,23444],{"align":7985},"gem-planner",[23411,23446,23447],{"align":7985},"Plans start with falsifiable hypotheses, not assumptions",[23393,23449,23450,23455,23457],{},[23411,23451,23452],{"align":7985},[818,23453,23454],{},"Ownership Principle",[23411,23456,23418],{"align":7985},[23411,23458,23459],{"align":7985},"Clear ownership declarations prevent diffusion of responsibility",[23393,23461,23462,23467,23470],{},[23411,23463,23464],{"align":7985},[818,23465,23466],{},"Budget Enforcement",[23411,23468,23469],{"align":7985},"gem-researcher",[23411,23471,23472],{"align":7985},"Token/time budgets with early-exit criteria",[23393,23474,23475,23480,23483],{},[23411,23476,23477],{"align":7985},[818,23478,23479],{},"Scope Conflict Handling",[23411,23481,23482],{"align":7985},"gem-orchestrator",[23411,23484,23485],{"align":7985},"Detects and resolves conflicting task scopes in wave scheduling",[23393,23487,23488,23493,23495],{},[23411,23489,23490],{"align":7985},[818,23491,23492],{},"Contradiction Validation",[23411,23494,23418],{"align":7985},[23411,23496,23497],{"align":7985},"Flags incomplete reasoning and logical contradictions",[23393,23499,23500,23505,23507],{},[23411,23501,23502],{"align":7985},[818,23503,23504],{},"Step-by-Step Validation",[23411,23506,23418],{"align":7985},[23411,23508,23509],{"align":7985},"Mandatory checkpoints at each workflow phase",[23393,23511,23512,23517,23520],{},[23411,23513,23514],{"align":7985},[818,23515,23516],{},"Edge Case Expansion",[23411,23518,23519],{"align":7985},"gem-debugger, gem-planner",[23411,23521,23522],{"align":7985},"Red step now includes edge case enumeration",[2571,23524],{},[98,23526,23528],{"id":23527},"why-this-matters","Why This Matters",[116,23530,23532],{"id":23531},"from-vibe-coding-to-verified-engineering","From \"Vibe Coding\" to Verified Engineering",[102,23534,23535,23536,23539,23540,778],{},"Early AI coding tools optimized for ",[2594,23537,23538],{},"speed of generation",". gem-team optimizes for ",[818,23541,23542],{},"correctness of outcome",[102,23544,23545,23546,23548],{},"The v1.75.0 quality gates mean:\n-when an agent won't just \"write code\" - it will verify the code compiles, passes tests, meets accessibility standards, and doesn't introduce visual regressions ",[2594,23547,23295],{}," presenting it to you.",[116,23550,23552],{"id":23551},"agent-reasoning-you-can-audit","Agent Reasoning You Can Audit",[102,23554,23555,23556,23559,23560,23563,23564,23567],{},"The Devil's Advocate step, Differential Diagnosis, and Hypothesis-Driven Planning create an ",[818,23557,23558],{},"audit trail of reasoning",". You can see ",[2594,23561,23562],{},"why"," an agent made a decision, not just ",[2594,23565,23566],{},"what"," it produced.",[102,23569,23570],{},"This is critical for:",[1539,23572,23573,23579,23585],{},[815,23574,23575,23578],{},[818,23576,23577],{},"Code review"," - Review the reasoning, not just the diff",[815,23580,23581,23584],{},[818,23582,23583],{},"Compliance"," - Demonstrate due diligence in AI-assisted development",[815,23586,23587,23590],{},[818,23588,23589],{},"Learning"," - Understand patterns that lead to better outcomes",[116,23592,23594],{"id":23593},"production-ready-defaults","Production-Ready Defaults",[102,23596,23597,23598,3610,23601,3610,23604,23607],{},"The new configuration options (",[131,23599,23600],{},"visual_diff_threshold",[131,23602,23603],{},"a11y_audit_level",[131,23605,23606],{},"screenshot_on_failure",") have sensible defaults but are fully tunable. Teams can start strict and relax, or start permissive and tighten - the framework adapts to your maturity.",[2571,23609],{},[98,23611,23613],{"id":23612},"migration-guide","Migration Guide",[102,23615,23616,23619],{},[818,23617,23618],{},"No breaking changes"," in v1.75.0. All new features are opt-in via configuration.",[102,23621,23622,23623,170],{},"To enable pre-flight verification globally, add to your ",[131,23624,23625],{},".gem-team.yaml",[124,23627,23631],{"className":23628,"code":23629,"language":23630,"meta":129,"style":129},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","orchestrator:\n pre_flight_verification: true\n quality:\n visual_diff_threshold: 0.02 # 2% pixel difference\n a11y_audit_level: \"wcag-aa\"\n testing:\n screenshot_on_failure: true\n","yaml",[131,23632,23633,23641,23650,23657,23670,23683,23690],{"__ignoreMap":129},[134,23634,23635,23638],{"class":136,"line":137},[134,23636,23637],{"class":182},"orchestrator",[134,23639,23640],{"class":155},":\n",[134,23642,23643,23646,23648],{"class":136,"line":144},[134,23644,23645],{"class":182}," pre_flight_verification",[134,23647,170],{"class":155},[134,23649,3210],{"class":3739},[134,23651,23652,23655],{"class":136,"line":16},[134,23653,23654],{"class":182}," quality",[134,23656,23640],{"class":155},[134,23658,23659,23662,23664,23667],{"class":136,"line":210},[134,23660,23661],{"class":182}," visual_diff_threshold",[134,23663,170],{"class":155},[134,23665,23666],{"class":1846}," 0.02",[134,23668,23669],{"class":140}," # 2% pixel difference\n",[134,23671,23672,23675,23677,23679,23681],{"class":136,"line":216},[134,23673,23674],{"class":182}," a11y_audit_level",[134,23676,170],{"class":155},[134,23678,640],{"class":155},[134,23680,23325],{"class":236},[134,23682,656],{"class":155},[134,23684,23685,23688],{"class":136,"line":248},[134,23686,23687],{"class":182}," testing",[134,23689,23640],{"class":155},[134,23691,23692,23695,23697],{"class":136,"line":255},[134,23693,23694],{"class":182}," screenshot_on_failure",[134,23696,170],{"class":155},[134,23698,3210],{"class":3739},[2571,23700],{},[98,23702,23704],{"id":23703},"links-resources","Links & Resources",[1539,23706,23707,23717,23727,23737],{},[815,23708,23709,23711,23712],{},[818,23710,52],{},": ",[1559,23713,23716],{"href":23714,"rel":23715},"https://github.com/mubaidr/gem-team",[1563],"mubaidr/gem-team",[815,23718,23719,23711,23722],{},[818,23720,23721],{},"Changelog",[1559,23723,23726],{"href":23724,"rel":23725},"https://github.com/mubaidr/gem-team/blob/main/CHANGELOG.md",[1563],"CHANGELOG.md",[815,23728,23729,23711,23732],{},[818,23730,23731],{},"Installation",[1559,23733,23736],{"href":23734,"rel":23735},"https://github.com/mubaidr/gem-team#quick-start",[1563],"Quick Start Guide",[815,23738,23739,23711,23742],{},[818,23740,23741],{},"Documentation",[1559,23743,23746],{"href":23744,"rel":23745},"https://github.com/mubaidr/gem-team/tree/main/.apm/agents",[1563],"Agent Reference",[2571,23748],{},[98,23750,23752],{"id":23751},"whats-next","What's Next",[102,23754,23755],{},"v1.76.0 will focus on:",[1539,23757,23758,23764,23770],{},[815,23759,23760,23763],{},[818,23761,23762],{},"Skill extraction automation"," - Convert successful patterns into reusable agent skills",[815,23765,23766,23769],{},[818,23767,23768],{},"Cross-agent memory sharing"," - Context envelope improvements for multi-agent workflows",[815,23771,23772,23775],{},[818,23773,23774],{},"MCP server integration"," - Native Model Context Protocol support for external tool access",[2571,23777],{},[102,23779,23780],{},[2594,23781,23782,23783,23787],{},"gem-team is an open-source multi-agent orchestration framework for AI-assisted development. Built by developers, for developers. ",[1559,23784,23786],{"href":23714,"rel":23785},[1563],"Star us on GitHub"," if you find it useful.",[860,23789,23790],{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":129,"searchDepth":144,"depth":144,"links":23792},[23793,23798,23803,23804,23805],{"id":23281,"depth":144,"text":23282,"children":23794},[23795,23796,23797],{"id":23285,"depth":16,"text":23286},{"id":23340,"depth":16,"text":23341},{"id":23377,"depth":16,"text":23378},{"id":23527,"depth":144,"text":23528,"children":23799},[23800,23801,23802],{"id":23531,"depth":16,"text":23532},{"id":23551,"depth":16,"text":23552},{"id":23593,"depth":16,"text":23594},{"id":23612,"depth":144,"text":23613},{"id":23703,"depth":144,"text":23704},{"id":23751,"depth":144,"text":23752},"2026-06-22","gem-team v1.75.0 introduces pre-flight verification steps, visual diff thresholds, accessibility audit levels, and major agent workflow improvements including Devil's Advocate, Differential Diagnosis, and Hypothesis-driven planning.","/img/blog/36-gem-team-v1.75.0-release/banner.svg",{"readingTime":23810},"6 min read","/blog/36-gem-team-v1.75.0-release",{"title":23262,"description":23807},"blog/36-gem-team-v1.75.0-release",[23815,23816,23817,23818,913],"Gem Team","AI Agents","Open Source","Release Notes","p94w-3EimXwfUOMXZeTz9GvTtz_Bth-0CGtfwtpNkxM",{"id":23821,"title":23822,"abstract":92,"author":93,"authorUrl":92,"body":23823,"date":25005,"dateUpdated":25005,"description":25006,"excerpt":92,"extension":895,"featured":251,"headline":92,"image":92,"meta":25007,"navigation":251,"ogImage":92,"path":25009,"seo":25010,"series":25011,"seriesDescription":25012,"seriesOrder":137,"socialImage":25013,"stem":25016,"tags":25017,"__hash__":25022},"blog/blog/21-react-compiler-manual-memoization-end.md","React Compiler and the End of Manual Memoization",{"type":95,"value":23824,"toc":24963},[23825,23828,23841,23844,23848,23851,23871,23874,23878,23881,23885,23895,23899,23907,23911,23914,23918,23921,23925,23928,23942,24249,24252,24256,24259,24319,24323,24326,24411,24413,24416,24420,24423,24427,24430,24434,24437,24441,24444,24470,24472,24475,24479,24505,24509,24541,24545,24571,24575,24578,24582,24585,24796,24800,24803,24879,24883,24886,24890,24893,24895,24899,24907,24911,24914,24918,24921,24925,24928,24932,24935,24939,24942,24946,24949,24951,24954,24957,24960],[98,23826,23822],{"id":23827},"react-compiler-and-the-end-of-manual-memoization",[102,23829,23830,23831,3610,23834,23274,23837,23840],{},"The React development landscape changed forever with the stable release of the React Compiler in late 2025. Now in 2026, manually writing ",[131,23832,23833],{},"useMemo",[131,23835,23836],{},"useCallback",[131,23838,23839],{},"React.memo"," has become legacy practice—like manually managing memory in languages with garbage collection. After migrating several large React and Next.js applications to use the React Compiler, I've witnessed dramatic improvements in both performance and code quality.",[102,23842,23843],{},"In this comprehensive guide, we'll explore how the React Compiler works, understand why manual memoization is now obsolete, and learn the new best practices for writing high-performance React applications in 2026. Whether you're building with React, Next.js, or React-based frameworks, understanding these changes is essential for modern development.",[98,23845,23847],{"id":23846},"the-problem-with-manual-memoization","The Problem with Manual Memoization",[102,23849,23850],{},"For years, React developers have been burdened with manual performance optimization. Every component required careful consideration of:",[1539,23852,23853,23858,23863,23868],{},[815,23854,23855,23856],{},"When to wrap functions in ",[131,23857,23836],{},[815,23859,23860,23861],{},"Which values to memoize with ",[131,23862,23833],{},[815,23864,23865,23866],{},"Which components should use ",[131,23867,23839],{},[815,23869,23870],{},"What dependencies to include in dependency arrays",[102,23872,23873],{},"This cognitive overhead led to several common problems:",[116,23875,23877],{"id":23876},"premature-optimization","Premature Optimization",[102,23879,23880],{},"Developers often added memoization everywhere \"just in case,\" resulting in code that was harder to read and maintain without meaningful performance benefits. This premature optimization wasted development time and added unnecessary complexity.",[116,23882,23884],{"id":23883},"missing-dependencies","Missing Dependencies",[102,23886,23887,23888,23891,23892,23894],{},"Incorrect dependency arrays in ",[131,23889,23890],{},"useEffect"," and ",[131,23893,23836],{}," caused subtle bugs where stale closures captured outdated values. These bugs were notoriously difficult to track down and fix.",[116,23896,23898],{"id":23897},"over-memoization","Over-Memoization",[102,23900,23901,23902,23891,23904,23906],{},"Excessive use of ",[131,23903,23833],{},[131,23905,23836],{}," created memory overhead and made code harder to understand. The performance cost of memoization itself sometimes outweighed the benefits.",[116,23908,23910],{"id":23909},"inconsistent-patterns","Inconsistent Patterns",[102,23912,23913],{},"Different team members had different opinions on when to memoize, leading to inconsistent codebases where some components were heavily optimized while others weren't optimized at all.",[98,23915,23917],{"id":23916},"how-the-react-compiler-works","How the React Compiler Works",[102,23919,23920],{},"The React Compiler uses sophisticated static analysis to automatically determine which components and values need memoization. It analyzes your code at build time and inserts optimal memoization automatically.",[116,23922,23924],{"id":23923},"automatic-memoization","Automatic Memoization",[102,23926,23927],{},"The compiler identifies:",[1539,23929,23930,23933,23936,23939],{},[815,23931,23932],{},"Components that should be memoized",[815,23934,23935],{},"Functions that should be wrapped in callbacks",[815,23937,23938],{},"Values that should be cached",[815,23940,23941],{},"Optimal dependency arrays based on actual usage",[124,23943,23945],{"className":126,"code":23944,"language":128,"meta":129,"style":129},"// Before React Compiler (manual memoization)\nfunction UserProfile({ userId }) {\n const fetchUser = useCallback(async () => {\n const response = await fetch(`/api/users/${userId}`)\n return response.json()\n }, [userId])\n\n const user = useMemo(() => {\n return transformUserData(rawUser)\n }, [rawUser])\n\n return
{user.name}
\n}\n\n// After React Compiler (automatic memoization)\nfunction UserProfile({ userId }) {\n const fetchUser = async () => {\n const response = await fetch(`/api/users/${userId}`)\n return response.json()\n }\n\n const user = transformUserData(rawUser)\n\n return
{user.name}
\n}\n",[131,23946,23947,23952,23967,23988,24015,24027,24039,24043,24062,24076,24086,24090,24114,24118,24122,24127,24141,24157,24183,24195,24199,24203,24219,24223,24245],{"__ignoreMap":129},[134,23948,23949],{"class":136,"line":137},[134,23950,23951],{"class":140},"// Before React Compiler (manual memoization)\n",[134,23953,23954,23956,23959,23961,23963,23965],{"class":136,"line":144},[134,23955,148],{"class":147},[134,23957,23958],{"class":151}," UserProfile",[134,23960,17632],{"class":155},[134,23962,12333],{"class":166},[134,23964,12933],{"class":155},[134,23966,193],{"class":155},[134,23968,23969,23971,23973,23975,23978,23980,23982,23984,23986],{"class":136,"line":16},[134,23970,739],{"class":147},[134,23972,680],{"class":204},[134,23974,398],{"class":155},[134,23976,23977],{"class":151}," useCallback",[134,23979,230],{"class":182},[134,23981,674],{"class":147},[134,23983,6369],{"class":155},[134,23985,6372],{"class":147},[134,23987,193],{"class":155},[134,23989,23990,23992,23994,23996,23998,24000,24002,24004,24006,24008,24011,24013],{"class":136,"line":210},[134,23991,6514],{"class":147},[134,23993,742],{"class":204},[134,23995,398],{"class":155},[134,23997,747],{"class":198},[134,23999,750],{"class":151},[134,24001,230],{"class":182},[134,24003,504],{"class":155},[134,24005,757],{"class":236},[134,24007,407],{"class":155},[134,24009,24010],{"class":204},"userId",[134,24012,765],{"class":155},[134,24014,768],{"class":182},[134,24016,24017,24019,24021,24023,24025],{"class":136,"line":216},[134,24018,4110],{"class":198},[134,24020,742],{"class":204},[134,24022,778],{"class":155},[134,24024,781],{"class":151},[134,24026,784],{"class":182},[134,24028,24029,24032,24034,24036],{"class":136,"line":248},[134,24030,24031],{"class":155}," },",[134,24033,2991],{"class":182},[134,24035,24010],{"class":204},[134,24037,24038],{"class":182},"])\n",[134,24040,24041],{"class":136,"line":255},[134,24042,252],{"emptyLinePlaceholder":251},[134,24044,24045,24047,24049,24051,24054,24056,24058,24060],{"class":136,"line":261},[134,24046,739],{"class":147},[134,24048,5408],{"class":204},[134,24050,398],{"class":155},[134,24052,24053],{"class":151}," useMemo",[134,24055,230],{"class":182},[134,24057,5218],{"class":155},[134,24059,6372],{"class":147},[134,24061,193],{"class":155},[134,24063,24064,24066,24069,24071,24074],{"class":136,"line":296},[134,24065,4110],{"class":198},[134,24067,24068],{"class":151}," transformUserData",[134,24070,230],{"class":182},[134,24072,24073],{"class":204},"rawUser",[134,24075,768],{"class":182},[134,24077,24078,24080,24082,24084],{"class":136,"line":307},[134,24079,24031],{"class":155},[134,24081,2991],{"class":182},[134,24083,24073],{"class":204},[134,24085,24038],{"class":182},[134,24087,24088],{"class":136,"line":312},[134,24089,252],{"emptyLinePlaceholder":251},[134,24091,24092,24094,24096,24098,24100,24102,24105,24107,24110,24112],{"class":136,"line":698},[134,24093,199],{"class":198},[134,24095,17747],{"class":182},[134,24097,17656],{"class":159},[134,24099,438],{"class":182},[134,24101,6027],{"class":155},[134,24103,24104],{"class":182},"user.",[134,24106,8602],{"class":204},[134,24108,24109],{"class":155},"} {\n onAddToCart(product)\n trackEvent('add_to_cart', { productId: product.id })\n }\n\n return (\n
\n {products.map(product => (\n \n ))}\n
\n )\n}\n",[131,24589,24590,24595,24616,24635,24646,24679,24683,24687,24693,24701,24720,24728,24743,24754,24766,24771,24778,24787,24792],{"__ignoreMap":129},[134,24591,24592],{"class":136,"line":137},[134,24593,24594],{"class":140},"// Good: Clear, readable code\n",[134,24596,24597,24599,24602,24604,24607,24609,24612,24614],{"class":136,"line":144},[134,24598,148],{"class":147},[134,24600,24601],{"class":151}," ProductList",[134,24603,17632],{"class":155},[134,24605,24606],{"class":166}," products",[134,24608,3259],{"class":155},[134,24610,24611],{"class":166}," onAddToCart",[134,24613,12933],{"class":155},[134,24615,193],{"class":155},[134,24617,24618,24620,24623,24625,24627,24629,24631,24633],{"class":136,"line":16},[134,24619,739],{"class":147},[134,24621,24622],{"class":204}," handleAddToCart",[134,24624,398],{"class":155},[134,24626,4093],{"class":155},[134,24628,18751],{"class":166},[134,24630,3855],{"class":155},[134,24632,6372],{"class":147},[134,24634,193],{"class":155},[134,24636,24637,24640,24642,24644],{"class":136,"line":210},[134,24638,24639],{"class":151}," onAddToCart",[134,24641,230],{"class":182},[134,24643,18751],{"class":204},[134,24645,768],{"class":182},[134,24647,24648,24651,24653,24655,24658,24660,24662,24664,24667,24669,24671,24673,24675,24677],{"class":136,"line":216},[134,24649,24650],{"class":151}," trackEvent",[134,24652,230],{"class":182},[134,24654,17506],{"class":155},[134,24656,24657],{"class":236},"add_to_cart",[134,24659,17506],{"class":155},[134,24661,3259],{"class":155},[134,24663,179],{"class":155},[134,24665,24666],{"class":182}," productId",[134,24668,170],{"class":155},[134,24670,18646],{"class":204},[134,24672,778],{"class":155},[134,24674,762],{"class":204},[134,24676,190],{"class":155},[134,24678,768],{"class":182},[134,24680,24681],{"class":136,"line":248},[134,24682,661],{"class":155},[134,24684,24685],{"class":136,"line":255},[134,24686,252],{"emptyLinePlaceholder":251},[134,24688,24689,24691],{"class":136,"line":261},[134,24690,199],{"class":198},[134,24692,4032],{"class":182},[134,24694,24695,24697,24699],{"class":136,"line":296},[134,24696,19080],{"class":182},[134,24698,17656],{"class":159},[134,24700,6411],{"class":182},[134,24702,24703,24706,24708,24710,24712,24714,24716,24718],{"class":136,"line":307},[134,24704,24705],{"class":155}," {",[134,24707,18314],{"class":166},[134,24709,778],{"class":182},[134,24711,11973],{"class":166},[134,24713,230],{"class":182},[134,24715,18751],{"class":166},[134,24717,6372],{"class":155},[134,24719,4032],{"class":182},[134,24721,24722,24725],{"class":136,"line":312},[134,24723,24724],{"class":155}," <",[134,24726,24727],{"class":166},"ProductCard\n",[134,24729,24730,24733,24736,24739,24741],{"class":136,"line":698},[134,24731,24732],{"class":204}," key",[134,24734,24735],{"class":155},"={",[134,24737,24738],{"class":182},"product.",[134,24740,762],{"class":204},[134,24742,213],{"class":155},[134,24744,24745,24748,24750,24752],{"class":136,"line":29},[134,24746,24747],{"class":204}," product",[134,24749,24735],{"class":155},[134,24751,18751],{"class":204},[134,24753,213],{"class":155},[134,24755,24756,24759,24761,24764],{"class":136,"line":771},[134,24757,24758],{"class":204}," onAddToCart",[134,24760,24735],{"class":155},[134,24762,24763],{"class":204},"handleAddToCart",[134,24765,213],{"class":155},[134,24767,24768],{"class":136,"line":787},[134,24769,24770],{"class":155}," />\n",[134,24772,24773,24776],{"class":136,"line":1944},[134,24774,24775],{"class":182}," ))",[134,24777,213],{"class":155},[134,24779,24780,24783,24785],{"class":136,"line":1964},[134,24781,24782],{"class":155},"