mxsdev / nvim-dap-vscode-js

nvim-dap adapter for vscode-js-debug
266 stars 24 forks source link

Debugging fails in TS files with any imports #69

Open josephemorgan opened 3 months ago

josephemorgan commented 3 months ago

The Problem

Unable to debug anything that has an ESM import (which is the standard for writing TS as far as I'm aware).

Debugging works in single-file typescript programs. Once there's an ESM module import, the following error appears in the REPL and the debugger disconnects:

(node:69889) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
Uncaught SyntaxError /home/joe/dev/hello_world/index.mts:1
import { logMessage } from "./some_module.mjs";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at internalCompileFunction (internal/vm:76:18)
    at wrapSafe (internal/modules/cjs/loader:1283:20)
    at Module._compile (internal/modules/cjs/loader:1328:27)
    at Module._extensions..js (internal/modules/cjs/loader:1422:10)
    at Module.load (internal/modules/cjs/loader:1203:32)
    at Module._load (internal/modules/cjs/loader:1019:12)
    at executeUserEntryPoint (internal/modules/run_main:128:12)
    at <anonymous> (internal/main/run_main_module:28:49)

What I tried

Changing type to module in package.json changes the error in the REPL to the following:

Uncaught TypeError TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /home/joe/dev/hello_world/index.ts
    at __node_internal_captureLargerStackTrace (internal/errors:496:5)
    at NodeError (internal/errors:405:5)
    at getFileProtocolModuleFormat (internal/modules/esm/get_format:136:11)
    at defaultGetFormat (internal/modules/esm/get_format:182:36)
    at defaultLoad (internal/modules/esm/load:101:20)
    at load (internal/modules/esm/loader:417:13)
    at moduleProvider (internal/modules/esm/loader:288:22)
    at ModuleJob (internal/modules/esm/module_job:63:26)
    at #createModuleJob (internal/modules/esm/loader:312:17)
    at getJobFromResolveResult (internal/modules/esm/loader:265:34)
    at getModuleJob (internal/modules/esm/loader:251:17)
    at processTicksAndRejections (internal/process/task_queues:95:5)
    --- await ---
    at runMainESM (internal/modules/run_main:91:21)
    at executeUserEntryPoint (internal/modules/run_main:124:5)
    at <anonymous> (internal/main/run_main_module:28:49)

The warning suggests changing the file extension to mjs, which doesn't make sense, tried changing to 'mts' instead an got the same error as initially in the REPL

Tried switching to commonjs module syntax

No combination of ts/mts extensions or "type" = "module" in package.json would allow the debugger to run without a similar message in the repl.

My config is basically copy/pasted from the docs here,

        local dap = require("dap")

        require("dap-vscode-js").setup({
            debugger_path = "/home/joe/.config/nvim/vscode-js-debug",
            adapters = { "pwa-node", "pwa-chrome", "pwa-msedge", "node-terminal", "pwa-extensionHost" }, -- which adapters to register in nvim-dap
            log_file_path = "/home/joe/.config/nvim/logs.log",
            log_file_level = vim.log.levels.TRACE,
        })

        dap.configurations["typescript"] = {
            {
                type = "pwa-node",
                request = "launch",
                name = "Launch file",
                program = "${file}",
                cwd = "${workspaceFolder}",
            },
            {
                type = "pwa-node",
                request = "attach",
                name = "Attach",
                processId = require("dap.utils").pick_process,
                cwd = "${workspaceFolder}",
            },
        }

vscode-js-debug was cloned and built today, as were basically all of the nvim plugins I'm using.

nvim: 0.9.5

Reproduction

I've set up the most basic, default Hello World typescript project I can image: https://github.com/josephemorgan/ts_helloworld

josephemorgan commented 3 months ago

I'm wondering if this issue is related, until I opened the REPL, the the only message I was seeing was identical to what's described here: https://github.com/mxsdev/nvim-dap-vscode-js/issues/48#issue-1777698241