[{"data":1,"prerenderedAt":874},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fmigrating-javascript-to-typescript-in-aspnet-mvc-projects":142,"\u002Fblog\u002Fmigrating-javascript-to-typescript-in-aspnet-mvc-projects-surround":869},[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":58,"author":144,"body":148,"date":861,"description":862,"extension":863,"image":864,"meta":865,"minRead":250,"navigation":866,"path":59,"seo":867,"stem":60,"__hash__":868},"blog\u002Fblog\u002F013.migrating-javascript-to-typescript-in-aspnet-mvc-projects.md",{"name":145,"avatar":146},"Sean Erick C. Ramones",{"src":147,"alt":145},"\u002Favatars\u002Fprofile-image-1.png",{"type":149,"value":150,"toc":859},"minimark",[151,159,164,402,405,410,434,436,441,519,521,527,811,813,818,838,840,846,853,855],[152,153,154,158],"p",{},[155,156,157],"strong",{},"Introduction","\nMany legacy ASP.NET MVC applications rely on JavaScript for client-side behavior. While JavaScript is flexible, it lacks the static typing and development-time tooling that modern TypeScript provides. Migrating to TypeScript can significantly improve code maintainability, reduce bugs, and enhance developer productivity. This report explores how to incrementally adopt TypeScript in an existing ASP.NET MVC project, including recommended practices and tooling.",[152,160,161],{},[155,162,163],{},"Getting Started",[165,166,167,208,377],"ol",{},[168,169,170,173],"li",{},[155,171,172],{},"Install TypeScript",[174,175,176],"ul",{},[168,177,178,179],{},"Install globally or as a dev dependency:",[180,181,186],"pre",{"className":182,"code":183,"language":184,"meta":185,"style":185},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install -D typescript\n","bash","",[187,188,189],"code",{"__ignoreMap":185},[190,191,194,198,202,205],"span",{"class":192,"line":193},"line",1,[190,195,197],{"class":196},"sBMFI","npm",[190,199,201],{"class":200},"sfazB"," install",[190,203,204],{"class":200}," -D",[190,206,207],{"class":200}," typescript\n",[168,209,210,216],{},[155,211,212,213],{},"Create a ",[187,214,215],{},"tsconfig.json",[180,217,221],{"className":218,"code":219,"language":220,"meta":185,"style":185},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"compilerOptions\": {\n    \"target\": \"es6\",\n    \"module\": \"commonjs\",\n    \"outDir\": \"wwwroot\u002Fjs\",\n    \"rootDir\": \"Scripts\u002Fts\",\n    \"strict\": true,\n    \"esModuleInterop\": true\n  }\n}\n","json",[187,222,223,229,248,272,293,314,335,350,365,371],{"__ignoreMap":185},[190,224,225],{"class":192,"line":193},[190,226,228],{"class":227},"sMK4o","{\n",[190,230,232,235,239,242,245],{"class":192,"line":231},2,[190,233,234],{"class":227},"  \"",[190,236,238],{"class":237},"spNyl","compilerOptions",[190,240,241],{"class":227},"\"",[190,243,244],{"class":227},":",[190,246,247],{"class":227}," {\n",[190,249,251,254,257,259,261,264,267,269],{"class":192,"line":250},3,[190,252,253],{"class":227},"    \"",[190,255,256],{"class":196},"target",[190,258,241],{"class":227},[190,260,244],{"class":227},[190,262,263],{"class":227}," \"",[190,265,266],{"class":200},"es6",[190,268,241],{"class":227},[190,270,271],{"class":227},",\n",[190,273,275,277,280,282,284,286,289,291],{"class":192,"line":274},4,[190,276,253],{"class":227},[190,278,279],{"class":196},"module",[190,281,241],{"class":227},[190,283,244],{"class":227},[190,285,263],{"class":227},[190,287,288],{"class":200},"commonjs",[190,290,241],{"class":227},[190,292,271],{"class":227},[190,294,296,298,301,303,305,307,310,312],{"class":192,"line":295},5,[190,297,253],{"class":227},[190,299,300],{"class":196},"outDir",[190,302,241],{"class":227},[190,304,244],{"class":227},[190,306,263],{"class":227},[190,308,309],{"class":200},"wwwroot\u002Fjs",[190,311,241],{"class":227},[190,313,271],{"class":227},[190,315,317,319,322,324,326,328,331,333],{"class":192,"line":316},6,[190,318,253],{"class":227},[190,320,321],{"class":196},"rootDir",[190,323,241],{"class":227},[190,325,244],{"class":227},[190,327,263],{"class":227},[190,329,330],{"class":200},"Scripts\u002Fts",[190,332,241],{"class":227},[190,334,271],{"class":227},[190,336,338,340,343,345,347],{"class":192,"line":337},7,[190,339,253],{"class":227},[190,341,342],{"class":196},"strict",[190,344,241],{"class":227},[190,346,244],{"class":227},[190,348,349],{"class":227}," true,\n",[190,351,353,355,358,360,362],{"class":192,"line":352},8,[190,354,253],{"class":227},[190,356,357],{"class":196},"esModuleInterop",[190,359,241],{"class":227},[190,361,244],{"class":227},[190,363,364],{"class":227}," true\n",[190,366,368],{"class":192,"line":367},9,[190,369,370],{"class":227},"  }\n",[190,372,374],{"class":192,"line":373},10,[190,375,376],{"class":227},"}\n",[168,378,379,382],{},[155,380,381],{},"Directory Structure Suggestion",[174,383,384,390,396],{},[168,385,386,389],{},[187,387,388],{},"Scripts\u002Fjs\u002F"," → legacy JavaScript files",[168,391,392,395],{},[187,393,394],{},"Scripts\u002Fts\u002F"," → new TypeScript files",[168,397,398,401],{},[187,399,400],{},"wwwroot\u002Fjs\u002F"," → compiled JavaScript output",[403,404],"hr",{},[152,406,407],{},[155,408,409],{},"Integrating with ASP.NET MVC Views",[174,411,412,423],{},[168,413,414,415,418,419,422],{},"Compile ",[187,416,417],{},".ts"," files to ",[187,420,421],{},".js"," and reference them in your Razor views just like normal JavaScript files.",[168,424,425,426,429,430,433],{},"Use bundling\u002Fminification tools such as ",[155,427,428],{},"Bundler & Minifier"," or integrate with ",[155,431,432],{},"Webpack"," (see below).",[403,435],{},[152,437,438],{},[155,439,440],{},"Incremental Migration Strategy",[165,442,443,465,490],{},[168,444,445,448],{},[155,446,447],{},"Start with TypeScript-Compatible JavaScript",[174,449,450,458],{},[168,451,452,453,418,455,457],{},"Rename ",[187,454,421],{},[187,456,417],{}," and fix immediate type issues.",[168,459,460,461,464],{},"Use ",[187,462,463],{},"@ts-ignore"," where absolutely necessary to suppress errors temporarily.",[168,466,467,470],{},[155,468,469],{},"Add Types Gradually",[174,471,472,479],{},[168,473,474,475,478],{},"Leverage ",[187,476,477],{},"any"," for legacy code where typing is unclear.",[168,480,481,482,485,486,489],{},"Introduce ",[187,483,484],{},"interface","s and ",[187,487,488],{},"type","s as you refactor or touch code.",[168,491,492,495],{},[155,493,494],{},"Use Declaration Files",[174,496,497],{},[168,498,499,500],{},"Install type definitions for third-party libraries:",[180,501,503],{"className":182,"code":502,"language":184,"meta":185,"style":185},"npm install -D @types\u002Fjquery @types\u002Fbootstrap\n",[187,504,505],{"__ignoreMap":185},[190,506,507,509,511,513,516],{"class":192,"line":193},[190,508,197],{"class":196},[190,510,201],{"class":200},[190,512,204],{"class":200},[190,514,515],{"class":200}," @types\u002Fjquery",[190,517,518],{"class":200}," @types\u002Fbootstrap\n",[403,520],{},[152,522,523,526],{},[155,524,525],{},"Optional: Webpack Integration","\nFor better asset bundling and live reload:",[165,528,529,556],{},[168,530,531,534],{},[155,532,533],{},"Install Webpack and Loaders",[180,535,537],{"className":182,"code":536,"language":184,"meta":185,"style":185},"npm install -D webpack webpack-cli ts-loader\n",[187,538,539],{"__ignoreMap":185},[190,540,541,543,545,547,550,553],{"class":192,"line":193},[190,542,197],{"class":196},[190,544,201],{"class":200},[190,546,204],{"class":200},[190,548,549],{"class":200}," webpack",[190,551,552],{"class":200}," webpack-cli",[190,554,555],{"class":200}," ts-loader\n",[168,557,558,564],{},[155,559,560,561],{},"Example ",[187,562,563],{},"webpack.config.js",[180,565,569],{"className":566,"code":567,"language":568,"meta":185,"style":185},"language-jsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","module.exports = {\n  entry: '.\u002FScripts\u002Fts\u002Fapp.ts',\n  module: {\n    rules: [\n      {\n        test: \u002F\\.ts$\u002F,\n        use: 'ts-loader',\n        exclude: \u002Fnode_modules\u002F\n      }\n    ]\n  },\n  resolve: {\n    extensions: ['.ts', '.js']\n  },\n  output: {\n    filename: 'bundle.js',\n    path: path.resolve(__dirname, 'wwwroot\u002Fjs')\n  }\n};\n","jsx",[187,570,571,581,600,609,620,625,650,666,681,686,691,697,707,736,741,751,768,800,805],{"__ignoreMap":185},[190,572,573,576,579],{"class":192,"line":193},[190,574,575],{"class":227},"module.exports",[190,577,578],{"class":227}," =",[190,580,247],{"class":227},[190,582,583,587,589,592,595,598],{"class":192,"line":231},[190,584,586],{"class":585},"swJcz","  entry",[190,588,244],{"class":227},[190,590,591],{"class":227}," '",[190,593,594],{"class":200},".\u002FScripts\u002Fts\u002Fapp.ts",[190,596,597],{"class":227},"'",[190,599,271],{"class":227},[190,601,602,605,607],{"class":192,"line":250},[190,603,604],{"class":585},"  module",[190,606,244],{"class":227},[190,608,247],{"class":227},[190,610,611,614,616],{"class":192,"line":274},[190,612,613],{"class":585},"    rules",[190,615,244],{"class":227},[190,617,619],{"class":618},"sTEyZ"," [\n",[190,621,622],{"class":192,"line":295},[190,623,624],{"class":227},"      {\n",[190,626,627,630,632,635,638,641,645,648],{"class":192,"line":316},[190,628,629],{"class":585},"        test",[190,631,244],{"class":227},[190,633,634],{"class":227}," \u002F",[190,636,637],{"class":618},"\\.",[190,639,640],{"class":200},"ts",[190,642,644],{"class":643},"s7zQu","$",[190,646,647],{"class":227},"\u002F",[190,649,271],{"class":227},[190,651,652,655,657,659,662,664],{"class":192,"line":337},[190,653,654],{"class":585},"        use",[190,656,244],{"class":227},[190,658,591],{"class":227},[190,660,661],{"class":200},"ts-loader",[190,663,597],{"class":227},[190,665,271],{"class":227},[190,667,668,671,673,675,678],{"class":192,"line":352},[190,669,670],{"class":585},"        exclude",[190,672,244],{"class":227},[190,674,634],{"class":227},[190,676,677],{"class":200},"node_modules",[190,679,680],{"class":227},"\u002F\n",[190,682,683],{"class":192,"line":367},[190,684,685],{"class":227},"      }\n",[190,687,688],{"class":192,"line":373},[190,689,690],{"class":618},"    ]\n",[190,692,694],{"class":192,"line":693},11,[190,695,696],{"class":227},"  },\n",[190,698,700,703,705],{"class":192,"line":699},12,[190,701,702],{"class":585},"  resolve",[190,704,244],{"class":227},[190,706,247],{"class":227},[190,708,710,713,715,718,720,722,724,727,729,731,733],{"class":192,"line":709},13,[190,711,712],{"class":585},"    extensions",[190,714,244],{"class":227},[190,716,717],{"class":618}," [",[190,719,597],{"class":227},[190,721,417],{"class":200},[190,723,597],{"class":227},[190,725,726],{"class":227},",",[190,728,591],{"class":227},[190,730,421],{"class":200},[190,732,597],{"class":227},[190,734,735],{"class":618},"]\n",[190,737,739],{"class":192,"line":738},14,[190,740,696],{"class":227},[190,742,744,747,749],{"class":192,"line":743},15,[190,745,746],{"class":585},"  output",[190,748,244],{"class":227},[190,750,247],{"class":227},[190,752,754,757,759,761,764,766],{"class":192,"line":753},16,[190,755,756],{"class":585},"    filename",[190,758,244],{"class":227},[190,760,591],{"class":227},[190,762,763],{"class":200},"bundle.js",[190,765,597],{"class":227},[190,767,271],{"class":227},[190,769,771,774,776,779,782,786,789,791,793,795,797],{"class":192,"line":770},17,[190,772,773],{"class":585},"    path",[190,775,244],{"class":227},[190,777,778],{"class":618}," path",[190,780,781],{"class":227},".",[190,783,785],{"class":784},"s2Zo4","resolve",[190,787,788],{"class":618},"(__dirname",[190,790,726],{"class":227},[190,792,591],{"class":227},[190,794,309],{"class":200},[190,796,597],{"class":227},[190,798,799],{"class":618},")\n",[190,801,803],{"class":192,"line":802},18,[190,804,370],{"class":227},[190,806,808],{"class":192,"line":807},19,[190,809,810],{"class":227},"};\n",[403,812],{},[152,814,815],{},[155,816,817],{},"Challenges & Tips",[174,819,820,826,832],{},[168,821,822,825],{},[155,823,824],{},"Legacy jQuery Usage",": Use type declarations and gradually refactor jQuery-heavy code.",[168,827,828,831],{},[155,829,830],{},"Global Variables",": Declare global types or refactor to modules.",[168,833,834,837],{},[155,835,836],{},"Razor View Conflicts",": Avoid mixing complex inline scripts with TypeScript logic.",[403,839],{},[152,841,842,845],{},[155,843,844],{},"Conclusion","\nMigrating from JavaScript to TypeScript in ASP.NET MVC projects brings substantial long-term benefits. With careful planning, it can be done incrementally without disrupting existing functionality. Leveraging modern build tools like Webpack can further streamline the process and improve maintainability. This approach ensures your frontend stack evolves alongside your backend, enabling a modern and scalable web application architecture.",[152,847,848,849,852],{},"Notes: This is also a key part in the endeavor of migrating the ",[187,850,851],{},"Voky"," project, wherein we try to move from JQuery and pure Javascript - into a modular type-safe scripts with VueJS to incrementally replace old JS widgets.",[403,854],{},[856,857,858],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":185,"searchDepth":231,"depth":231,"links":860},[],"2025-04-01","*By Sean Erick C. Ramones, Vue SME | JavaScript\u002FTypScript SME*","md","https:\u002F\u002Fimages.pexels.com\u002Fphotos\u002F159299\u002Fgraphic-design-studio-tracfone-programming-html-159299.jpeg?auto=compress&cs=tinysrgb&h=650&w=940",{},true,{"title":58,"description":862},"OD-WGUK3PuUg_oP3TznFPOy8nakfC96qYgyOFIsGjOY",[870,872],{"title":54,"path":55,"stem":56,"description":871,"children":-1},"On October 24, 2025, we said goodbye to one of the most talented and dedicated individuals our team has ever had the privilege of working with—Asa Bain. After years of outstanding contributions to Mil...",{"title":62,"path":63,"stem":64,"description":873,"children":-1},"*By Sean Erick C. Ramones, Vue SME | JavaScript\u002FTypeScript SME*",1779638277056]