讨论加特殊图标
This commit is contained in:
10
.output/server/node_modules/devalue/package.json
generated
vendored
10
.output/server/node_modules/devalue/package.json
generated
vendored
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"name": "devalue",
|
||||
"description": "Gets the job done when JSON.stringify can't",
|
||||
"version": "4.3.2",
|
||||
"version": "5.1.1",
|
||||
"repository": "Rich-Harris/devalue",
|
||||
"sideEffects": false,
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./types/index.d.ts",
|
||||
@@ -25,9 +26,12 @@
|
||||
"scripts": {
|
||||
"build": "dts-buddy",
|
||||
"test": "uvu test",
|
||||
"prepublishOnly": "npm test && publint && npm run build"
|
||||
"prepublishOnly": "npm test && npm run build && publint"
|
||||
},
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"packageManager": "pnpm@8.5.1"
|
||||
"packageManager": "pnpm@8.5.1",
|
||||
"__npminstall_done": true,
|
||||
"_from": "devalue@5.1.1",
|
||||
"_resolved": "https://registry.npmmirror.com/devalue/-/devalue-5.1.1.tgz"
|
||||
}
|
||||
110
.output/server/node_modules/devalue/src/base64.js
generated
vendored
Normal file
110
.output/server/node_modules/devalue/src/base64.js
generated
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* Base64 Encodes an arraybuffer
|
||||
* @param {ArrayBuffer} arraybuffer
|
||||
* @returns {string}
|
||||
*/
|
||||
export function encode64(arraybuffer) {
|
||||
const dv = new DataView(arraybuffer);
|
||||
let binaryString = "";
|
||||
|
||||
for (let i = 0; i < arraybuffer.byteLength; i++) {
|
||||
binaryString += String.fromCharCode(dv.getUint8(i));
|
||||
}
|
||||
|
||||
return binaryToAscii(binaryString);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decodes a base64 string into an arraybuffer
|
||||
* @param {string} string
|
||||
* @returns {ArrayBuffer}
|
||||
*/
|
||||
export function decode64(string) {
|
||||
const binaryString = asciiToBinary(string);
|
||||
const arraybuffer = new ArrayBuffer(binaryString.length);
|
||||
const dv = new DataView(arraybuffer);
|
||||
|
||||
for (let i = 0; i < arraybuffer.byteLength; i++) {
|
||||
dv.setUint8(i, binaryString.charCodeAt(i));
|
||||
}
|
||||
|
||||
return arraybuffer;
|
||||
}
|
||||
|
||||
const KEY_STRING =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
|
||||
/**
|
||||
* Substitute for atob since it's deprecated in node.
|
||||
* Does not do any input validation.
|
||||
*
|
||||
* @see https://github.com/jsdom/abab/blob/master/lib/atob.js
|
||||
*
|
||||
* @param {string} data
|
||||
* @returns {string}
|
||||
*/
|
||||
function asciiToBinary(data) {
|
||||
if (data.length % 4 === 0) {
|
||||
data = data.replace(/==?$/, "");
|
||||
}
|
||||
|
||||
let output = "";
|
||||
let buffer = 0;
|
||||
let accumulatedBits = 0;
|
||||
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
buffer <<= 6;
|
||||
buffer |= KEY_STRING.indexOf(data[i]);
|
||||
accumulatedBits += 6;
|
||||
if (accumulatedBits === 24) {
|
||||
output += String.fromCharCode((buffer & 0xff0000) >> 16);
|
||||
output += String.fromCharCode((buffer & 0xff00) >> 8);
|
||||
output += String.fromCharCode(buffer & 0xff);
|
||||
buffer = accumulatedBits = 0;
|
||||
}
|
||||
}
|
||||
if (accumulatedBits === 12) {
|
||||
buffer >>= 4;
|
||||
output += String.fromCharCode(buffer);
|
||||
} else if (accumulatedBits === 18) {
|
||||
buffer >>= 2;
|
||||
output += String.fromCharCode((buffer & 0xff00) >> 8);
|
||||
output += String.fromCharCode(buffer & 0xff);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Substitute for btoa since it's deprecated in node.
|
||||
* Does not do any input validation.
|
||||
*
|
||||
* @see https://github.com/jsdom/abab/blob/master/lib/btoa.js
|
||||
*
|
||||
* @param {string} str
|
||||
* @returns {string}
|
||||
*/
|
||||
function binaryToAscii(str) {
|
||||
let out = "";
|
||||
for (let i = 0; i < str.length; i += 3) {
|
||||
/** @type {[number, number, number, number]} */
|
||||
const groupsOfSix = [undefined, undefined, undefined, undefined];
|
||||
groupsOfSix[0] = str.charCodeAt(i) >> 2;
|
||||
groupsOfSix[1] = (str.charCodeAt(i) & 0x03) << 4;
|
||||
if (str.length > i + 1) {
|
||||
groupsOfSix[1] |= str.charCodeAt(i + 1) >> 4;
|
||||
groupsOfSix[2] = (str.charCodeAt(i + 1) & 0x0f) << 2;
|
||||
}
|
||||
if (str.length > i + 2) {
|
||||
groupsOfSix[2] |= str.charCodeAt(i + 2) >> 6;
|
||||
groupsOfSix[3] = str.charCodeAt(i + 2) & 0x3f;
|
||||
}
|
||||
for (let j = 0; j < groupsOfSix.length; j++) {
|
||||
if (typeof groupsOfSix[j] === "undefined") {
|
||||
out += "=";
|
||||
} else {
|
||||
out += KEY_STRING[groupsOfSix[j]];
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
27
.output/server/node_modules/devalue/src/parse.js
generated
vendored
27
.output/server/node_modules/devalue/src/parse.js
generated
vendored
@@ -1,3 +1,4 @@
|
||||
import { decode64 } from './base64.js';
|
||||
import {
|
||||
HOLE,
|
||||
NAN,
|
||||
@@ -101,6 +102,32 @@ export function unflatten(parsed, revivers) {
|
||||
}
|
||||
break;
|
||||
|
||||
case "Int8Array":
|
||||
case "Uint8Array":
|
||||
case "Uint8ClampedArray":
|
||||
case "Int16Array":
|
||||
case "Uint16Array":
|
||||
case "Int32Array":
|
||||
case "Uint32Array":
|
||||
case "Float32Array":
|
||||
case "Float64Array":
|
||||
case "BigInt64Array":
|
||||
case "BigUint64Array": {
|
||||
const TypedArrayConstructor = globalThis[type];
|
||||
const base64 = value[1];
|
||||
const arraybuffer = decode64(base64);
|
||||
const typedArray = new TypedArrayConstructor(arraybuffer);
|
||||
hydrated[index] = typedArray;
|
||||
break;
|
||||
}
|
||||
|
||||
case "ArrayBuffer": {
|
||||
const base64 = value[1];
|
||||
const arraybuffer = decode64(base64);
|
||||
hydrated[index] = arraybuffer;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
throw new Error(`Unknown type ${type}`);
|
||||
}
|
||||
|
||||
46
.output/server/node_modules/devalue/src/stringify.js
generated
vendored
46
.output/server/node_modules/devalue/src/stringify.js
generated
vendored
@@ -1,8 +1,10 @@
|
||||
import {
|
||||
DevalueError,
|
||||
enumerable_symbols,
|
||||
get_type,
|
||||
is_plain_object,
|
||||
is_primitive,
|
||||
stringify_key,
|
||||
stringify_string
|
||||
} from './utils.js';
|
||||
import {
|
||||
@@ -13,6 +15,7 @@ import {
|
||||
POSITIVE_INFINITY,
|
||||
UNDEFINED
|
||||
} from './constants.js';
|
||||
import { encode64 } from './base64.js';
|
||||
|
||||
/**
|
||||
* Turn a value into a JSON string that can be parsed with `devalue.parse`
|
||||
@@ -28,8 +31,10 @@ export function stringify(value, reducers) {
|
||||
|
||||
/** @type {Array<{ key: string, fn: (value: any) => any }>} */
|
||||
const custom = [];
|
||||
for (const key in reducers) {
|
||||
custom.push({ key, fn: reducers[key] });
|
||||
if (reducers) {
|
||||
for (const key of Object.getOwnPropertyNames(reducers)) {
|
||||
custom.push({ key, fn: reducers[key] });
|
||||
}
|
||||
}
|
||||
|
||||
/** @type {string[]} */
|
||||
@@ -81,7 +86,8 @@ export function stringify(value, reducers) {
|
||||
break;
|
||||
|
||||
case 'Date':
|
||||
str = `["Date","${thing.toISOString()}"]`;
|
||||
const valid = !isNaN(thing.getDate());
|
||||
str = `["Date","${valid ? thing.toISOString() : ''}"]`;
|
||||
break;
|
||||
|
||||
case 'RegExp':
|
||||
@@ -128,11 +134,39 @@ export function stringify(value, reducers) {
|
||||
`.get(${is_primitive(key) ? stringify_primitive(key) : '...'})`
|
||||
);
|
||||
str += `,${flatten(key)},${flatten(value)}`;
|
||||
keys.pop();
|
||||
}
|
||||
|
||||
str += ']';
|
||||
break;
|
||||
|
||||
case "Int8Array":
|
||||
case "Uint8Array":
|
||||
case "Uint8ClampedArray":
|
||||
case "Int16Array":
|
||||
case "Uint16Array":
|
||||
case "Int32Array":
|
||||
case "Uint32Array":
|
||||
case "Float32Array":
|
||||
case "Float64Array":
|
||||
case "BigInt64Array":
|
||||
case "BigUint64Array": {
|
||||
/** @type {import("./types.js").TypedArray} */
|
||||
const typedArray = thing;
|
||||
const base64 = encode64(typedArray.buffer);
|
||||
str = '["' + type + '","' + base64 + '"]';
|
||||
break;
|
||||
}
|
||||
|
||||
case "ArrayBuffer": {
|
||||
/** @type {ArrayBuffer} */
|
||||
const arraybuffer = thing;
|
||||
const base64 = encode64(arraybuffer);
|
||||
|
||||
str = `["ArrayBuffer","${base64}"]`;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
if (!is_plain_object(thing)) {
|
||||
throw new DevalueError(
|
||||
@@ -141,7 +175,7 @@ export function stringify(value, reducers) {
|
||||
);
|
||||
}
|
||||
|
||||
if (Object.getOwnPropertySymbols(thing).length > 0) {
|
||||
if (enumerable_symbols(thing).length > 0) {
|
||||
throw new DevalueError(
|
||||
`Cannot stringify POJOs with symbolic keys`,
|
||||
keys
|
||||
@@ -151,7 +185,7 @@ export function stringify(value, reducers) {
|
||||
if (Object.getPrototypeOf(thing) === null) {
|
||||
str = '["null"';
|
||||
for (const key in thing) {
|
||||
keys.push(`.${key}`);
|
||||
keys.push(stringify_key(key));
|
||||
str += `,${stringify_string(key)},${flatten(thing[key])}`;
|
||||
keys.pop();
|
||||
}
|
||||
@@ -162,7 +196,7 @@ export function stringify(value, reducers) {
|
||||
for (const key in thing) {
|
||||
if (started) str += ',';
|
||||
started = true;
|
||||
keys.push(`.${key}`);
|
||||
keys.push(stringify_key(key));
|
||||
str += `${stringify_string(key)}:${flatten(thing[key])}`;
|
||||
keys.pop();
|
||||
}
|
||||
|
||||
43
.output/server/node_modules/devalue/src/uneval.js
generated
vendored
43
.output/server/node_modules/devalue/src/uneval.js
generated
vendored
@@ -1,9 +1,11 @@
|
||||
import {
|
||||
DevalueError,
|
||||
enumerable_symbols,
|
||||
escaped,
|
||||
get_type,
|
||||
is_plain_object,
|
||||
is_primitive,
|
||||
stringify_key,
|
||||
stringify_string
|
||||
} from './utils.js';
|
||||
|
||||
@@ -80,6 +82,22 @@ export function uneval(value, replacer) {
|
||||
keys.pop();
|
||||
}
|
||||
break;
|
||||
|
||||
case "Int8Array":
|
||||
case "Uint8Array":
|
||||
case "Uint8ClampedArray":
|
||||
case "Int16Array":
|
||||
case "Uint16Array":
|
||||
case "Int32Array":
|
||||
case "Uint32Array":
|
||||
case "Float32Array":
|
||||
case "Float64Array":
|
||||
case "BigInt64Array":
|
||||
case "BigUint64Array":
|
||||
return;
|
||||
|
||||
case "ArrayBuffer":
|
||||
return;
|
||||
|
||||
default:
|
||||
if (!is_plain_object(thing)) {
|
||||
@@ -89,7 +107,7 @@ export function uneval(value, replacer) {
|
||||
);
|
||||
}
|
||||
|
||||
if (Object.getOwnPropertySymbols(thing).length > 0) {
|
||||
if (enumerable_symbols(thing).length > 0) {
|
||||
throw new DevalueError(
|
||||
`Cannot stringify POJOs with symbolic keys`,
|
||||
keys
|
||||
@@ -97,7 +115,7 @@ export function uneval(value, replacer) {
|
||||
}
|
||||
|
||||
for (const key in thing) {
|
||||
keys.push(`.${key}`);
|
||||
keys.push(stringify_key(key));
|
||||
walk(thing[key]);
|
||||
keys.pop();
|
||||
}
|
||||
@@ -159,6 +177,27 @@ export function uneval(value, replacer) {
|
||||
case 'Set':
|
||||
case 'Map':
|
||||
return `new ${type}([${Array.from(thing).map(stringify).join(',')}])`;
|
||||
|
||||
case "Int8Array":
|
||||
case "Uint8Array":
|
||||
case "Uint8ClampedArray":
|
||||
case "Int16Array":
|
||||
case "Uint16Array":
|
||||
case "Int32Array":
|
||||
case "Uint32Array":
|
||||
case "Float32Array":
|
||||
case "Float64Array":
|
||||
case "BigInt64Array":
|
||||
case "BigUint64Array": {
|
||||
/** @type {import("./types.js").TypedArray} */
|
||||
const typedArray = thing;
|
||||
return `new ${type}([${typedArray.toString()}])`;
|
||||
}
|
||||
|
||||
case "ArrayBuffer": {
|
||||
const ui8 = new Uint8Array(thing);
|
||||
return `new Uint8Array([${ui8.toString()}]).buffer`;
|
||||
}
|
||||
|
||||
default:
|
||||
const obj = `{${Object.keys(thing)
|
||||
|
||||
14
.output/server/node_modules/devalue/src/utils.js
generated
vendored
14
.output/server/node_modules/devalue/src/utils.js
generated
vendored
@@ -97,3 +97,17 @@ export function stringify_string(str) {
|
||||
|
||||
return `"${last_pos === 0 ? str : result + str.slice(last_pos)}"`;
|
||||
}
|
||||
|
||||
/** @param {Record<string | symbol, any>} object */
|
||||
export function enumerable_symbols(object) {
|
||||
return Object.getOwnPropertySymbols(object).filter(
|
||||
(symbol) => Object.getOwnPropertyDescriptor(object, symbol).enumerable
|
||||
);
|
||||
}
|
||||
|
||||
const is_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;
|
||||
|
||||
/** @param {string} key */
|
||||
export function stringify_key(key) {
|
||||
return is_identifier.test(key) ? '.' + key : '[' + JSON.stringify(key) + ']';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user