The debugger is stopping at the wrong line due to an error in the webpack configuration for

After successfully configuring TypeScript in my project, I encountered an issue with breakpoints not stopping at the correct line and variable values not being available until stepping into more code. This appears to be a source map mismatch problem.

I attempted to address this by adding the SourceMapDevToolPlugin to the webpack configuration file as instructed here, but unfortunately, it did not resolve the issue.

Below are some screenshots illustrating the issue:

https://i.sstatic.net/uBSoh.png

The value of 'myString' is undefined even though the line has supposedly been executed.

https://i.sstatic.net/0pq5i.png

It directly jumps to the function (bypassing the line where the function is called) and then the value of the string becomes available, which is quite perplexing.

Included below are my webpack config, launch.json, and tsconfig files for reference:

webpack config:

//Webpack config content goes here...

launch.json:

//Launch.json content goes here...

tsconfig:

//Tsconfig content goes here...

Despite having 'inline-source-map' mode configured, bypassing the pre-launch task that compiles TypeScript files, the app still runs with breakpoints in TypeScript files displaying erratic behavior and line mismatches. Any guidance on resolving this issue would be greatly appreciated. Thank you.

Answer №1

After updating my tsconfig file to include sourceMap: true;, the issue was resolved. Below is the corrected version of the tsconfig file:

{
  "compilerOptions": {
    /* Visit https://aka.ms/tsconfig.json to read more about this file */

    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "es5",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    "strict": true,                           /* Enable all strict type-checking options. */
    "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    //"inlineSourceMap": true,                  /* Emit a single file with source maps instead of having a separate file. */
    //"inlineSources": true,                    /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
    "sourceMap": true,
    /* Advanced Options */
    "skipLibCheck": true,                     /* Skip type checking of declaration files. */
    "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
    "outDir": "./src/ts-built",
    "rootDir": "./src"
  }
}

From my research, it seems that enabling "sourceMap": true allows the .map generated file by the tsc compiler to map the compiled .js to the .ts file during debugging.

  1. The inline mode retrieves the source map from the text appended at the end of the .js file rather than using a separate .map file, similar to what's specified in the webpack config as 'inline-source-map'.

If only one of the two modes works in webpack, I hope that it's the correct one considering the devtool name is 'inline-source-map'.

I welcome any further insights on this topic.

Answer №2

The solution that was originally provided did not solve the issue I encountered while developing a grafana-plugin. After struggling for a few days, I discovered a bug at this link: https://github.com/swc-project/jest/issues/61

It turns out that using sourceMap=true alone is not sufficient; we also need to include inlineSourceMap. Additionally, changes need to be made in two specific files simultaneously for it to work correctly:

  1. In .config/jest.config.js: Update sourceMaps: "inline" from sourceMaps: true
  2. In .config/tsconfig.json: Add
    "inlineSourceMap": true
    under compilerOptions

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Submit information by utilizing' content-type': 'application/x-www-form-urlencoded' and 'key': 'key'

