@@ -72,23 +72,35 @@ async function getCodeAndMap() {
72
72
73
73
const document = editor . document
74
74
75
- const file = document . fileName
75
+ const file = document . isUntitled ? 'Untitled Document' : document . fileName
76
76
const dir = file . replace ( / \/ [ ^ \/ ] + $ / , '' )
77
77
const fileName = file . split ( '/' ) . pop ( )
78
78
if ( ! fileName )
79
79
return
80
80
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 ( ( ) => [ ] )
82
82
let mapFileName = fileMetas . find ( ( [ name ] ) => name === `${ fileName } .map` ) ?. [ 0 ]
83
83
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 ( )
84
88
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 }
87
100
}
88
101
89
102
const mapFile = `${ dir } /${ mapFileName } `
90
103
91
- const code = document . getText ( editor . selection ) || await vscode . workspace . fs . readFile ( vscode . Uri . file ( file ) ) . then ( buffer => new TextDecoder ( 'utf-8' ) . decode ( buffer ) )
92
104
const map = await vscode . workspace . fs . readFile ( vscode . Uri . file ( mapFile ) ) . then ( buffer => new TextDecoder ( 'utf-8' ) . decode ( buffer ) )
93
105
94
106
return { code, map }
0 commit comments