[{"data":1,"prerenderedAt":936},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fthe-future-of-time-in-javascript-transitioning-to-the-native-temporal-api":142,"\u002Fblog\u002Fthe-future-of-time-in-javascript-transitioning-to-the-native-temporal-api-surround":933},[4],{"title":5,"path":6,"stem":7,"children":8,"page":141},"Blog","\u002Fblog","blog",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137],{"title":10,"path":11,"stem":12},"VueJS Introducing Dynamic Layouts using the Atomic Design Principles","\u002Fblog\u002Fvuejs-introducing-dynamic-layouts-using-the-atomic-design-principles","blog\u002F001.vuejs-introducing-dynamic-layouts-using-the-atomic-design-principles",{"title":14,"path":15,"stem":16},"Understanding JavaScript and Its Quirks","\u002Fblog\u002Funderstanding-javascript-and-its-quirks","blog\u002F002.understanding-javascript-and-its-quirks",{"title":18,"path":19,"stem":20},"Introducing Vue’s latest experimental Vapor Mode","\u002Fblog\u002Fintroducing-vues-latest-experimental-vapor-mode","blog\u002F003.introducing-vues-latest-experimental-vapor-mode",{"title":22,"path":23,"stem":24},"ECMAScript 2024 Nears Finalization","\u002Fblog\u002Fecmascript-2024-nears-finalization","blog\u002F004.ecmascript-2024-nears-finalization",{"title":26,"path":27,"stem":28},"UI Libraries for VueJS: Vuetify, Tailwind, and PrimeVue","\u002Fblog\u002Fui-libraries-for-vuejs-vuetify-tailwind-and-primevue","blog\u002F005.ui-libraries-for-vuejs-vuetify-tailwind-and-primevue",{"title":30,"path":31,"stem":32},"Micro Frontend Architecture","\u002Fblog\u002Fmicro-frontend-architecture","blog\u002F006.micro-frontend-architecture",{"title":34,"path":35,"stem":36},"Pre-rendering and Hydration in Vue.js","\u002Fblog\u002Fpre-rendering-and-hydration-in-vuejs","blog\u002F007.pre-rendering-and-hydration-in-vuejs",{"title":38,"path":39,"stem":40},"Satori by Vercel — Dynamic Image Generation in JavaScript","\u002Fblog\u002Fsatori-by-vercel-dynamic-image-generation-in-javascript","blog\u002F008.satori-by-vercel-dynamic-image-generation-in-javascript",{"title":42,"path":43,"stem":44},"Vue.js and Progressive Web Apps (PWA) – Enhancing Web Experiences","\u002Fblog\u002Fvuejs-and-progressive-web-apps-pwa-enhancing-web-experiences","blog\u002F009.vuejs-and-progressive-web-apps-pwa-enhancing-web-experiences",{"title":46,"path":47,"stem":48},"Moving from a Traditional Node.js CRUD API to Serverless Architecture—A Deep Dive","\u002Fblog\u002Fmoving-from-a-traditional-nodejs-crud-api-to-serverless-architecturea-deep-dive","blog\u002F010.moving-from-a-traditional-nodejs-crud-api-to-serverless-architecturea-deep-dive",{"title":50,"path":51,"stem":52},"Nuxt 3 and Serverless Edge Functions—Unlocking Performance and Scalability","\u002Fblog\u002Fnuxt-3-and-serverless-edge-functionsunlocking-performance-and-scalability","blog\u002F011.nuxt-3-and-serverless-edge-functionsunlocking-performance-and-scalability",{"title":54,"path":55,"stem":56},"A Tribute to Asa Bain: Thank You for Everything","\u002Fblog\u002Fa-tribute-to-asa-bain-thank-you-for-everything","blog\u002F012.a-tribute-to-asa-bain-thank-you-for-everything",{"title":58,"path":59,"stem":60},"Migrating JavaScript to TypeScript in ASP.NET MVC Projects","\u002Fblog\u002Fmigrating-javascript-to-typescript-in-aspnet-mvc-projects","blog\u002F013.migrating-javascript-to-typescript-in-aspnet-mvc-projects",{"title":62,"path":63,"stem":64},"Modernizing Classic ASP.NET MVC with Vue.js","\u002Fblog\u002Fmodernizing-classic-aspnet-mvc-with-vuejs","blog\u002F014.modernizing-classic-aspnet-mvc-with-vuejs",{"title":66,"path":67,"stem":68},"Which UI JavaScript Framework Should You Use?","\u002Fblog\u002Fwhich-ui-javascript-framework-should-you-use","blog\u002F015.which-ui-javascript-framework-should-you-use",{"title":70,"path":71,"stem":72},"Vue + AI Integration Workflows: Enhancing Developer Productivity","\u002Fblog\u002Fvue-ai-integration-workflows-enhancing-developer-productivity","blog\u002F016.vue-ai-integration-workflows-enhancing-developer-productivity",{"title":74,"path":75,"stem":76},"OpenAPI Standards & Scalar Integration for Node.js Apps","\u002Fblog\u002Fopenapi-standards-scalar-integration-for-nodejs-apps","blog\u002F017.openapi-standards-scalar-integration-for-nodejs-apps",{"title":78,"path":79,"stem":80},"Nuxt 3.17 — Data Fetching Improvements","\u002Fblog\u002Fnuxt-317-data-fetching-improvements","blog\u002F019.nuxt-317-data-fetching-improvements",{"title":82,"path":83,"stem":84},"Subdomain-Based Multi-Tenancy in Nuxt","\u002Fblog\u002Fsubdomain-based-multi-tenancy-in-nuxt","blog\u002F020.subdomain-based-multi-tenancy-in-nuxt",{"title":86,"path":87,"stem":88},"Type-Safe Backends with TypeScript: tRPC, Zod, and Drizzle ORM","\u002Fblog\u002Ftype-safe-backends-with-typescript-trpc-zod-and-drizzle-orm","blog\u002F021.type-safe-backends-with-typescript-trpc-zod-and-drizzle-orm",{"title":90,"path":91,"stem":92},"Unit Testing Vue Applications with Vitest and Agentic AI","\u002Fblog\u002Funit-testing-vue-applications-with-vitest-and-agentic-ai","blog\u002F022.unit-testing-vue-applications-with-vitest-and-agentic-ai",{"title":94,"path":95,"stem":96},"Hidden Features & Lesser-Known TypeScript Gems","\u002Fblog\u002Fhidden-features-lesser-known-typescript-gems","blog\u002F023.hidden-features-lesser-known-typescript-gems",{"title":98,"path":99,"stem":100},"Nuxt\u002FVercel Acquisition and Its Impact on NuxtHub Users","\u002Fblog\u002Fnuxtvercel-acquisition-and-its-impact-on-nuxthub-users","blog\u002F024.nuxtvercel-acquisition-and-its-impact-on-nuxthub-users",{"title":102,"path":103,"stem":104},"State of Vue & Nuxt Ecosystem 2025","\u002Fblog\u002Fstate-of-vue-nuxt-ecosystem-2025","blog\u002F025.state-of-vue-nuxt-ecosystem-2025",{"title":106,"path":107,"stem":108},"Feature Adoption in TypeScript Over Time","\u002Fblog\u002Ffeature-adoption-in-typescript-over-time","blog\u002F026.feature-adoption-in-typescript-over-time",{"title":110,"path":111,"stem":112},"Migrating From WordPress to Nuxt Content & Using Nuxt Studio","\u002Fblog\u002Fmigrating-from-wordpress-to-nuxt-content-using-nuxt-studio","blog\u002F027.migrating-from-wordpress-to-nuxt-content-using-nuxt-studio",{"title":114,"path":115,"stem":116},"Strategic Topic: The “Rust-ification” of Tooling (Biome & Rolldown)","\u002Fblog\u002Fstrategic-topic-the-rust-ification-of-tooling-biome-rolldown","blog\u002F028.strategic-topic-the-rust-ification-of-tooling-biome-rolldown",{"title":118,"path":119,"stem":120},"Nuxt 4 and the Evolving Full-Stack Framework Landscape","\u002Fblog\u002Fnuxt-4-and-the-evolving-full-stack-framework-landscape","blog\u002F029.nuxt-4-and-the-evolving-full-stack-framework-landscape",{"title":122,"path":123,"stem":124},"Bun as a JavaScript Runtime: Evaluating Readiness Beyond Node.js","\u002Fblog\u002Fbun-as-a-javascript-runtime-evaluating-readiness-beyond-nodejs","blog\u002F030.bun-as-a-javascript-runtime-evaluating-readiness-beyond-nodejs",{"title":126,"path":127,"stem":128},"Top 10 Nuxt Modules That Supercharge Your App From Day One Introduction","\u002Fblog\u002Ftop-10-nuxt-modules-that-supercharge-your-app-from-day-one-introduction","blog\u002F031.top-10-nuxt-modules-that-supercharge-your-app-from-day-one-introduction",{"title":130,"path":131,"stem":132},"Strategic Topic: Vite+, VoidZero, and the Future of Frontend Tooling","\u002Fblog\u002Fstrategic-topic-vite-voidzero-and-the-future-of-frontend-tooling","blog\u002F032.strategic-topic-vite-voidzero-and-the-future-of-frontend-tooling",{"title":134,"path":135,"stem":136},"The Future of Time in JavaScript: Transitioning to the Native Temporal API","\u002Fblog\u002Fthe-future-of-time-in-javascript-transitioning-to-the-native-temporal-api","blog\u002F033.the-future-of-time-in-javascript-transitioning-to-the-native-temporal-api",{"title":138,"path":139,"stem":140},"Understanding Hydration Issues in Nuxt and How Nuxt Hints Helps","\u002Fblog\u002Funderstanding-hydration-issues-in-nuxt-and-how-nuxt-hints-helps","blog\u002F034.understanding-hydration-issues-in-nuxt-and-how-nuxt-hints-helps",false,{"id":143,"title":134,"author":144,"body":148,"date":926,"description":927,"extension":928,"image":929,"meta":930,"minRead":427,"navigation":538,"path":135,"seo":931,"stem":136,"__hash__":932},"blog\u002Fblog\u002F033.the-future-of-time-in-javascript-transitioning-to-the-native-temporal-api.md",{"name":145,"avatar":146},"Sean Erick C. Ramones",{"src":147,"alt":145},"\u002Favatars\u002Fprofile-image-1.png",{"type":149,"value":150,"toc":910},"minimark",[151,156,174,185,189,192,230,233,237,240,348,353,358,361,458,463,466,590,592,596,607,611,620,624,634,639,641,797,799,803,809,836,842,863,865,869,876,906],[152,153,155],"h2",{"id":154},"_1-introduction","1. Introduction",[157,158,159,160,164,165,169,170,173],"p",{},"For decades, the JavaScript ",[161,162,163],"code",{},"Date"," object has been the \"Achilles' heel\" of the language, as it’s mutable, lacks timezone intelligence, and is generally unpredictable. This forced us to rely on heavy libraries like ",[166,167,168],"strong",{},"Moment.js"," or utility sets like ",[166,171,172],{},"date-fns",".",[157,175,176,177,180,181,184],{},"As of early 2026, the ",[166,178,179],{},"Temporal API"," has reached stable, native support across all major evergreen browsers. It provides a modern, developer-friendly, and ",[166,182,183],{},"immutable"," way to handle date and time. For our team, this means smaller bundle sizes, fewer \"off-by-one\" bugs, and cleaner code.",[152,186,188],{"id":187},"_2-the-temporal-type-model","2. The Temporal Type Model",[157,190,191],{},"Temporal doesn't just give us one \"Date\" object; it gives us specialized types for specific needs. This prevents us from accidentally using a timezone where we only need a calendar date.",[193,194,195,204,212,220],"ul",{},[196,197,198,203],"li",{},[166,199,200],{},[161,201,202],{},"Temporal.Instant",": A fixed point in time (UTC).",[196,205,206,211],{},[166,207,208],{},[161,209,210],{},"Temporal.PlainDate",": A date with no time or timezone (e.g., \"2026-05-12\").",[196,213,214,219],{},[166,215,216],{},[161,217,218],{},"Temporal.ZonedDateTime",": A date and time within a specific timezone.",[196,221,222,223,226,229],{},"**",[161,224,225],{},"Temporal.Duration",[227,228,227],"em",{},": For math (e.g., \"add 2 hours and 5 minutes\").",[231,232],"hr",{},[152,234,236],{"id":235},"_3-comparative-analysis","3. Comparative Analysis",[157,238,239],{},"How does our current logic stack up against the new native standard?",[241,242,243,268],"table",{},[244,245,246],"thead",{},[247,248,249,255,259,263],"tr",{},[250,251,252],"th",{},[166,253,254],{},"Feature",[250,256,257],{},[166,258,168],{},[250,260,261],{},[166,262,172],{},[250,264,265],{},[166,266,267],{},"Temporal (Native)",[269,270,271,291,308,326],"tbody",{},[247,272,273,279,282,285],{},[274,275,276],"td",{},[166,277,278],{},"Mutability",[274,280,281],{},"❌ Mutable (Risky)",[274,283,284],{},"✅ Immutable",[274,286,287,288],{},"✅ ",[166,289,290],{},"Immutable",[247,292,293,298,301,303],{},[274,294,295],{},[166,296,297],{},"Timezones",[274,299,300],{},"⚠️ Needs Plugin",[274,302,300],{},[274,304,287,305],{},[166,306,307],{},"Built-in (IANA)",[247,309,310,315,318,321],{},[274,311,312],{},[166,313,314],{},"Bundle Size",[274,316,317],{},"❌ ~200KB",[274,319,320],{},"✅ Tree-shakable",[274,322,287,323],{},[166,324,325],{},"0KB (Native)",[247,327,328,333,338,343],{},[274,329,330],{},[166,331,332],{},"Arithmetic",[274,334,335],{},[161,336,337],{},".add(1, 'day')",[274,339,340],{},[161,341,342],{},"addDays(date, 1)",[274,344,345],{},[161,346,347],{},"date.add({ days: 1 })",[349,350,352],"h3",{"id":351},"code-snippet-adding-time-comparison","Code Snippet: Adding Time & Comparison",[157,354,355],{},[166,356,357],{},"Legacy (Moment):",[157,359,360],{},"JavaScript",[362,363,368],"pre",{"className":364,"code":365,"language":366,"meta":367,"style":367},"language-jsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const delivery = moment().add(7, 'days');\nif (delivery.isAfter(moment())) { \u002F* ... *\u002F }\n","jsx","",[161,369,370,425],{"__ignoreMap":367},[371,372,375,379,383,387,391,394,396,399,402,406,409,412,416,419,422],"span",{"class":373,"line":374},"line",1,[371,376,378],{"class":377},"spNyl","const",[371,380,382],{"class":381},"sTEyZ"," delivery ",[371,384,386],{"class":385},"sMK4o","=",[371,388,390],{"class":389},"s2Zo4"," moment",[371,392,393],{"class":381},"()",[371,395,173],{"class":385},[371,397,398],{"class":389},"add",[371,400,401],{"class":381},"(",[371,403,405],{"class":404},"sbssI","7",[371,407,408],{"class":385},",",[371,410,411],{"class":385}," '",[371,413,415],{"class":414},"sfazB","days",[371,417,418],{"class":385},"'",[371,420,421],{"class":381},")",[371,423,424],{"class":385},";\n",[371,426,428,432,435,437,440,442,445,448,451,455],{"class":373,"line":427},2,[371,429,431],{"class":430},"s7zQu","if",[371,433,434],{"class":381}," (delivery",[371,436,173],{"class":385},[371,438,439],{"class":389},"isAfter",[371,441,401],{"class":381},[371,443,444],{"class":389},"moment",[371,446,447],{"class":381},"())) ",[371,449,450],{"class":385},"{",[371,452,454],{"class":453},"sHwdD"," \u002F* ... *\u002F",[371,456,457],{"class":385}," }\n",[157,459,460],{},[166,461,462],{},"Modern (Temporal):",[157,464,465],{},"TypeScript",[362,467,469],{"className":364,"code":468,"language":366,"meta":367,"style":367},"const today = Temporal.Now.plainDateISO();\nconst delivery = today.add({ days: 7 });\n\nif (Temporal.PlainDate.compare(delivery, today) > 0) {\n  \u002F\u002F Logic is clean, native, and type-safe\n}\n",[161,470,471,497,533,540,578,584],{"__ignoreMap":367},[371,472,473,475,478,480,483,485,488,490,493,495],{"class":373,"line":374},[371,474,378],{"class":377},[371,476,477],{"class":381}," today ",[371,479,386],{"class":385},[371,481,482],{"class":381}," Temporal",[371,484,173],{"class":385},[371,486,487],{"class":381},"Now",[371,489,173],{"class":385},[371,491,492],{"class":389},"plainDateISO",[371,494,393],{"class":381},[371,496,424],{"class":385},[371,498,499,501,503,505,508,510,512,514,516,520,523,526,529,531],{"class":373,"line":427},[371,500,378],{"class":377},[371,502,382],{"class":381},[371,504,386],{"class":385},[371,506,507],{"class":381}," today",[371,509,173],{"class":385},[371,511,398],{"class":389},[371,513,401],{"class":381},[371,515,450],{"class":385},[371,517,519],{"class":518},"swJcz"," days",[371,521,522],{"class":385},":",[371,524,525],{"class":404}," 7",[371,527,528],{"class":385}," }",[371,530,421],{"class":381},[371,532,424],{"class":385},[371,534,536],{"class":373,"line":535},3,[371,537,539],{"emptyLinePlaceholder":538},true,"\n",[371,541,543,545,548,550,553,555,558,561,563,566,569,572,575],{"class":373,"line":542},4,[371,544,431],{"class":430},[371,546,547],{"class":381}," (Temporal",[371,549,173],{"class":385},[371,551,552],{"class":381},"PlainDate",[371,554,173],{"class":385},[371,556,557],{"class":389},"compare",[371,559,560],{"class":381},"(delivery",[371,562,408],{"class":385},[371,564,565],{"class":381}," today) ",[371,567,568],{"class":385},">",[371,570,571],{"class":404}," 0",[371,573,574],{"class":381},") ",[371,576,577],{"class":385},"{\n",[371,579,581],{"class":373,"line":580},5,[371,582,583],{"class":453},"  \u002F\u002F Logic is clean, native, and type-safe\n",[371,585,587],{"class":373,"line":586},6,[371,588,589],{"class":385},"}\n",[231,591],{},[152,593,595],{"id":594},"_4-application-to-project-preesh","4. Application to Project Preesh",[157,597,598,599,602,603,606],{},"Currently, ",[166,600,601],{},"Preesh"," uses ",[161,604,605],{},"@internationalized\u002Fdate"," (via React Aria). While this library served us well, it’s an extra dependency we can eventually phase out.",[349,608,610],{"id":609},"the-problem","The Problem",[157,612,613,615,616,619],{},[161,614,605],{}," objects like ",[161,617,618],{},"CalendarDate"," are proprietary. They don’t play well with standard JS methods or third-party logging without conversion.",[349,621,623],{"id":622},"the-strategy-the-hybrid-bridge","The Strategy: \"The Hybrid Bridge\"",[157,625,626,627,629,630,633],{},"We cannot replace ",[161,628,605],{}," in our UI components (like the DatePicker) because they are strictly typed. However, we should move all ",[166,631,632],{},"Business Logic"," to Temporal.",[157,635,636],{},[166,637,638],{},"Example: Calculating a Discount Expiry in Preesh",[157,640,465],{},[362,642,644],{"className":364,"code":643,"language":366,"meta":367,"style":367},"\u002F\u002F 1. Do the heavy lifting in Native Temporal\nconst dateStart= Temporal.Now.plainDateISO();\nconst dateEnd = dateStart.add({ weeks: 2 });\n\n\u002F\u002F 2. Bridge to the UI (if needed for a Calendar component)\nconst uiDate = new CalendarDate(dateEnd.year, dateEnd.month, dateEnd.day);\n\n\u002F\u002F 3. Logic remains clean\nconst daysLeft = dateStart.until(dateEnd).days;\n",[161,645,646,651,674,707,711,716,760,765,771],{"__ignoreMap":367},[371,647,648],{"class":373,"line":374},[371,649,650],{"class":453},"\u002F\u002F 1. Do the heavy lifting in Native Temporal\n",[371,652,653,655,658,660,662,664,666,668,670,672],{"class":373,"line":427},[371,654,378],{"class":377},[371,656,657],{"class":381}," dateStart",[371,659,386],{"class":385},[371,661,482],{"class":381},[371,663,173],{"class":385},[371,665,487],{"class":381},[371,667,173],{"class":385},[371,669,492],{"class":389},[371,671,393],{"class":381},[371,673,424],{"class":385},[371,675,676,678,681,683,685,687,689,691,693,696,698,701,703,705],{"class":373,"line":535},[371,677,378],{"class":377},[371,679,680],{"class":381}," dateEnd ",[371,682,386],{"class":385},[371,684,657],{"class":381},[371,686,173],{"class":385},[371,688,398],{"class":389},[371,690,401],{"class":381},[371,692,450],{"class":385},[371,694,695],{"class":518}," weeks",[371,697,522],{"class":385},[371,699,700],{"class":404}," 2",[371,702,528],{"class":385},[371,704,421],{"class":381},[371,706,424],{"class":385},[371,708,709],{"class":373,"line":542},[371,710,539],{"emptyLinePlaceholder":538},[371,712,713],{"class":373,"line":580},[371,714,715],{"class":453},"\u002F\u002F 2. Bridge to the UI (if needed for a Calendar component)\n",[371,717,718,720,723,725,728,731,734,736,739,741,744,746,749,751,753,755,758],{"class":373,"line":586},[371,719,378],{"class":377},[371,721,722],{"class":381}," uiDate ",[371,724,386],{"class":385},[371,726,727],{"class":385}," new",[371,729,730],{"class":389}," CalendarDate",[371,732,733],{"class":381},"(dateEnd",[371,735,173],{"class":385},[371,737,738],{"class":381},"year",[371,740,408],{"class":385},[371,742,743],{"class":381}," dateEnd",[371,745,173],{"class":385},[371,747,748],{"class":381},"month",[371,750,408],{"class":385},[371,752,743],{"class":381},[371,754,173],{"class":385},[371,756,757],{"class":381},"day)",[371,759,424],{"class":385},[371,761,763],{"class":373,"line":762},7,[371,764,539],{"emptyLinePlaceholder":538},[371,766,768],{"class":373,"line":767},8,[371,769,770],{"class":453},"\u002F\u002F 3. Logic remains clean\n",[371,772,774,776,779,781,783,785,788,791,793,795],{"class":373,"line":773},9,[371,775,378],{"class":377},[371,777,778],{"class":381}," daysLeft ",[371,780,386],{"class":385},[371,782,657],{"class":381},[371,784,173],{"class":385},[371,786,787],{"class":389},"until",[371,789,790],{"class":381},"(dateEnd)",[371,792,173],{"class":385},[371,794,415],{"class":381},[371,796,424],{"class":385},[231,798],{},[152,800,802],{"id":801},"_5-pros-and-cons","5. Pros and Cons",[349,804,806],{"id":805},"pros",[166,807,808],{},"Pros",[193,810,811,817,830],{},[196,812,813,816],{},[166,814,815],{},"Performance:"," No library to download or parse; it's built into the engine.",[196,818,819,822,823,826,827,173],{},[166,820,821],{},"Reliability:"," Immutability means ",[161,824,825],{},"dateA"," will never be accidentally changed by a function calculating ",[161,828,829],{},"dateB",[196,831,832,835],{},[166,833,834],{},"Future-Proof:"," This is the official ECMAScript standard.",[349,837,839],{"id":838},"cons",[166,840,841],{},"Cons",[193,843,844,854],{},[196,845,846,849,850,853],{},[166,847,848],{},"Environment Support:"," Older browsers (pre-2025) will require a polyfill (",[161,851,852],{},"@js-temporal\u002Fpolyfill",").",[196,855,856,859,860,862],{},[166,857,858],{},"Learning Curve:"," The API is much larger than the old ",[161,861,163],{}," object because it is more precise.",[231,864],{},[152,866,868],{"id":867},"_6-recommendation-next-steps","6. Recommendation & Next Steps",[157,870,871,872,875],{},"My recommendation is we start a ",[166,873,874],{},"\"Soft Migration\""," in Preesh:",[877,878,879,889,899],"ol",{},[196,880,881,882,885,886,173],{},"Use ",[166,883,884],{},"Temporal"," for all new utility functions in ",[161,887,888],{},"src\u002Futils",[196,890,891,892,894,895,898],{},"Keep ",[161,893,605],{}," exclusively for the ",[161,896,897],{},"value"," props of UI components.",[196,900,901,902,905],{},"Audit our ",[161,903,904],{},"package.json"," to see if we can remove any old date utility libraries to save bundle space.",[907,908,909],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":367,"searchDepth":427,"depth":427,"links":911},[912,913,914,917,921,925],{"id":154,"depth":427,"text":155},{"id":187,"depth":427,"text":188},{"id":235,"depth":427,"text":236,"children":915},[916],{"id":351,"depth":535,"text":352},{"id":594,"depth":427,"text":595,"children":918},[919,920],{"id":609,"depth":535,"text":610},{"id":622,"depth":535,"text":623},{"id":801,"depth":427,"text":802,"children":922},[923,924],{"id":805,"depth":535,"text":808},{"id":838,"depth":535,"text":841},{"id":867,"depth":427,"text":868},"2026-02-01","*By Sean Erick C. Ramones, Vue SME | JavaScript\u002FTypeScript SME*","md","https:\u002F\u002Fimages.pexels.com\u002Fphotos\u002F34212896\u002Fpexels-photo-34212896.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",{},{"title":134,"description":927},"ofS2AW4NGwqfgb0dmN9_RSU7tVTGMjQGTgxbUXl5mro",[934,935],{"title":130,"path":131,"stem":132,"description":927,"children":-1},{"title":138,"path":139,"stem":140,"description":927,"children":-1},1779638275902]