@genkit-ai/core
Version:
Genkit AI framework core libraries.
1 lines • 4.16 kB
Source Map (JSON)
{"version":3,"sources":["../src/utils.ts"],"sourcesContent":["/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Deletes any properties with `undefined` values in the provided object.\n * Modifies the provided object.\n */\nexport function deleteUndefinedProps(obj: any) {\n for (const prop in obj) {\n if (obj[prop] === undefined) {\n delete obj[prop];\n } else {\n if (typeof obj[prop] === 'object') {\n deleteUndefinedProps(obj[prop]);\n }\n }\n }\n}\n\n/**\n * Strips (non distructively) any properties with `undefined` values in the provided object and returns\n */\nexport function stripUndefinedProps<T>(input: T): T {\n if (\n input === undefined ||\n input === null ||\n Array.isArray(input) ||\n typeof input !== 'object'\n ) {\n return input;\n }\n const out = {} as T;\n for (const key in input) {\n if (input[key] !== undefined) {\n out[key] = stripUndefinedProps(input[key]);\n }\n }\n return out;\n}\n\n/**\n * Returns the current environment that the app code is running in.\n *\n * @hidden\n */\nexport function getCurrentEnv(): string {\n return process.env.GENKIT_ENV || 'prod';\n}\n\n/**\n * Whether the current environment is `dev`.\n */\nexport function isDevEnv(): boolean {\n return getCurrentEnv() === 'dev';\n}\n\n/**\n * Adds flow-specific prefix for OpenTelemetry span attributes.\n */\nexport function featureMetadataPrefix(name: string) {\n return `feature:${name}`;\n}\n\n/**\n * Deep-equality check for plain JSON-serializable values.\n * Handles objects, arrays, and primitives. Does not handle functions, dates,\n * or other non-JSON types.\n */\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (typeof a !== 'object') return false;\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false;\n return a.every((v, i) => deepEqual(v, b[i]));\n }\n\n const aObj = a as Record<string, unknown>;\n const bObj = b as Record<string, unknown>;\n const aKeys = Object.keys(aObj).sort();\n const bKeys = Object.keys(bObj).sort();\n if (aKeys.length !== bKeys.length) return false;\n return aKeys.every(\n (key, i) => key === bKeys[i] && deepEqual(aObj[key], bObj[key])\n );\n}\n"],"mappings":"AAoBO,SAAS,qBAAqB,KAAU;AAC7C,aAAW,QAAQ,KAAK;AACtB,QAAI,IAAI,IAAI,MAAM,QAAW;AAC3B,aAAO,IAAI,IAAI;AAAA,IACjB,OAAO;AACL,UAAI,OAAO,IAAI,IAAI,MAAM,UAAU;AACjC,6BAAqB,IAAI,IAAI,CAAC;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACF;AAKO,SAAS,oBAAuB,OAAa;AAClD,MACE,UAAU,UACV,UAAU,QACV,MAAM,QAAQ,KAAK,KACnB,OAAO,UAAU,UACjB;AACA,WAAO;AAAA,EACT;AACA,QAAM,MAAM,CAAC;AACb,aAAW,OAAO,OAAO;AACvB,QAAI,MAAM,GAAG,MAAM,QAAW;AAC5B,UAAI,GAAG,IAAI,oBAAoB,MAAM,GAAG,CAAC;AAAA,IAC3C;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,gBAAwB;AACtC,SAAO,QAAQ,IAAI,cAAc;AACnC;AAKO,SAAS,WAAoB;AAClC,SAAO,cAAc,MAAM;AAC7B;AAKO,SAAS,sBAAsB,MAAc;AAClD,SAAO,WAAW,IAAI;AACxB;AAOO,SAAS,UAAU,GAAY,GAAqB;AACzD,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,KAAK,QAAQ,KAAK,KAAM,QAAO,MAAM;AACzC,MAAI,OAAO,MAAM,OAAO,EAAG,QAAO;AAClC,MAAI,OAAO,MAAM,SAAU,QAAO;AAElC,MAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,QAAI,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,OAAQ,QAAO;AACvD,WAAO,EAAE,MAAM,CAAC,GAAG,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,EAC7C;AAEA,QAAM,OAAO;AACb,QAAM,OAAO;AACb,QAAM,QAAQ,OAAO,KAAK,IAAI,EAAE,KAAK;AACrC,QAAM,QAAQ,OAAO,KAAK,IAAI,EAAE,KAAK;AACrC,MAAI,MAAM,WAAW,MAAM,OAAQ,QAAO;AAC1C,SAAO,MAAM;AAAA,IACX,CAAC,KAAK,MAAM,QAAQ,MAAM,CAAC,KAAK,UAAU,KAAK,GAAG,GAAG,KAAK,GAAG,CAAC;AAAA,EAChE;AACF;","names":[]}