123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.serialize = serialize;
- /* eslint-disable */
- // @ts-nocheck
- var LIMIT_REPLACE_NODE = "[...]";
- var CIRCULAR_REPLACE_NODE = { result: "[Circular]" };
- var arr = [];
- var replacerStack = [];
- const encoder = new TextEncoder();
- function defaultOptions() {
- return {
- depthLimit: Number.MAX_SAFE_INTEGER,
- edgesLimit: Number.MAX_SAFE_INTEGER,
- };
- }
- function encodeString(str) {
- return encoder.encode(str);
- }
- // Regular stringify
- function serialize(obj, errorContext, replacer, spacer, options) {
- try {
- const str = JSON.stringify(obj, replacer, spacer);
- return encodeString(str);
- }
- catch (e) {
- // Fall back to more complex stringify if circular reference
- if (!e.message?.includes("Converting circular structure to JSON")) {
- console.warn(`[WARNING]: LangSmith received unserializable value.${errorContext ? `\nContext: ${errorContext}` : ""}`);
- return encodeString("[Unserializable]");
- }
- console.warn(`[WARNING]: LangSmith received circular JSON. This will decrease tracer performance. ${errorContext ? `\nContext: ${errorContext}` : ""}`);
- if (typeof options === "undefined") {
- options = defaultOptions();
- }
- decirc(obj, "", 0, [], undefined, 0, options);
- let res;
- try {
- if (replacerStack.length === 0) {
- res = JSON.stringify(obj, replacer, spacer);
- }
- else {
- res = JSON.stringify(obj, replaceGetterValues(replacer), spacer);
- }
- }
- catch (_) {
- return encodeString("[unable to serialize, circular reference is too complex to analyze]");
- }
- finally {
- while (arr.length !== 0) {
- const part = arr.pop();
- if (part.length === 4) {
- Object.defineProperty(part[0], part[1], part[3]);
- }
- else {
- part[0][part[1]] = part[2];
- }
- }
- }
- return encodeString(res);
- }
- }
- function setReplace(replace, val, k, parent) {
- var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k);
- if (propertyDescriptor.get !== undefined) {
- if (propertyDescriptor.configurable) {
- Object.defineProperty(parent, k, { value: replace });
- arr.push([parent, k, val, propertyDescriptor]);
- }
- else {
- replacerStack.push([val, k, replace]);
- }
- }
- else {
- parent[k] = replace;
- arr.push([parent, k, val]);
- }
- }
- function decirc(val, k, edgeIndex, stack, parent, depth, options) {
- depth += 1;
- var i;
- if (typeof val === "object" && val !== null) {
- for (i = 0; i < stack.length; i++) {
- if (stack[i] === val) {
- setReplace(CIRCULAR_REPLACE_NODE, val, k, parent);
- return;
- }
- }
- if (typeof options.depthLimit !== "undefined" &&
- depth > options.depthLimit) {
- setReplace(LIMIT_REPLACE_NODE, val, k, parent);
- return;
- }
- if (typeof options.edgesLimit !== "undefined" &&
- edgeIndex + 1 > options.edgesLimit) {
- setReplace(LIMIT_REPLACE_NODE, val, k, parent);
- return;
- }
- stack.push(val);
- // Optimize for Arrays. Big arrays could kill the performance otherwise!
- if (Array.isArray(val)) {
- for (i = 0; i < val.length; i++) {
- decirc(val[i], i, i, stack, val, depth, options);
- }
- }
- else {
- var keys = Object.keys(val);
- for (i = 0; i < keys.length; i++) {
- var key = keys[i];
- decirc(val[key], key, i, stack, val, depth, options);
- }
- }
- stack.pop();
- }
- }
- // Stable-stringify
- function compareFunction(a, b) {
- if (a < b) {
- return -1;
- }
- if (a > b) {
- return 1;
- }
- return 0;
- }
- function deterministicStringify(obj, replacer, spacer, options) {
- if (typeof options === "undefined") {
- options = defaultOptions();
- }
- var tmp = deterministicDecirc(obj, "", 0, [], undefined, 0, options) || obj;
- var res;
- try {
- if (replacerStack.length === 0) {
- res = JSON.stringify(tmp, replacer, spacer);
- }
- else {
- res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer);
- }
- }
- catch (_) {
- return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]");
- }
- finally {
- // Ensure that we restore the object as it was.
- while (arr.length !== 0) {
- var part = arr.pop();
- if (part.length === 4) {
- Object.defineProperty(part[0], part[1], part[3]);
- }
- else {
- part[0][part[1]] = part[2];
- }
- }
- }
- return res;
- }
- function deterministicDecirc(val, k, edgeIndex, stack, parent, depth, options) {
- depth += 1;
- var i;
- if (typeof val === "object" && val !== null) {
- for (i = 0; i < stack.length; i++) {
- if (stack[i] === val) {
- setReplace(CIRCULAR_REPLACE_NODE, val, k, parent);
- return;
- }
- }
- try {
- if (typeof val.toJSON === "function") {
- return;
- }
- }
- catch (_) {
- return;
- }
- if (typeof options.depthLimit !== "undefined" &&
- depth > options.depthLimit) {
- setReplace(LIMIT_REPLACE_NODE, val, k, parent);
- return;
- }
- if (typeof options.edgesLimit !== "undefined" &&
- edgeIndex + 1 > options.edgesLimit) {
- setReplace(LIMIT_REPLACE_NODE, val, k, parent);
- return;
- }
- stack.push(val);
- // Optimize for Arrays. Big arrays could kill the performance otherwise!
- if (Array.isArray(val)) {
- for (i = 0; i < val.length; i++) {
- deterministicDecirc(val[i], i, i, stack, val, depth, options);
- }
- }
- else {
- // Create a temporary object in the required way
- var tmp = {};
- var keys = Object.keys(val).sort(compareFunction);
- for (i = 0; i < keys.length; i++) {
- var key = keys[i];
- deterministicDecirc(val[key], key, i, stack, val, depth, options);
- tmp[key] = val[key];
- }
- if (typeof parent !== "undefined") {
- arr.push([parent, k, val]);
- parent[k] = tmp;
- }
- else {
- return tmp;
- }
- }
- stack.pop();
- }
- }
- // wraps replacer function to handle values we couldn't replace
- // and mark them as replaced value
- function replaceGetterValues(replacer) {
- replacer =
- typeof replacer !== "undefined"
- ? replacer
- : function (k, v) {
- return v;
- };
- return function (key, val) {
- if (replacerStack.length > 0) {
- for (var i = 0; i < replacerStack.length; i++) {
- var part = replacerStack[i];
- if (part[1] === key && part[0] === val) {
- val = part[2];
- replacerStack.splice(i, 1);
- break;
- }
- }
- }
- return replacer.call(this, key, val);
- };
- }
|