Skip to content

Commit

Permalink
fix(ssr): load sourcemaps alongside modules (fix: #3288) (#11576)
Browse files Browse the repository at this point in the history
  • Loading branch information
Vap0r1ze authored Jan 16, 2023
1 parent 47afb23 commit dc05e97
Showing 1 changed file with 24 additions and 3 deletions.
27 changes: 24 additions & 3 deletions packages/vite/src/node/ssr/ssrModuleLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
import { transformRequest } from '../server/transformRequest'
import type { InternalResolveOptionsWithOverrideConditions } from '../plugins/resolve'
import { tryNodeResolve } from '../plugins/resolve'
import { genSourceMapUrl } from '../server/sourcemap'
import {
ssrDynamicImportKey,
ssrExportAllKey,
Expand All @@ -25,6 +26,16 @@ interface SSRContext {

type SSRModule = Record<string, any>

// eslint-disable-next-line @typescript-eslint/no-empty-function
const AsyncFunction = async function () {}.constructor as typeof Function
let fnDeclarationLineCount = 0
{
const body = '/*code*/'
const source = new AsyncFunction('a', 'b', body).toString()
fnDeclarationLineCount =
source.slice(0, source.indexOf(body)).split('\n').length - 1
}

const pendingModules = new Map<string, Promise<SSRModule>>()
const pendingImports = new Map<string, string[]>()

Expand Down Expand Up @@ -181,17 +192,27 @@ async function instantiateModule(
}
}

let sourceMapSuffix = ''
if (result.map) {
const moduleSourceMap = Object.assign({}, result.map, {
// offset the first three lines of the module (function declaration and 'use strict')
mappings: ';'.repeat(fnDeclarationLineCount + 1) + result.map.mappings,
})
sourceMapSuffix =
'\n//# sourceMappingURL=' + genSourceMapUrl(moduleSourceMap)
}

try {
// eslint-disable-next-line @typescript-eslint/no-empty-function
const AsyncFunction = async function () {}.constructor as typeof Function
const initModule = new AsyncFunction(
`global`,
ssrModuleExportsKey,
ssrImportMetaKey,
ssrImportKey,
ssrDynamicImportKey,
ssrExportAllKey,
'"use strict";' + result.code + `\n//# sourceURL=${mod.url}`,
'"use strict";\n' +
result.code +
`\n//# sourceURL=${mod.url}${sourceMapSuffix}`,
)
await initModule(
context.global,
Expand Down

0 comments on commit dc05e97

Please sign in to comment.