Skip to content

Commit b41276b

Browse files
Thertzlorcncolder
authored andcommitted
Inline source-map support
1 parent 66c6ae3 commit b41276b

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/index.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,23 +72,35 @@ async function getCodeAndMap() {
7272

7373
const document = editor.document
7474

75-
const file = document.fileName
75+
const file = document.isUntitled ? 'Untitled Document' : document.fileName
7676
const dir = file.replace(/\/[^\/]+$/, '')
7777
const fileName = file.split('/').pop()
7878
if (!fileName)
7979
return
8080

81-
const fileMetas = await vscode.workspace.fs.readDirectory(vscode.Uri.file(dir))
81+
const fileMetas = await Promise.resolve(vscode.workspace.fs.readDirectory(vscode.Uri.file(dir))).catch(() => [])
8282
let mapFileName = fileMetas.find(([name]) => name === `${fileName}.map`)?.[0]
8383
mapFileName ??= fileMetas.find(([name]) => name.startsWith(fileName?.split('.')[0]) && name.endsWith('.map'))?.[0]
84+
85+
const selectedCode = document.getText(editor.selection)
86+
const getFullCode = async () => Promise.resolve(vscode.workspace.fs.readFile(vscode.Uri.file(file)).then(buffer => new TextDecoder('utf-8').decode(buffer))).catch(() => document.getText())
87+
const code = selectedCode || await getFullCode()
8488
if (!mapFileName) {
85-
vscode.window.setStatusBarMessage('Source map file not found!', 5000)
86-
return
89+
const lastLine = (selectedCode ? await getFullCode() : code).split('\n').pop() ?? ''
90+
if (!lastLine.startsWith('//# sourceMappingURL=')) {
91+
vscode.window.setStatusBarMessage('Source map not found!', 5000)
92+
return
93+
}
94+
const map = new TextDecoder('utf-8').decode(Buffer.from(lastLine.split(',').pop() ?? '', 'base64'))
95+
if (!map) {
96+
vscode.window.setStatusBarMessage('Source map not found!', 5000)
97+
return
98+
}
99+
return { code, map }
87100
}
88101

89102
const mapFile = `${dir}/${mapFileName}`
90103

91-
const code = document.getText(editor.selection) || await vscode.workspace.fs.readFile(vscode.Uri.file(file)).then(buffer => new TextDecoder('utf-8').decode(buffer))
92104
const map = await vscode.workspace.fs.readFile(vscode.Uri.file(mapFile)).then(buffer => new TextDecoder('utf-8').decode(buffer))
93105

94106
return { code, map }

0 commit comments

Comments
 (0)