Frontend world where is CSP is supposed to be part of, is growing very fast, and the best results you’ll achieve if you choose any way offered by the frontend community. And this is always depends your needs. Mostly known Angular, React and Vue.js.  The good things of using such popular frameworks, will be a lots developers for you, and that they are driven by the community and grows so fast. You still can use IRIS, as a backend, with REST for instance. Frontend developers may even don’t know what’s drive the backend, and how to deal with IRIS.

At the moment we have only TextMate-based grammar in public, which is used in VSCode and on GitHub. I see no way of conversions from TextMate to Rouge. So, the only way would be to implement it from scratch. Not so easy, but still possible. 

I can do it, I have some experience in such tasks, but don't have so much spare time at the moment. Would be interested in investing in the project?

AWS offers EC2, and it will be just virtual machines. And it will be possible to migrate any of your instances quite easy, if you would choose the same environment. If you have windows on your server, you can have Windows there as well. It's the easiest way. You would need to install the same version of the InterSystems platform you use, and repeat the configuration, copy necessary information and that's it. But for sure, could be some other options.

But AWS also suppose support for containers, this could be more difficult. And the best would be if you would use IRIS. I can help with this migration if you wish.

Yes, when you created a new class, it is just a file on your local disk. When you saved it, VSCode caught this action, and sent it to the server, and compiled it. But deleting this file, not a reason to do the same on the server.

You can delete class with Explorer view, there you may find any classes, that are stored on the server. By context menu you can Delete the item on the server, or Export it to get the local version. Icons close to class names, the same as in File Explorer view, may indicate the connection to your local file.

I think this may help

ClassMethod CleanNull(json As %DynamicObject) As %DynamicObject
{
  Set iter = json.%GetIterator()
  Set toRemove = ""
  While iter.%GetNext(.key, .value) {
    Set type = json.%GetTypeOf(key)
    If (type="null") {
      Set toRemove = toRemove _ $Listbuild(key)
    }
    ElseIf (type="object")||(type="array") {
      Set $Property(json, key) = ..CleanNull(value)
    }
  }
  Set ptr = 0, corr = 0
  While $Listnext(toRemove, ptr, key) {
    Do json.%Remove(key - corr)
    set corr = corr + 1
  }
  Return json
}

And Testing metho

ClassMethod TestJSON()
{
  set json = {
    "recipients": [ 
      { "name":"Utsavi", "email":"utsavi@gmail.com"},
      { "name":"Utsavi 1", "email":"utsavi1@gmail.com"},
      null, null
    ],
    "content":[null, {"title":"Test.pdf", "data":"ygwehfbnwfbhew"} ]
  }
  Set result = ..CleanNull(json)
  Do result.%ToJSON()
}

Will return this

{"recipients":[{"name":"Utsavi","email":"utsavi@gmail.com"},{"name":"Utsavi 1","email":"utsavi1@gmail.com"}],"content":[{"title":"Test.pdf","data":"ygwehfbnwfbhew"}]}