Thank you!
I tried an SQL update first but I got an error :

<Insert/Update operations not supported on this table.>

For the global solution it work fine for me but only if the new method asn't been compiled before

So first add the method then change the global value and finaly compile.

          // Clone the source method and insert it as the first method in the imported class
          if (debug) { write "adding methodname classmethod to "_className,!}
          set clonedMethod = method.%ConstructClone()
          set tSC = classDefinition.Methods.Insert(clonedMethod)
          if ($$$ISERR(tSC)) { quit }
          set tSC = classDefinition.%Save()
          if ($$$ISERR(tSC)) { quit }
 
          // we set the method in first position
          set ^oddDEF(className,"m",methodName,11)=1
 
          // we recompile the class
          set tSC =  $system.OBJ.Compile(classDefinition.Name, "cbk")


If you need to move an already existing methods I suppose that removing it and compiling before should  work fine but is a naive solution(in my case I don't need it).

I have done it 😁 it need some polish but here is the code to accomplish it using the %SyntaxColor library:

Method ExtractJsFunctionBody(jsCodePath As %String, fnName As %String)
{
  
    #; Reading from a file, writing to a temporary stream
   set syn = ##class(%SyntaxColor).%New(), in = ##class(%Stream.FileCharacter).%New(), out = ##class(%Stream.TmpCharacter).%New()
    // set js content in content var    
   set content = in.Read($$$MaxStringLength)
   do InStream.Rewind()
   #; Need the "K" flag to get JSON output
   do in.LinkToFile(jsCodePath), syn.Color(in,out,"JS","K")
   #; Get a %DynamicArray from the stream
   set lines = ##class(%DynamicArray).%FromJSON(out)
   // get list by line of jsCode
   set lineList = $listfromstring(content, $char(10))

   // get pos and line of function def begining 
   set iterLines = lines.%GetIterator()
   while iterLines.%GetNext(.linenumber , .line, .type) {

      set value = line.%Get(1)
      if ((value.%Get("s") = 16) &&  (value.%Get("c") = 8)){  
         set value = line.%Get(3)
         if (value.%Get("s") = 14 ){
            set tempFnName = $extract($list(lineList, linenumber + 1),value.%Get("p") + 1, value.%Get("p") + value.%Get("c"))
            if (tempFnName = fnName ){
               set functionLineBegin = linenumber + 1
               quit
            }
         }
      }
   }
   
   // get pos of function def ending
   set functionLineEnd = ..braketCounter(iterLines, lineList)
   
   //extract functiun Body
   set functionBody = $listtostring($list(lineList,functionLineBegin,functionLineEnd),$char(10))
   write !!!, functionBody
}

/// Count braket and return the line of the corresponding ending one take an iterrator at the line of the begining of the search and a list of the lines
Method braketCounter(iterLines As %Iterator.AbstractIterator, lineList As %DynamicArray) As %Integer
{
   set countBraket = 1
   while iterLines.%GetNext(.linenumber , .line, .type) { // we keep the same iterator to continue from where we where
      set iterTokens = line.%GetIterator()
      while iterTokens.%GetNext(.key , .value, .type){
         set token = $extract($list(lineList, linenumber + 1),value.%Get("p") + 1, value.%Get("p") + value.%Get("c") )
         if (value.%Get("s") = 4) {
            if (  token = "{"){
               set countBraket = countBraket + 1}
            elseif ( token = "}"){
               set countBraket = countBraket - 1}
            if (countBraket = 0){
               return linenumber 
            }
         }
         
      }
   }
   return "error"
}