TypeScript 7-ന്റെ പുതിയ Go അധിഷ്ഠിത കംപൈലറായ tsgo, ESLint, ts-jest, ts-morph തുടങ്ങിയ പ്രശസ്തമായ ഡെവലപ്‌മെന്റ് ടൂളുകളെ തകരാറിലാക്കി തുടങ്ങിയിരിക്കുന്നു. വരാനിരിക്കുന്ന 7.1 റിലീസിൽ കംപൈലറിന്റെ പ്രോഗ്രാമാറ്റിക് API സ്ഥിരത കൈവരിക്കുന്നത് വരെ ഈ പ്രശ്നം തുടരും. അതിനാൽ, ഈ ടൂളുകളെ ആശ്രയിക്കുന്ന ടീമുകൾ അപ്‌ഗ്രേഡ് പ്ലാനുകൾ താൽക്കാലികമായി നിർത്തിവെക്കേണ്ടതാണ്.

TypeScript 7-ൽ എന്താണ് മാറിയത്

ഈ റിലീസ് tsgo അവതരിപ്പിച്ചു, ഇത് TypeScript ടീം Project Corsa എന്ന് പേരിട്ട ടൈപ്പ്-ചെക്കറിന്റെ ഒരു Go പോർട്ട് ആണ്. കോർ (core) ഭാഗം JavaScript-ൽ നിന്ന് Go-ലേക്ക് മാറ്റുന്നതിലൂടെ, കംപൈലറിന് പത്ത് മടങ്ങ് വേഗത്തിൽ ബിൽഡുകൾ നൽകാൻ കഴിയും. CI പൈപ്പ്‌ലൈനുകളുടെ സമയം കുറയ്ക്കാൻ ആഗ്രഹിക്കുന്നവർക്കിടയിൽ ഈ മാറ്റം വലിയ ശ്രദ്ധ പിടിച്ചുപറ്റിയിട്ടുണ്ട്.

എന്തുകൊണ്ടാണ് ടൂളുകൾ പരാജയപ്പെടുന്നത്

TypeScript-നോടൊപ്പം പ്രവർത്തിക്കുന്ന ടൂളുകൾ ടൈപ്പ്-ചെക്കറുമായി നേരിട്ട് ആശയവിനിമയം നടത്താറില്ല. അവ ടൈപ്പ് വിവരങ്ങൾ, ഡയഗ്നോസ്റ്റിക്സ് (diagnostics), AST traversal എന്നിവ ലഭ്യമാക്കുന്ന ഒരു കൂട്ടം ഇന്റേണൽ API-കളെയാണ് വിളിക്കുന്നത്. ഈ API-കൾ tsgo-യ്ക്ക് വേണ്ടി പുനർനിർമ്മിച്ചതാണ്, കൂടാതെ പതിപ്പ് 7.1 വരുന്നത് വരെ ഇവയിൽ മാറ്റങ്ങൾ വന്നുകൊണ്ടിരിക്കുകയും ചെയ്യും. ഇതിന്റെ ഫലമായി നിരവധി ക്രാഷുകളും (crashes) നിശബ്ദമായ പരാജയങ്ങളും സംഭവിക്കുന്നു:

  • typescript-eslint – TypeScript 7-നോടൊപ്പം ഇത് ഇൻസ്റ്റാൾ ചെയ്യാൻ npm അനുവദിക്കുന്നില്ല; നിർബന്ധപൂർവ്വം ഇൻസ്റ്റാൾ ചെയ്താൽ ESLint ഒരു TypeError കാണിക്കുന്നു.
  • ts-jest – Go പതിപ്പിൽ നിലവിലില്ലാത്ത ഇന്റേണൽ മെത്തേഡുകൾ വിളിക്കാൻ ശ്രമിക്കുന്നത് കാരണം ടെസ്റ്റ് ഫയൽ ട്രാൻസ്ഫോർമേഷൻ (test-file transformation) പരാജയപ്പെടുന്നു.
  • ts-morph – കോഡ് സ്ട്രക്ചർ പരിശോധിക്കാൻ സ്റ്റേബിൾ ആയ API പ്രതീക്ഷിക്കുന്നു; നിലവിലെ API ഉപയോഗിക്കുമ്പോൾ ഇത് തെറ്റായ ഫലങ്ങൾ നൽകുകയോ മുന്നറിയിപ്പില്ലാതെ പരാജയപ്പെടുകയോ ചെയ്തേക്കാം.
  • Monorepos – tsgo ചില ജനറിക് ടൈപ്പ് പാരാമീറ്ററുകൾ ഒഴിവാക്കുന്നു, ഇത് വലിയ മൾട്ടി-പാക്കേജ് പ്രോജക്റ്റുകളിൽ മാത്രം കാണപ്പെടുന്ന ടൈപ്പ് എററുകൾക്ക് കാരണമാകുന്നു.

