webpack/lib/util/registerExternalSerializer.js

300 lines
6.7 KiB
JavaScript
Raw Normal View History

2018-10-09 20:30:59 +08:00
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
const { register } = require("./serialization");
2018-10-09 20:30:59 +08:00
2018-10-30 05:16:40 +08:00
const Position = /** @type {TODO} */ (require("acorn")).Position;
2018-10-09 20:30:59 +08:00
const SourceLocation = require("acorn").SourceLocation;
const {
CachedSource,
ConcatSource,
OriginalSource,
PrefixSource,
RawSource,
ReplaceSource,
SourceMapSource
} = require("webpack-sources");
2018-10-09 20:30:59 +08:00
2019-10-22 17:04:48 +08:00
/** @typedef {import("acorn").Position} Position */
2018-10-09 20:30:59 +08:00
/** @typedef {import("../Dependency").RealDependencyLocation} RealDependencyLocation */
2018-10-30 05:16:40 +08:00
/** @typedef {import("../Dependency").SourcePosition} SourcePosition */
2018-12-28 21:48:18 +08:00
/** @typedef {import("./serialization").ObjectDeserializerContext} ObjectDeserializerContext */
/** @typedef {import("./serialization").ObjectSerializerContext} ObjectSerializerContext */
2018-10-09 20:30:59 +08:00
const CURRENT_MODULE = "webpack/lib/util/registerExternalSerializer";
register(
2018-10-09 20:30:59 +08:00
CachedSource,
CURRENT_MODULE,
"webpack-sources/CachedSource",
2019-06-13 16:51:12 +08:00
new (class CachedSourceSerializer {
2018-10-09 20:30:59 +08:00
/**
* @param {CachedSource} source the cached source to be serialized
* @param {ObjectSerializerContext} context context
2018-10-09 20:30:59 +08:00
* @returns {void}
*/
serialize(source, { write }) {
write(source.original());
write(source.getCachedData());
2018-10-09 20:30:59 +08:00
}
/**
* @param {ObjectDeserializerContext} context context
2018-10-09 20:30:59 +08:00
* @returns {CachedSource} cached source
*/
deserialize({ read }) {
const source = read();
const cachedData = read();
return new CachedSource(source, cachedData);
2018-10-09 20:30:59 +08:00
}
2019-06-13 16:51:12 +08:00
})()
2018-10-09 20:30:59 +08:00
);
register(
2018-10-09 20:30:59 +08:00
RawSource,
CURRENT_MODULE,
"webpack-sources/RawSource",
2019-06-13 16:51:12 +08:00
new (class RawSourceSerializer {
2018-10-09 20:30:59 +08:00
/**
* @param {RawSource} source the raw source to be serialized
* @param {ObjectSerializerContext} context context
2018-10-09 20:30:59 +08:00
* @returns {void}
*/
serialize(source, { write }) {
write(source.buffer());
write(!source.isBuffer());
2018-10-09 20:30:59 +08:00
}
/**
* @param {ObjectDeserializerContext} context context
2018-10-09 20:30:59 +08:00
* @returns {RawSource} raw source
*/
deserialize({ read }) {
const source = read();
const convertToString = read();
return new RawSource(source, convertToString);
2018-10-09 20:30:59 +08:00
}
2019-06-13 16:51:12 +08:00
})()
2018-10-09 20:30:59 +08:00
);
register(
ConcatSource,
CURRENT_MODULE,
"webpack-sources/ConcatSource",
2019-06-13 16:51:12 +08:00
new (class ConcatSourceSerializer {
/**
* @param {ConcatSource} source the concat source to be serialized
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
write(source.getChildren());
}
/**
* @param {ObjectDeserializerContext} context context
* @returns {ConcatSource} concat source
*/
deserialize({ read }) {
const source = new ConcatSource();
source.addAllSkipOptimizing(read());
return source;
}
2019-06-13 16:51:12 +08:00
})()
);
register(
PrefixSource,
CURRENT_MODULE,
"webpack-sources/PrefixSource",
2019-06-13 16:51:12 +08:00
new (class PrefixSourceSerializer {
/**
* @param {PrefixSource} source the prefix source to be serialized
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
write(source.getPrefix());
write(source.original());
}
/**
* @param {ObjectDeserializerContext} context context
* @returns {PrefixSource} prefix source
*/
deserialize({ read }) {
return new PrefixSource(read(), read());
}
2019-06-13 16:51:12 +08:00
})()
);
register(
ReplaceSource,
CURRENT_MODULE,
"webpack-sources/ReplaceSource",
2019-06-13 16:51:12 +08:00
new (class ReplaceSourceSerializer {
/**
* @param {ReplaceSource} source the replace source to be serialized
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
write(source.original());
write(source.getName());
const replacements = source.getReplacements();
write(replacements.length);
for (const repl of replacements) {
write(repl.start);
write(repl.end);
}
for (const repl of replacements) {
write(repl.content);
write(repl.name);
}
}
/**
* @param {ObjectDeserializerContext} context context
* @returns {ReplaceSource} replace source
*/
deserialize({ read }) {
const source = new ReplaceSource(read(), read());
const len = read();
const startEndBuffer = [];
for (let i = 0; i < len; i++) {
startEndBuffer.push(read(), read());
}
let j = 0;
for (let i = 0; i < len; i++) {
source.replace(
startEndBuffer[j++],
startEndBuffer[j++],
read(),
read()
);
}
return source;
}
2019-06-13 16:51:12 +08:00
})()
);
register(
2018-10-09 20:30:59 +08:00
OriginalSource,
CURRENT_MODULE,
"webpack-sources/OriginalSource",
2019-06-13 16:51:12 +08:00
new (class OriginalSourceSerializer {
2018-10-09 20:30:59 +08:00
/**
* @param {OriginalSource} source the original source to be serialized
* @param {ObjectSerializerContext} context context
2018-10-09 20:30:59 +08:00
* @returns {void}
*/
serialize(source, { write }) {
write(source.buffer());
write(source.getName());
2018-10-09 20:30:59 +08:00
}
/**
* @param {ObjectDeserializerContext} context context
2018-10-09 20:30:59 +08:00
* @returns {OriginalSource} original source
*/
deserialize({ read }) {
const buffer = read();
const name = read();
return new OriginalSource(buffer, name);
2018-10-09 20:30:59 +08:00
}
2019-06-13 16:51:12 +08:00
})()
2018-10-09 20:30:59 +08:00
);
register(
2018-10-09 20:30:59 +08:00
SourceLocation,
CURRENT_MODULE,
"acorn/SourceLocation",
2019-06-13 16:51:12 +08:00
new (class SourceLocationSerializer {
2018-10-09 20:30:59 +08:00
/**
* @param {SourceLocation} loc the location to be serialized
* @param {ObjectSerializerContext} context context
2018-10-09 20:30:59 +08:00
* @returns {void}
*/
serialize(loc, { write }) {
write(loc.start.line);
write(loc.start.column);
write(loc.end.line);
write(loc.end.column);
}
/**
* @param {ObjectDeserializerContext} context context
2018-10-09 20:30:59 +08:00
* @returns {RealDependencyLocation} location
*/
deserialize({ read }) {
return {
start: {
line: read(),
column: read()
},
end: {
line: read(),
column: read()
}
};
}
2019-06-13 16:51:12 +08:00
})()
2018-10-09 20:30:59 +08:00
);
register(
2018-10-30 05:16:40 +08:00
Position,
CURRENT_MODULE,
"acorn/Position",
2019-06-13 16:51:12 +08:00
new (class PositionSerializer {
2018-10-30 05:16:40 +08:00
/**
* @param {Position} pos the position to be serialized
* @param {ObjectSerializerContext} context context
2018-10-30 05:16:40 +08:00
* @returns {void}
*/
serialize(pos, { write }) {
write(pos.line);
write(pos.column);
}
/**
* @param {ObjectDeserializerContext} context context
2018-10-30 05:16:40 +08:00
* @returns {SourcePosition} position
*/
deserialize({ read }) {
return {
line: read(),
column: read()
};
}
2019-06-13 16:51:12 +08:00
})()
2018-10-30 05:16:40 +08:00
);
register(
SourceMapSource,
CURRENT_MODULE,
"webpack-sources/SourceMapSource",
2019-06-13 16:51:12 +08:00
new (class SourceMapSourceSerializer {
/**
* @param {SourceMapSource} source the source map source to be serialized
* @param {ObjectSerializerContext} context context
* @returns {void}
*/
serialize(source, { write }) {
write(source.getArgsAsBuffers());
}
/**
* @param {ObjectDeserializerContext} context context
* @returns {SourceMapSource} source source map source
*/
deserialize({ read }) {
// @ts-ignore
return new SourceMapSource(...read());
}
2019-06-13 16:51:12 +08:00
})()
);