feat: refactoring project
This commit is contained in:
134
node_modules/webpack/lib/serialization/ObjectMiddleware.js
generated
vendored
134
node_modules/webpack/lib/serialization/ObjectMiddleware.js
generated
vendored
@@ -137,8 +137,9 @@ jsTypes.set(TypeError, new ErrorObjectSerializer(TypeError));
|
||||
// If in a sandboxed environment (e. g. jest), this escapes the sandbox and registers
|
||||
// real Object and Array types to. These types may occur in the wild too, e. g. when
|
||||
// using Structured Clone in postMessage.
|
||||
// eslint-disable-next-line n/exports-style
|
||||
if (exports.constructor !== Object) {
|
||||
// eslint-disable-next-line jsdoc/check-types
|
||||
// eslint-disable-next-line jsdoc/check-types, n/exports-style
|
||||
const Obj = /** @type {typeof Object} */ (exports.constructor);
|
||||
const Fn = /** @type {typeof Function} */ (Obj.constructor);
|
||||
for (const [type, config] of Array.from(jsTypes)) {
|
||||
@@ -185,6 +186,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
this.extendContext = extendContext;
|
||||
this._hashFunction = hashFunction;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {RegExp} regExp RegExp for which the request is tested
|
||||
* @param {function(string): boolean} loader loader to load the request, returns true when successful
|
||||
@@ -202,7 +204,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
* @returns {void}
|
||||
*/
|
||||
static register(Constructor, request, name, serializer) {
|
||||
const key = request + "/" + name;
|
||||
const key = `${request}/${name}`;
|
||||
|
||||
if (serializers.has(Constructor)) {
|
||||
throw new Error(
|
||||
@@ -267,7 +269,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
* @returns {ObjectSerializer} serializer
|
||||
*/
|
||||
static getDeserializerFor(request, name) {
|
||||
const key = request + "/" + name;
|
||||
const key = `${request}/${name}`;
|
||||
const serializer = serializerInversed.get(key);
|
||||
|
||||
if (serializer === undefined) {
|
||||
@@ -279,11 +281,11 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
|
||||
/**
|
||||
* @param {string} request request
|
||||
* @param {TODO} name name
|
||||
* @returns {ObjectSerializer} serializer
|
||||
* @param {string} name name
|
||||
* @returns {ObjectSerializer | undefined} serializer
|
||||
*/
|
||||
static _getDeserializerForWithoutError(request, name) {
|
||||
const key = request + "/" + name;
|
||||
const key = `${request}/${name}`;
|
||||
const serializer = serializerInversed.get(key);
|
||||
return serializer;
|
||||
}
|
||||
@@ -302,6 +304,10 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
referenceable.set(item, currentPos++);
|
||||
};
|
||||
let bufferDedupeMap = new Map();
|
||||
/**
|
||||
* @param {Buffer} buf buffer
|
||||
* @returns {Buffer} deduped buffer
|
||||
*/
|
||||
const dedupeBuffer = buf => {
|
||||
const len = buf.length;
|
||||
const entry = bufferDedupeMap.get(len);
|
||||
@@ -316,17 +322,16 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
}
|
||||
bufferDedupeMap.set(len, [entry, buf]);
|
||||
return buf;
|
||||
} else {
|
||||
const hash = toHash(entry, this._hashFunction);
|
||||
const newMap = new Map();
|
||||
newMap.set(hash, entry);
|
||||
bufferDedupeMap.set(len, newMap);
|
||||
const hashBuf = toHash(buf, this._hashFunction);
|
||||
if (hash === hashBuf) {
|
||||
return entry;
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
const hash = toHash(entry, this._hashFunction);
|
||||
const newMap = new Map();
|
||||
newMap.set(hash, entry);
|
||||
bufferDedupeMap.set(len, newMap);
|
||||
const hashBuf = toHash(buf, this._hashFunction);
|
||||
if (hash === hashBuf) {
|
||||
return entry;
|
||||
}
|
||||
return buf;
|
||||
} else if (Array.isArray(entry)) {
|
||||
if (entry.length < 16) {
|
||||
for (const item of entry) {
|
||||
@@ -336,32 +341,29 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
}
|
||||
entry.push(buf);
|
||||
return buf;
|
||||
} else {
|
||||
const newMap = new Map();
|
||||
const hash = toHash(buf, this._hashFunction);
|
||||
let found;
|
||||
for (const item of entry) {
|
||||
const itemHash = toHash(item, this._hashFunction);
|
||||
newMap.set(itemHash, item);
|
||||
if (found === undefined && itemHash === hash) found = item;
|
||||
}
|
||||
bufferDedupeMap.set(len, newMap);
|
||||
if (found === undefined) {
|
||||
newMap.set(hash, buf);
|
||||
return buf;
|
||||
} else {
|
||||
return found;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const newMap = new Map();
|
||||
const hash = toHash(buf, this._hashFunction);
|
||||
const item = entry.get(hash);
|
||||
if (item !== undefined) {
|
||||
return item;
|
||||
let found;
|
||||
for (const item of entry) {
|
||||
const itemHash = toHash(item, this._hashFunction);
|
||||
newMap.set(itemHash, item);
|
||||
if (found === undefined && itemHash === hash) found = item;
|
||||
}
|
||||
entry.set(hash, buf);
|
||||
return buf;
|
||||
bufferDedupeMap.set(len, newMap);
|
||||
if (found === undefined) {
|
||||
newMap.set(hash, buf);
|
||||
return buf;
|
||||
}
|
||||
return found;
|
||||
}
|
||||
const hash = toHash(buf, this._hashFunction);
|
||||
const item = entry.get(hash);
|
||||
if (item !== undefined) {
|
||||
return item;
|
||||
}
|
||||
entry.set(hash, buf);
|
||||
return buf;
|
||||
};
|
||||
let currentPosTypeLookup = 0;
|
||||
let objectTypeLookup = new Map();
|
||||
@@ -385,7 +387,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
if (request) {
|
||||
return `${request}${name ? `.${name}` : ""}`;
|
||||
}
|
||||
} catch (e) {
|
||||
} catch (_err) {
|
||||
// ignore -> fallback
|
||||
}
|
||||
if (typeof item === "object" && item !== null) {
|
||||
@@ -408,27 +410,29 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
}
|
||||
try {
|
||||
return `${item}`;
|
||||
} catch (e) {
|
||||
return `(${e.message})`;
|
||||
} catch (err) {
|
||||
return `(${err.message})`;
|
||||
}
|
||||
})
|
||||
.join(" -> ");
|
||||
};
|
||||
/** @type {WeakSet<Error>} */
|
||||
let hasDebugInfoAttached;
|
||||
let ctx = {
|
||||
write(value, key) {
|
||||
try {
|
||||
process(value);
|
||||
} catch (e) {
|
||||
if (e !== NOT_SERIALIZABLE) {
|
||||
} catch (err) {
|
||||
if (err !== NOT_SERIALIZABLE) {
|
||||
if (hasDebugInfoAttached === undefined)
|
||||
hasDebugInfoAttached = new WeakSet();
|
||||
if (!hasDebugInfoAttached.has(e)) {
|
||||
e.message += `\nwhile serializing ${stackToString(value)}`;
|
||||
hasDebugInfoAttached.add(e);
|
||||
if (!hasDebugInfoAttached.has(/** @type {Error} */ (err))) {
|
||||
/** @type {Error} */
|
||||
(err).message += `\nwhile serializing ${stackToString(value)}`;
|
||||
hasDebugInfoAttached.add(/** @type {Error} */ (err));
|
||||
}
|
||||
}
|
||||
throw e;
|
||||
throw err;
|
||||
}
|
||||
},
|
||||
setCircularReference(ref) {
|
||||
@@ -491,7 +495,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
|
||||
if (cycleStack.has(item)) {
|
||||
throw new Error(
|
||||
`This is a circular references. To serialize circular references use 'setCircularReference' somewhere in the circle during serialize and deserialize.`
|
||||
"This is a circular references. To serialize circular references use 'setCircularReference' somewhere in the circle during serialize and deserialize."
|
||||
);
|
||||
}
|
||||
|
||||
@@ -542,7 +546,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
result.push(item);
|
||||
} else if (typeof item === "function") {
|
||||
if (!SerializerMiddleware.isLazy(item))
|
||||
throw new Error("Unexpected function " + item);
|
||||
throw new Error(`Unexpected function ${item}`);
|
||||
/** @type {SerializedType} */
|
||||
const serializedData =
|
||||
SerializerMiddleware.getLazySerializedValue(item);
|
||||
@@ -573,10 +577,10 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
process(item);
|
||||
}
|
||||
return result;
|
||||
} catch (e) {
|
||||
if (e === NOT_SERIALIZABLE) return null;
|
||||
} catch (err) {
|
||||
if (err === NOT_SERIALIZABLE) return null;
|
||||
|
||||
throw e;
|
||||
throw err;
|
||||
} finally {
|
||||
// Get rid of these references to avoid leaking memory
|
||||
// This happens because the optimized code v8 generates
|
||||
@@ -588,7 +592,8 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
bufferDedupeMap =
|
||||
objectTypeLookup =
|
||||
ctx =
|
||||
undefined;
|
||||
/** @type {EXPECTED_ANY} */
|
||||
(undefined);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -637,7 +642,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
if (nextItem === ESCAPE_ESCAPE_VALUE) {
|
||||
return ESCAPE;
|
||||
} else if (nextItem === ESCAPE_UNDEFINED) {
|
||||
return undefined;
|
||||
// Nothing
|
||||
} else if (nextItem === ESCAPE_END_OBJECT) {
|
||||
throw new Error(
|
||||
`Unexpected end of object at position ${currentDataPos - 1}`
|
||||
@@ -659,7 +664,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
`at position ${currentDataPos - 1}`
|
||||
);
|
||||
}
|
||||
const name = read();
|
||||
const name = /** @type {string} */ (read());
|
||||
|
||||
serializer = ObjectMiddleware._getDeserializerForWithoutError(
|
||||
request,
|
||||
@@ -670,11 +675,9 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
if (request && !loadedRequests.has(request)) {
|
||||
let loaded = false;
|
||||
for (const [regExp, loader] of loaders) {
|
||||
if (regExp.test(request)) {
|
||||
if (loader(request)) {
|
||||
loaded = true;
|
||||
break;
|
||||
}
|
||||
if (regExp.test(request) && loader(request)) {
|
||||
loaded = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!loaded) {
|
||||
@@ -725,7 +728,8 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
: serializerEntry[1].name
|
||||
? `${serializerEntry[1].request} ${serializerEntry[1].name}`
|
||||
: serializerEntry[1].request;
|
||||
err.message += `\n(during deserialization of ${name})`;
|
||||
/** @type {Error} */
|
||||
(err).message += `\n(during deserialization of ${name})`;
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
@@ -759,7 +763,13 @@ class ObjectMiddleware extends SerializerMiddleware {
|
||||
// This happens because the optimized code v8 generates
|
||||
// is optimized for our "ctx.read" method so it will reference
|
||||
// it from e. g. Dependency.prototype.deserialize -(IC)-> ctx.read
|
||||
result = referenceable = data = objectTypeLookup = ctx = undefined;
|
||||
result =
|
||||
referenceable =
|
||||
data =
|
||||
objectTypeLookup =
|
||||
ctx =
|
||||
/** @type {EXPECTED_ANY} */
|
||||
(undefined);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user