ലിന്റിംഗ് (linting), Jest ടെസ്റ്റിംഗ് അല്ലെങ്കിൽ കോഡ് അനാലിസിസ് എന്നിവ TypeScript 7-നോടൊപ്പം ഉപയോഗിക്കുന്ന ഏത് വർക്ക്ഫ്ലോയിലും ബിൽഡുകൾ പരാജയപ്പെടാൻ (red builds) സാധ്യതയുണ്ട്.

ആരെല്ലാം ബാധിക്കപ്പെടുന്നു

  • ഓരോ പുൾ റിക്വസ്റ്റിന്റെയും (pull request) ഭാഗമായി ESLint ഉപയോഗിക്കുന്ന ഫ്രണ്ട്-എൻഡ് ടീമുകൾ.
  • യൂണിറ്റ് ടെസ്റ്റിംഗിനായി ts-jest ഉപയോഗിക്കുന്ന ബാക്ക്-എൻഡ് സർവീസുകൾ.
  • കോഡ് ജനറേഷനോ ഡോക്യുമെന്റേഷനോ വേണ്ടി ts-morph ഉപയോഗിക്കുന്ന ലൈബ്രറികൾ.
  • ടൈപ്പ് ഇൻഫറൻസ് (type inference) സങ്കീർണ്ണമായ മോണോറെപ്പോ (monorepo) സെറ്റപ്പുകളുള്ള സ്ഥാപനങ്ങൾ.

ഒരു TypeScript അപ്‌ഗ്രേഡിന് ശേഷം നിങ്ങളുടെ CI പൈപ്പ്‌ലൈൻ പരാജയപ്പെട്ടാൽ (red), അതിന് മുകളിൽ പറഞ്ഞവയിൽ ഏതെങ്കിലും ഒന്നാകാം കാരണം.

7.1 വരെയുള്ള സുരക്ഷിതമായ മൈഗ്രേഷൻ രീതി

ടൂളുകൾ തകരാറിലാക്കാതെ തന്നെ വേഗത നിലനിർത്താനുള്ള ഏറ്റവും ലളിതമായ മാർഗ്ഗം, വേഗതയേറിയ ടൈപ്പ്-ചെക്കിംഗ് ഘട്ടത്തെ യഥാർത്ഥ ബിൽഡിൽ നിന്ന് വേർതിരിക്കുക എന്നതാണ്:

  1. പ്രധാന TypeScript പതിപ്പ് 6.x-ൽ തന്നെ നിർത്തുക – ഇത് എല്ലാ ടൂളുകളും പ്രതീക്ഷിക്കുന്ന സ്റ്റേബിൾ API നിലനിർത്താൻ സഹായിക്കുന്നു.
  2. @typescript/native-preview ഒരു dev dependency ആയി ചേർക്കുക – CI-യിൽ വേഗത്തിലുള്ള ടൈപ്പ്-ചെക്കിംഗിനായി ഈ പാക്കേജ് tsgo ബൈനറി നൽകുന്നു.
  3. വേഗത്തിലുള്ള പരിശോധനകൾക്കായി --noEmit ഉപയോഗിച്ച് tsgo റൺ ചെയ്യുക – ഇത് ടൈപ്പുകൾ പരിശോധിക്കുമെങ്കിലും ഔട്ട്‌പുട്ട് ഫയലുകൾ ഉണ്ടാക്കില്ല.
  4. യഥാർത്ഥ ബിൽഡുകൾക്കായി ക്ലാസിക് tsc കംപൈലർ ഉപയോഗിക്കുകtsc ഇപ്പോഴും JavaScript നിർമ്മിക്കുകയും 6.x API പിന്തുടരുകയും ചെയ്യുന്നു.
