lib6/json.js
/**
* Copyright (c) "Neo4j"
* Neo4j Sweden AB [https://neo4j.com]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { isBrokenObject, getBrokenObjectReason } from './internal/object-util';
/**
* Custom version on JSON.stringify that can handle values that normally don't support serialization, such as BigInt.
* @private
* @param val A JavaScript value, usually an object or array, to be converted.
* @returns A JSON string representing the given value.
*/
export function stringify(val, opts) {
return JSON.stringify(val, (_, value) => {
if (isBrokenObject(value)) {
return {
__isBrokenObject__: true,
__reason__: getBrokenObjectReason(value)
};
}
if (typeof value === 'bigint') {
return `${value}n`;
}
if ((opts === null || opts === void 0 ? void 0 : opts.useCustomToString) === true &&
typeof value === 'object' &&
!Array.isArray(value) &&
typeof value.toString === 'function' &&
value.toString !== Object.prototype.toString) {
return value === null || value === void 0 ? void 0 : value.toString();
}
return value;
});
}