Skip to content

Commit 3566c6f

Browse files
committed
fixup! src,lib: retrieve parsed source map url from v8
1 parent 86de757 commit 3566c6f

File tree

4 files changed

+62
-39
lines changed

4 files changed

+62
-39
lines changed

doc/api/vm.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,19 @@ added: REPLACEME
355355
When the script is compiled from a source that contains a source map magic
356356
comment, this property will be set to the URL of the source map.
357357

358-
```js
358+
```mjs
359+
import vm from 'node:vm';
360+
361+
const script = new vm.Script(`
362+
function myFunc() {}
363+
//# sourceMappingURL=sourcemap.json
364+
`);
365+
366+
console.log(script.sourceMapURL);
367+
// Prints: sourcemap.json
368+
```
369+
370+
```cjs
359371
const vm = require('node:vm');
360372

361373
const script = new vm.Script(`

lib/internal/modules/cjs/loader.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1084,7 +1084,10 @@ function wrapSafe(filename, content, cjsModuleInstance) {
10841084
},
10851085
});
10861086

1087-
maybeCacheSourceMap(filename, content, this, false, undefined, script.sourceMapURL);
1087+
// Cache the source map for the module if present.
1088+
if (script.sourceMapURL) {
1089+
maybeCacheSourceMap(filename, content, this, false, undefined, script.sourceMapURL);
1090+
}
10881091

10891092
return script.runInThisContext({
10901093
displayErrors: true,
@@ -1107,7 +1110,10 @@ function wrapSafe(filename, content, cjsModuleInstance) {
11071110
},
11081111
});
11091112

1110-
maybeCacheSourceMap(filename, content, this, false, undefined, result.sourceMapURL);
1113+
// Cache the source map for the module if present.
1114+
if (result.sourceMapURL) {
1115+
maybeCacheSourceMap(filename, content, this, false, undefined, result.sourceMapURL);
1116+
}
11111117

11121118
return result.function;
11131119
} catch (err) {

lib/internal/process/pre_execution.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,9 +579,11 @@ function initializeESMLoader() {
579579
}
580580

581581
function initializeSourceMapsHandlers() {
582-
const { setSourceMapsEnabled } =
582+
const { setSourceMapsEnabled, getSourceMapsEnabled } =
583583
require('internal/source_map/source_map_cache');
584584
process.setSourceMapsEnabled = setSourceMapsEnabled;
585+
// Initialize the environment flag of source maps.
586+
getSourceMapsEnabled();
585587
}
586588

587589
function initializeFrozenIntrinsics() {

lib/internal/source_map/source_map_cache.js

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -126,45 +126,48 @@ function maybeCacheSourceMap(filename, content, cjsModuleInstance, isGeneratedSo
126126
sourceMapURL = extractSourceMapURLMagicComment(content);
127127
}
128128

129+
// Bail out when there is no source map url.
130+
if (typeof sourceMapURL !== 'string') {
131+
return;
132+
}
133+
129134
if (sourceURL === undefined) {
130135
sourceURL = extractSourceURLMagicComment(content);
131136
}
132137

133-
if (sourceMapURL) {
134-
const data = dataFromUrl(filename, sourceMapURL);
135-
const url = data ? null : sourceMapURL;
136-
if (cjsModuleInstance) {
137-
cjsSourceMapCache.set(cjsModuleInstance, {
138-
filename,
139-
lineLengths: lineLengths(content),
140-
data,
141-
url,
142-
sourceURL,
143-
});
144-
} else if (isGeneratedSource) {
145-
const entry = {
146-
lineLengths: lineLengths(content),
147-
data,
148-
url,
149-
sourceURL
150-
};
151-
generatedSourceMapCache.set(filename, entry);
152-
if (sourceURL) {
153-
generatedSourceMapCache.set(sourceURL, entry);
154-
}
155-
} else {
156-
// If there is no cjsModuleInstance and is not generated source assume we are in a
157-
// "modules/esm" context.
158-
const entry = {
159-
lineLengths: lineLengths(content),
160-
data,
161-
url,
162-
sourceURL,
163-
};
164-
esmSourceMapCache.set(filename, entry);
165-
if (sourceURL) {
166-
esmSourceMapCache.set(sourceURL, entry);
167-
}
138+
const data = dataFromUrl(filename, sourceMapURL);
139+
const url = data ? null : sourceMapURL;
140+
if (cjsModuleInstance) {
141+
cjsSourceMapCache.set(cjsModuleInstance, {
142+
filename,
143+
lineLengths: lineLengths(content),
144+
data,
145+
url,
146+
sourceURL,
147+
});
148+
} else if (isGeneratedSource) {
149+
const entry = {
150+
lineLengths: lineLengths(content),
151+
data,
152+
url,
153+
sourceURL
154+
};
155+
generatedSourceMapCache.set(filename, entry);
156+
if (sourceURL) {
157+
generatedSourceMapCache.set(sourceURL, entry);
158+
}
159+
} else {
160+
// If there is no cjsModuleInstance and is not generated source assume we are in a
161+
// "modules/esm" context.
162+
const entry = {
163+
lineLengths: lineLengths(content),
164+
data,
165+
url,
166+
sourceURL,
167+
};
168+
esmSourceMapCache.set(filename, entry);
169+
if (sourceURL) {
170+
esmSourceMapCache.set(sourceURL, entry);
168171
}
169172
}
170173
}

0 commit comments

Comments
 (0)