mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
[Flight] Serialize weird numbers (#26623)
DiffTrain build for [ab2385fa38](https://github.com/facebook/react/commit/ab2385fa388f3d4ebc0b1a9f5a747c82e4aa82ed)
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user