From d1d9f00b1bd660842addf5e6b1d1b64c852a9eea Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sun, 5 Nov 2023 17:16:09 +0800 Subject: added hover prefixer --- .../lib/serialization/PlainObjectSerializer.js | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 node_modules/webpack/lib/serialization/PlainObjectSerializer.js (limited to 'node_modules/webpack/lib/serialization/PlainObjectSerializer.js') diff --git a/node_modules/webpack/lib/serialization/PlainObjectSerializer.js b/node_modules/webpack/lib/serialization/PlainObjectSerializer.js new file mode 100644 index 00000000..b10ff555 --- /dev/null +++ b/node_modules/webpack/lib/serialization/PlainObjectSerializer.js @@ -0,0 +1,91 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php +*/ + +"use strict"; + +/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */ +/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */ + +const cache = new WeakMap(); + +class ObjectStructure { + constructor() { + this.keys = undefined; + this.children = undefined; + } + + getKeys(keys) { + if (this.keys === undefined) this.keys = keys; + return this.keys; + } + + key(key) { + if (this.children === undefined) this.children = new Map(); + const child = this.children.get(key); + if (child !== undefined) return child; + const newChild = new ObjectStructure(); + this.children.set(key, newChild); + return newChild; + } +} + +const getCachedKeys = (keys, cacheAssoc) => { + let root = cache.get(cacheAssoc); + if (root === undefined) { + root = new ObjectStructure(); + cache.set(cacheAssoc, root); + } + let current = root; + for (const key of keys) { + current = current.key(key); + } + return current.getKeys(keys); +}; + +class PlainObjectSerializer { + /** + * @param {Object} obj plain object + * @param {ObjectSerializerContext} context context + */ + serialize(obj, context) { + const keys = Object.keys(obj); + if (keys.length > 128) { + // Objects with so many keys are unlikely to share structure + // with other objects + context.write(keys); + for (const key of keys) { + context.write(obj[key]); + } + } else if (keys.length > 1) { + context.write(getCachedKeys(keys, context.write)); + for (const key of keys) { + context.write(obj[key]); + } + } else if (keys.length === 1) { + const key = keys[0]; + context.write(key); + context.write(obj[key]); + } else { + context.write(null); + } + } + /** + * @param {ObjectDeserializerContext} context context + * @returns {Object} plain object + */ + deserialize(context) { + const keys = context.read(); + const obj = {}; + if (Array.isArray(keys)) { + for (const key of keys) { + obj[key] = context.read(); + } + } else if (keys !== null) { + obj[keys] = context.read(); + } + return obj; + } +} + +module.exports = PlainObjectSerializer; -- cgit v1.2.3