[Flight] Serialize weird numbers (#26623)

DiffTrain build for [ab2385fa38](https://github.com/facebook/react/commit/ab2385fa388f3d4ebc0b1a9f5a747c82e4aa82ed)
This commit is contained in:
sophiebits
2023-04-14 16:33:48 +00:00
parent cda4f89f40
commit 6f02a016b0
9 changed files with 125 additions and 5 deletions
+1 -1
View File
@@ -1 +1 @@
d121c67004a2e6b0bb5d341843663ef213f64863
ab2385fa388f3d4ebc0b1a9f5a747c82e4aa82ed
@@ -558,6 +558,25 @@ function parseModelString(response, parentObject, key, value) {
}
}
case "I": {
// $Infinity
return Infinity;
}
case "-": {
// $-0 or $-Infinity
if (value[2] === "0") {
return -0;
} else {
return -Infinity;
}
}
case "N": {
// $NaN
return NaN;
}
case "u": {
// matches "$undefined"
// Special encoding for `undefined` which can't be serialized as JSON otherwise.
@@ -558,6 +558,25 @@ function parseModelString(response, parentObject, key, value) {
}
}
case "I": {
// $Infinity
return Infinity;
}
case "-": {
// $-0 or $-Infinity
if (value[2] === "0") {
return -0;
} else {
return -Infinity;
}
}
case "N": {
// $NaN
return NaN;
}
case "u": {
// matches "$undefined"
// Special encoding for `undefined` which can't be serialized as JSON otherwise.
@@ -285,6 +285,12 @@ function parseModelString(response, parentObject, key, value) {
default:
throw parentObject.reason;
}
case "I":
return Infinity;
case "-":
return "0" === value[2] ? -0 : -Infinity;
case "N":
return NaN;
case "u":
return;
case "n":
@@ -285,6 +285,12 @@ function parseModelString(response, parentObject, key, value) {
default:
throw parentObject.reason;
}
case "I":
return Infinity;
case "-":
return "0" === value[2] ? -0 : -Infinity;
case "N":
return NaN;
case "u":
return;
case "n":
@@ -1442,6 +1442,24 @@ function serializeProviderReference(name) {
return "$P" + name;
}
function serializeNumber(number) {
if (Number.isFinite(number)) {
if (number === 0 && 1 / number === -Infinity) {
return "$-0";
} else {
return number;
}
} else {
if (number === Infinity) {
return "$Infinity";
} else if (number === -Infinity) {
return "$-Infinity";
} else {
return "$NaN";
}
}
}
function serializeUndefined() {
return "$undefined";
}
@@ -1733,10 +1751,14 @@ function resolveModelToJSON(request, parent, key, value) {
return escapeStringValue(value);
}
if (typeof value === "boolean" || typeof value === "number") {
if (typeof value === "boolean") {
return value;
}
if (typeof value === "number") {
return serializeNumber(value);
}
if (typeof value === "undefined") {
return serializeUndefined();
}
@@ -1442,6 +1442,24 @@ function serializeProviderReference(name) {
return "$P" + name;
}
function serializeNumber(number) {
if (Number.isFinite(number)) {
if (number === 0 && 1 / number === -Infinity) {
return "$-0";
} else {
return number;
}
} else {
if (number === Infinity) {
return "$Infinity";
} else if (number === -Infinity) {
return "$-Infinity";
} else {
return "$NaN";
}
}
}
function serializeUndefined() {
return "$undefined";
}
@@ -1733,10 +1751,14 @@ function resolveModelToJSON(request, parent, key, value) {
return escapeStringValue(value);
}
if (typeof value === "boolean" || typeof value === "number") {
if (typeof value === "boolean") {
return value;
}
if (typeof value === "number") {
return serializeNumber(value);
}
if (typeof value === "undefined") {
return serializeUndefined();
}
@@ -753,7 +753,20 @@ function resolveModelToJSON(request, parent, key, value) {
}
if ("string" === typeof value)
return (request = "$" === value[0] ? "$" + value : value), request;
if ("boolean" === typeof value || "number" === typeof value) return value;
if ("boolean" === typeof value) return value;
if ("number" === typeof value)
return (
(request = value),
Number.isFinite(request)
? 0 === request && -Infinity === 1 / request
? "$-0"
: request
: Infinity === request
? "$Infinity"
: -Infinity === request
? "$-Infinity"
: "$NaN"
);
if ("undefined" === typeof value) return "$undefined";
if ("function" === typeof value) {
if (value instanceof JSResourceReferenceImpl)
@@ -753,7 +753,20 @@ function resolveModelToJSON(request, parent, key, value) {
}
if ("string" === typeof value)
return (request = "$" === value[0] ? "$" + value : value), request;
if ("boolean" === typeof value || "number" === typeof value) return value;
if ("boolean" === typeof value) return value;
if ("number" === typeof value)
return (
(request = value),
Number.isFinite(request)
? 0 === request && -Infinity === 1 / request
? "$-0"
: request
: Infinity === request
? "$Infinity"
: -Infinity === request
? "$-Infinity"
: "$NaN"
);
if ("undefined" === typeof value) return "$undefined";
if ("function" === typeof value) {
if (value instanceof JSResourceReferenceImpl)