[loader] Never return a generator, use JSON where possible
This commit is contained in:
Родитель
f7ae13d735
Коммит
307b3c5974
|
@ -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 {
|
Загрузка…
Ссылка в новой задаче