Rich-Harris / magic-string

Manipulate strings like a wizard
MIT License
2.37k stars 113 forks source link

Change actions to the magic-string do not affect the generated map #265

Open guypassy opened 11 months ago

guypassy commented 11 months ago

"magic-string": "^0.30.5",

generateMap is not affected by any changes made to the value in the magic string.

import MagicString from 'magic-string'

const s = new MagicString('problems = 99')

s.update(0, 8, 'answer')
console.log(s.toString()) // 'answer = 99'

s.update(11, 13, '42') // character indices always refer to the original string
console.log(s.toString()) // 'answer = 42'

s.prepend('var ').append(';') // most methods are chainable
console.log(s.toString()) // 'var answer = 42;'

const map = s.generateMap({
  source: 'source.js',
  file: 'converted.js.map',
  includeContent: true
}) // generates a v3 sourcemap

console.log(map.toString())

Results in:

answer = 99
answer = 42
var answer = 42;
{"version":3,"file":"converted.js.map","sources":["source.js"],"sourcesContent":["problems = 99"],"names":[],"mappings":"IAAA,MAAQ,GAAG"}
heyqbnk commented 6 months ago

For those, who is still looking for the answer to this issue. This behaviour is intended and seems correct, as long as a sourcemap is a document, helping developers to map one statement in source code to another in the generated one.

So, if this (generateMap) function would return a generated code, you wouldn't know what was the source one.