npm install -D typescript@^6.9
npm install -D @typescript/native-preview

നിങ്ങളുടെ package.json സ്ക്രിപ്റ്റുകൾ അപ്‌ഡേറ്റ് ചെയ്യുക:

{
  "scripts": {
    "typecheck:fast": "tsgo --noEmit",
    "build": "tsc"
  }
}

ഈ ഡ്യുവൽ സെറ്റപ്പിലൂടെ, ESLint, ts-jest, ts-morph എന്നിവയുമായുള്ള പൊരുത്തം നിലനിർത്തിക്കൊണ്ടുതന്നെ CI-യിൽ പത്ത് മടങ്ങ് വേഗത വർദ്ധിപ്പിക്കാൻ നിങ്ങൾക്ക് സാധിക്കും.

എപ്പോൾ നേരിട്ട് 7.0-ലേക്ക് അപ്‌ഗ്രേഡ് ചെയ്യാം

നിങ്ങളുടെ കോഡ്ബേസ് tsc മാത്രം ഉപയോഗിക്കുന്നതാണെങ്കിൽ—ലിന്റിംഗ്, Jest, ts-morph എന്നിവ ഇല്ലെങ്കിൽ—അസ്ഥിരമായ API നിങ്ങളെ ബാധിക്കില്ല. അങ്ങനെയുള്ള സാഹചര്യത്തിൽ, നിങ്ങൾക്ക് ഉടൻ തന്നെ TypeScript 7-ലേക്ക് മാറാനും അധിക നടപടികളില്ലാതെ മികച്ച പെർഫോമൻസ് ആസ്വദിക്കാനും കഴിയും.

ശ്രദ്ധിക്കേണ്ട കാര്യങ്ങൾ

  • Version 7.1 – ഈ റിലീസിൽ പ്രോഗ്രാമാറ്റിക് API സ്ഥിരപ്പെടുത്തുമെന്ന് (frozen) TypeScript ടീം അറിയിച്ചിട്ടുണ്ട്. ഇത് ലഭ്യമാകുമ്പോൾ, tsgo-യും നിലവിലുള്ള ടൂളുകളും തമ്മിലുള്ള വിടവ് നികത്തപ്പെടുകയും സുഗമമായ അപ്‌ഗ്രേഡ് സാധ്യമാവുകയും ചെയ്യും.
  • Tooling അപ്‌ഡേറ്റുകൾtypescript-eslint, ts-jest പിന്നെ ts-morph എന്നിവയുടെ പുതിയ റിലീസുകൾ ശ്രദ്ധിക്കുക. 7.1 പുറത്തിറങ്ങിയ ഉടൻ തന്നെ അവ പൊരുത്തപ്പെടുന്ന പതിപ്പുകൾ പ്രസിദ്ധീകരിക്കും.
  • CI കോൺഫിഗറേഷൻ – API സ്ഥിരത കൈവരിച്ചുകഴിഞ്ഞാൽ tsgo --noEmit-ന് പകരം സാധാരണ tsc ഉപയോഗിക്കാൻ മറക്കരുത്; അപ്പോൾ പ്രിവ്യൂ പാക്കേജിന്റെ ആവശ്യമില്ലാതാകും.

ചുരുക്കത്തിൽ: 7.1 API ലോക്ക് ചെയ്യുന്നത് വരെ, പ്രധാന കംപൈലർ ആയി TypeScript 6.x തന്നെ ഉപയോഗിക്കുക, വേഗത്തിലുള്ള പരിശോധനകൾക്കായി @typescript/native-preview ചേർക്കുക, ബിൽഡുകൾക്കായി tsc ഉപയോഗിക്കുക. ഇത് ലിന്റിംഗും ടെസ്റ്റിംഗും തകരാറിലാകാതെ തന്നെ പുതിയ Go എഞ്ചിന്റെ പെർഫോമൻസ് ഗുണങ്ങൾ പ്രയോജനപ്പെടുത്താൻ സഹായിക്കുന്നു.