[loader] Never return a generator, use JSON where possible

This commit is contained in:
Eloy Durán 2023-10-07 01:18:58 -07:00
Родитель f7ae13d735
Коммит 307b3c5974
5 изменённых файлов: 37 добавлений и 16 удалений

Просмотреть файл

@ -197,7 +197,7 @@ describe("webpackLoader", () => {
const result = await runLoader(source);
const transpiled = result.result![0]?.toString();
const sourceMap = result.result![1];
const consumer = new SourceMapConsumer(sourceMap!.toString() as any);
const consumer = new SourceMapConsumer(sourceMap! as any);
expect(
getGeneratedCodeForOriginalRange(
@ -225,7 +225,7 @@ describe("webpackLoader", () => {
const result = await runLoader(source);
const transpiled = result.result![0]?.toString();
const sourceMap = result.result![1];
const consumer = new SourceMapConsumer(sourceMap!.toString() as any);
const consumer = new SourceMapConsumer(sourceMap! as any);
// fs.writeFileSync(__dirname + "/tmp/test.out", transpiled!);
// fs.writeFileSync(__dirname + "/tmp/test.map", sourceMap!);
@ -256,7 +256,7 @@ describe("webpackLoader", () => {
const result = await runLoader(source);
const transpiled = result.result![0]?.toString();
const sourceMap = result.result![1];
const consumer = new SourceMapConsumer(sourceMap!.toString() as any);
const consumer = new SourceMapConsumer(sourceMap! as any);
expect(
consumer.generatedPositionFor({
@ -297,7 +297,7 @@ describe("webpackLoader", () => {
const result = await runLoader(source, { compileTS: true });
const transpiled = result.result![0]?.toString();
const sourceMap = result.result![1];
const consumer = new SourceMapConsumer(sourceMap!.toString() as any);
const consumer = new SourceMapConsumer(sourceMap! as any);
expect(
getGeneratedCodeForOriginalRange(

Просмотреть файл

@ -4,17 +4,17 @@ import {
RawSourceMap,
} from "source-map-js";
function toRawSourceMap(sourceMap: string | RawSourceMap): RawSourceMap {
return typeof sourceMap === "string" ? JSON.parse(sourceMap) : sourceMap;
}
export function applySourceMap(
sourcePath: string,
previousSourceMap: string | RawSourceMap,
nextSourceMap: string,
nextSourceMap: string | RawSourceMap,
): SourceMapGenerator {
const prev = new SourceMapConsumer(
typeof previousSourceMap === "string"
? JSON.parse(previousSourceMap)
: previousSourceMap,
);
const next = new SourceMapConsumer(JSON.parse(nextSourceMap));
const prev = new SourceMapConsumer(toRawSourceMap(previousSourceMap));
const next = new SourceMapConsumer(toRawSourceMap(nextSourceMap));
const pipeline = SourceMapGenerator.fromSourceMap(next);
pipeline.applySourceMap(prev, sourcePath);
return pipeline;

Просмотреть файл

@ -79,7 +79,7 @@ function extractAndApplySourceMap(
// ourselves rather than letting jest do the work.
tsResult = {
code: tsResultCode,
map: applySourceMap(sourcePath, sourceMap.toString(), tsResultMap) as any, // SourceMapGenerator seems to satisfy the runtime needs, but it's unclear which properties it uses exactly
map: applySourceMap(sourcePath, sourceMap.toJSON(), tsResultMap) as any, // SourceMapGenerator seems to satisfy the runtime needs, but it's unclear which properties it uses exactly
};
}
return tsResult;

Просмотреть файл

@ -1,5 +1,5 @@
import type { LoaderDefinitionFunction } from "webpack";
import { SourceMapConsumer, SourceMapGenerator } from "source-map-js";
import { SourceMapGenerator } from "source-map-js";
import { transform } from "./transform";
import { applySourceMap } from "./source-map-utils";
@ -27,11 +27,11 @@ const webpackLoader: LoaderDefinitionFunction = function (
applySourceMap(
this.resourcePath,
inputSourceMap as string,
sourceMap.toString(),
) as any, // SourceMapGenerator seems to satisfy the runtime needs, but it's unclear which properties it uses exactly
sourceMap.toJSON(),
).toJSON(),
);
} else if (transformed && sourceMap) {
callback(null, transformed, sourceMap as any); // SourceMapGenerator seems to satisfy the runtime needs, but it's unclear which properties it uses exactly
callback(null, transformed, sourceMap.toJSON());
} else if (transformed) {
callback(null, transformed, inputSourceMap);
} else {

Просмотреть файл

@ -0,0 +1,21 @@
diff --git a/node_modules/source-map-js/source-map.d.ts b/node_modules/source-map-js/source-map.d.ts
index 9f8a4b3..2117555 100644
--- a/node_modules/source-map-js/source-map.d.ts
+++ b/node_modules/source-map-js/source-map.d.ts
@@ -5,7 +5,7 @@ declare module 'source-map-js' {
}
export interface RawSourceMap extends StartOfSourceMap {
- version: string;
+ version: number;
sources: string[];
names: string[];
sourcesContent?: string[];
@@ -75,6 +75,7 @@ declare module 'source-map-js' {
setSourceContent(sourceFile: string, sourceContent: string): void;
applySourceMap(sourceMapConsumer: SourceMapConsumer, sourceFile?: string, sourceMapPath?: string): void;
toString(): string;
+ toJSON(): RawSourceMap;
}
export interface CodeWithSourceMap {