Attempting to send data to the server with a content-type of 'application/xwww-form-urlencode' is resulting in a failure due to the content type being changed to application/json. var headers= { 'content-type': 'applica ...

Warning: TypeScript linter alert - the no-unused-variable rule is now outdated; however, I do not have this configuration enabled

After 3 long months, I came across a warning in a project that was being refreshed today. The warning says "no-unused-variable is deprecated. Since TypeScript 2.9. Please use the built-in compiler checks instead." Oddly enough, my tsconfig.json file do ...

Guide on correctly importing the Monaco IStandaloneCodeEditor interface in Vue3 using the Composition API

While working with Monaco, I came across a challenge in defining the instance type for encapsulating a component package. I am unsure about how to import the interface IStandaloneCodeEditor | IStandaloneDiffEditor, or if it is necessary at all. <script ...

When the imagepath in an Angular application is not updated, it will revert to null

Below is the code snippet that I am currently working on: <div class="col-sm-4 pl-5"> <img attr.src="{{item?.imagePath}}" required height="200" width="200"> </div> In my TypeScript file (ts), I have the following function: editBlog ...

Issue with PrimeReact dropdown component not recognizing an array in TypeScript

Trying to incorporate the PrimeReact Dropdown component in a NextJs app with TypeScript. Encountering an error when attempting to select options from the dropdown list: "Objects are not valid as a React child (found: object with keys {name, code})" The b ...

Guide to testing error throwing in error events with Jest

I am having an issue with a particular learning case. The code snippet below is what I am dealing with and I aim to test error throwing: export const someFunction = async () => { //... const fileReadStream = createReadStream(absoluteFilePath) .on(&a ...

Apollo Client's useQuery function is causing unnecessary refetches when using Next.js' router.push method

Currently, I'm facing an issue where a query within a useQuery Apollo Client hook is being re-run unnecessarily every time Next.js's router.push function is triggered. The problem code snippet looks like this: const Parent = () => { useQuery ...

Click on the button to open the generated link in a new tab

How can I efficiently open a URL in a new tab after making an API call with the click of a button? Currently, the button triggers the API call and generates the URL. <button (click)="getUrl()">Connect</button> In TypeScript: getUrl() ...

Using Pocketbase OAuth in SvelteKit is not currently supported

I've experimented with various strategies, but I still couldn't make it work. Here's the recommendation from Pocketbase (): loginWithGoogle: async ({ locals }: { locals: App.Locals }) => { await locals.pb.collection('users' ...

What is the best way to incorporate Blob into Typescript?

I am facing an issue while trying to use FileSaver to save a file in Blob format within my TypeScript application. When I attempted to import the Blob module using: import * as Blob from "blob"; An error was thrown: Could not find a declaration file fo ...

I have attempted to execute my seed script in Prisma using Next.js and TypeScript, but I keep encountering the following error. Is there a solution to resolve this issue?

Within my package.json file, I have included the following code: "prisma": { "seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} prisma/seed.ts" } Upon running the comman ...

Using the useContext hook in a TypeScript class component: a step-by-step guide

I am working with a TypeScript class component and have successfully created a context that can be accessed globally. I am interested in learning how to implement this context in a .ts class component and if it is possible to use it in a pure TypeScript ...

How can TypeScript be used to update the values and text of an HTML element?

Is it possible to update specific attributes of an html element using typescript? Below is the code snippet: HTML:- <a ref="#" id="userProfileName" style="padding-top: 0px; padding-bottom: 0px; padding-right: 10px; padding-left ...

Contrasting characteristics of class members in JavaScript versus TypeScript

Typescript, a superset of Javascript, requires that Javascript code must function in Typescript. However, when attempting to create class members in a typescript file using the same approach as Javascript, an error is encountered. CODE :- script.ts (types ...

Exploring the depths of friendship with React-Router V6 through recursive routes

I am currently facing an issue with my React-Router V6 implementation. The example I found for recursive routes in React-Router V5 is exactly what I need: However, after migrating to react-router-dom@6, the output is not as expected. import { Routes, ...

Accessing specific elements in Typescript 3.5 using indexes

I am looking to create a type-safe getter function that has the ability to return modified values while still being sound. class Foo { a: number; b: boolean; } function getProp<K extends keyof Foo>(o: Foo, p: K): Foo[K] { switch (p) { ca ...

Grouping JavaScript nested properties by keys

I have a specific object structure in my code that I need to work with: { "changeRequest": [{ "acrId": 11, "ccrId": "", "message": "test message" }, ...

Navigating session discrepancies: Combining various social media platforms using Next.js and NextAuth

Recently, I ran into a problem where, upon logging in with Google, I found myself needing access tokens for Twitter and LinkedIn to send out API requests. The issue came about when NextAuth modified my session data to be from either Twitter or LinkedIn ins ...

Exploring arrays within objects with Angular

REACT: this.countries = this.api.fetchAllCountries(); this.countries.forEach(item => { this.countryData.push(item); }); VUE: <div v-for="country in countryData" @click="displayCountryInfo(country ...

The Freemode feature in SwiperJS is not functioning properly when used with React TypeScript

Having a slight issue with SwiperJS. Using version 10.1.0 and the following code : import { Swiper, SwiperSlide } from "swiper/react"; import "swiper/css"; export default function Discover() { return ( <> ...