@@ -272,6 +272,26 @@ def read_version_from_file(
272272 return "0.0.0"
273273
274274
275+ def _get_frontend_version () -> tuple [Path , str ] | None :
276+ try :
277+ frontend_version_file = Project .get_work_dir ("package.json" , be_file = True )
278+ except EnvError :
279+ return None
280+ try :
281+ from asynctor .jsons import json_loads
282+ except ImportError :
283+ from json import loads as json_loads
284+ content = frontend_version_file .read_bytes ()
285+ metadata : dict [str , str ] = json_loads (content ) # ty:ignore[invalid-assignment]
286+ try :
287+ current_version = metadata ["version" ]
288+ except (KeyError , TypeError ):
289+ return None
290+ with contextlib .suppress (ValueError ):
291+ frontend_version_file = frontend_version_file .relative_to (Path .cwd ())
292+ return frontend_version_file , current_version
293+
294+
275295@overload
276296def get_current_version (
277297 verbose : bool = False ,
@@ -310,11 +330,20 @@ def get_current_version(
310330 return out
311331 toml_text = work_dir = None
312332 if package_name is None :
313- work_dir = Project .get_work_dir ()
314- toml_text = Project .load_toml_text ()
315- doc = tomllib .loads (toml_text )
316- project_name = doc .get ("project" , {}).get ("name" , work_dir .name )
317- package_name = re .sub (r"[- ]" , "_" , project_name )
333+ try :
334+ work_dir = Project .get_work_dir ()
335+ except EnvError as e :
336+ if (res := _get_frontend_version ()) is None :
337+ raise e
338+ current_version = res [1 ]
339+ if check_version :
340+ return False , current_version
341+ return current_version
342+ else :
343+ toml_text = Project .load_toml_text ()
344+ doc = tomllib .loads (toml_text )
345+ project_name = doc .get ("project" , {}).get ("name" , work_dir .name )
346+ package_name = re .sub (r"[- ]" , "_" , project_name )
318347 local_version = read_version_from_file (package_name , work_dir , toml_text )
319348 try :
320349 installed_version = importlib_metadata .version (package_name )
@@ -549,12 +578,23 @@ def run(self) -> None:
549578 echo ("You may want to pin tag by `fast tag`" )
550579
551580
581+ def _echo_version (version_file : Any , value : str ) -> None :
582+ styled = typer .style (value , bold = True )
583+ echo (f"Version value in { version_file } : " + styled )
584+
585+
552586@cli .command ()
553587def version () -> None :
554588 """Show the version of this tool"""
555589 echo ("Fast Dev Cli Version: " + typer .style (__version__ , fg = typer .colors .BLUE ))
556590 with contextlib .suppress (FileNotFoundError , KeyError ):
557- toml_text = Project .load_toml_text ()
591+ try :
592+ toml_text = Project .load_toml_text ()
593+ except EnvError :
594+ if (res := _get_frontend_version ()) is not None :
595+ _echo_version (* res )
596+ return
597+ raise
558598 doc = tomllib .loads (toml_text )
559599 if value := doc .get ("project" , {}).get ("version" , "" ):
560600 styled = typer .style (value , bold = True , fg = typer .colors .CYAN )
@@ -569,8 +609,7 @@ def version() -> None:
569609 for line in text .splitlines ():
570610 if line .strip ().startswith (varname ):
571611 value = line .split ("=" , 1 )[- 1 ].strip ().strip ('"' ).strip ("'" )
572- styled = typer .style (value , bold = True )
573- echo (f"Version value in { version_file } : " + styled )
612+ _echo_version (version_file , value )
574613 break
575614
576615
0 commit comments