debugger beta: Update Javascript's DAP to allow passing in url instead of program (#31494)

Anthony Eid created

Closes #31375

Release Notes:

- debugger beta: Allow passing in URL instead of program for Javascript
launch request

Change summary

crates/dap_adapters/src/javascript.rs | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)

Detailed changes

crates/dap_adapters/src/javascript.rs 🔗

@@ -113,8 +113,10 @@ impl DebugAdapter for JsDebugAdapter {
     ) -> Result<dap::StartDebuggingRequestArgumentsRequest> {
         match config.get("request") {
             Some(val) if val == "launch" => {
-                if config.get("program").is_none() {
-                    return Err(anyhow!("program is required"));
+                if config.get("program").is_none() && config.get("url").is_none() {
+                    return Err(anyhow!(
+                        "either program or url is required for launch request"
+                    ));
                 }
                 Ok(StartDebuggingRequestArgumentsRequest::Launch)
             }
@@ -143,7 +145,11 @@ impl DebugAdapter for JsDebugAdapter {
                 map.insert("processId".into(), attach.process_id.into());
             }
             DebugRequest::Launch(launch) => {
-                map.insert("program".into(), launch.program.clone().into());
+                if launch.program.starts_with("http://") {
+                    map.insert("url".into(), launch.program.clone().into());
+                } else {
+                    map.insert("program".into(), launch.program.clone().into());
+                }
 
                 if !launch.args.is_empty() {
                     map.insert("args".into(), launch.args.clone().into());
@@ -311,7 +317,10 @@ impl DebugAdapter for JsDebugAdapter {
                                     }
                                 }
                             },
-                            "required": ["program"]
+                            "oneOf": [
+                                { "required": ["program"] },
+                                { "required": ["url"] }
+                            ]
                         }
                     ]
                 },