UNPKG

@gentrace/core

Version:
1 lines 15.9 kB
{"version":3,"file":"utils.mjs","sources":["utils.js"],"sourcesContent":["var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { parse } from \"acorn\";\nimport axios from \"axios\";\nexport function sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\nfunction getSingleParamName(param, index) {\n if (param.type === \"Identifier\") {\n return param.name;\n }\n else if (param.type === \"AssignmentPattern\" &&\n param.left.type === \"Identifier\") {\n return param.left.name;\n }\n else {\n // If the parameter is a destructured object/array, we can't get the name\n return `param${index}`;\n }\n}\nfunction getParamNamesAnonymousFunction(func) {\n let inputs = [];\n try {\n const result = parse(`(${func.toString()})`, {\n ecmaVersion: 2020,\n });\n const firstElement = result.body[0];\n if (!firstElement) {\n return inputs;\n }\n if (firstElement.type === \"ExpressionStatement\") {\n const expression = firstElement.expression;\n if (expression.type === \"FunctionExpression\") {\n inputs = expression.params.map(getSingleParamName);\n }\n }\n }\n catch (e) {\n // Do nothing\n }\n return inputs;\n}\nexport function getParamNames(func) {\n let inputs = [];\n try {\n const result = parse(func.toString(), {\n ecmaVersion: 2020,\n });\n const functionNode = result.body[0];\n if (!functionNode) {\n return inputs;\n }\n if (functionNode.type === \"FunctionDeclaration\") {\n inputs = functionNode.params.map(getSingleParamName);\n }\n else if (functionNode.type === \"ExpressionStatement\") {\n const expression = functionNode.expression;\n if (expression.type === \"ArrowFunctionExpression\") {\n inputs = expression.params.map(getSingleParamName);\n }\n }\n }\n catch (e) {\n // There's a chance that the passed function is a regular anonymous function (which is un-parseable by acorn)\n return getParamNamesAnonymousFunction(func);\n }\n return inputs;\n}\nexport function zip(firstCollection, lastCollection) {\n const length = Math.min(firstCollection.length, lastCollection.length);\n const zipped = [];\n for (let index = 0; index < length; index++) {\n zipped.push([firstCollection[index], lastCollection[index]]);\n }\n return zipped;\n}\nlet TEST_COUNTER = 0;\nexport function getTestCounter() {\n return TEST_COUNTER;\n}\nexport function incrementTestCounter() {\n TEST_COUNTER += 1;\n return TEST_COUNTER;\n}\nexport function decrementTestCounter() {\n TEST_COUNTER -= 1;\n return TEST_COUNTER;\n}\nexport function getProcessEnv(name) {\n if (typeof process === \"undefined\") {\n return null;\n }\n return process.env[name];\n}\nexport function safeJsonParse(jsonString) {\n try {\n return JSON.parse(jsonString !== null && jsonString !== void 0 ? jsonString : \"\");\n }\n catch (error) {\n return null;\n }\n}\nexport function getContextTestCaseFilter(contextOrCaseFilter, caseFilterOrUndefined) {\n let context, caseFilter;\n // Determine the overload being used based on the types of arguments\n if (typeof contextOrCaseFilter === \"function\") {\n caseFilter = contextOrCaseFilter;\n context = undefined;\n }\n else {\n context = contextOrCaseFilter;\n caseFilter = caseFilterOrUndefined;\n }\n return { context, caseFilter };\n}\nexport function setErrorInterceptor() {\n axios.interceptors.response.use((response) => response, (error) => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n // Guard against recursive error handling\n if (error.isInterceptorError) {\n return Promise.reject(error);\n }\n const simplified = {\n status: (_a = error.response) === null || _a === void 0 ? void 0 : _a.status,\n method: (_c = (_b = error.config) === null || _b === void 0 ? void 0 : _b.method) === null || _c === void 0 ? void 0 : _c.toUpperCase(),\n requestUrl: (_d = error.config) === null || _d === void 0 ? void 0 : _d.url,\n requestData: (_e = error.config) === null || _e === void 0 ? void 0 : _e.data,\n responseData: (_f = error.response) === null || _f === void 0 ? void 0 : _f.data,\n message: (_h = (_g = error.response) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.message,\n };\n const newError = new Error((simplified.message || \"Request failed\") +\n \": \" +\n JSON.stringify(simplified, null, 2));\n newError.details = JSON.stringify(simplified, null, 2);\n newError.isInterceptorError = true; // Mark as already processed\n return Promise.reject(newError);\n });\n}\n/**\n * Constructs step runs for a given test case and pipeline run.\n *\n * @param {TestCase | TestCaseV2 | LocalTestData} testCase - The test case object.\n * @param {PipelineRun} pipelineRun - The pipeline run object.\n * @returns {TestRun} The constructed test run object.\n */\nexport function constructStepRuns(testCase, pipelineRun) {\n var _a;\n let mergedMetadata = {};\n const updatedStepRuns = pipelineRun.stepRuns.map((stepRun) => {\n var _a, _b;\n let _c = (_a = pipelineRun.context) !== null && _a !== void 0 ? _a : {}, { metadata: thisContextMetadata, previousRunId: _prPreviousRunId } = _c, restThisContext = __rest(_c, [\"metadata\", \"previousRunId\"]);\n let _d = (_b = stepRun.context) !== null && _b !== void 0 ? _b : {}, { metadata: stepRunContextMetadata, previousRunId: _srPreviousRunId } = _d, restStepRunContext = __rest(_d, [\"metadata\", \"previousRunId\"]);\n // Merge metadata\n mergedMetadata = Object.assign(Object.assign(Object.assign({}, mergedMetadata), thisContextMetadata), stepRunContextMetadata);\n return {\n modelParams: stepRun.modelParams,\n invocation: stepRun.invocation,\n inputs: stepRun.inputs,\n outputs: stepRun.outputs,\n providerName: stepRun.providerName,\n elapsedTime: stepRun.elapsedTime,\n startTime: stepRun.startTime,\n endTime: stepRun.endTime,\n context: Object.assign(Object.assign({}, restThisContext), restStepRunContext),\n error: stepRun.error,\n };\n });\n const testRun = {\n caseId: (_a = testCase.id) !== null && _a !== void 0 ? _a : undefined,\n metadata: mergedMetadata,\n stepRuns: updatedStepRuns,\n evaluations: pipelineRun.getLocalEvaluations(),\n error: pipelineRun.getError(),\n };\n if (testCase.name) {\n testRun.name = testCase.name;\n }\n if (testCase.inputs) {\n testRun.inputs = testCase.inputs;\n // testRun.expectedOutputs = testCase.expectedOutputs;\n }\n if (pipelineRun.getId()) {\n testRun.id = pipelineRun.getId();\n }\n return testRun;\n}\n/**\n * Type guard to check if the test case is either TestCase or TestCaseV2\n * @param testCase - The test case to check\n * @returns True if the test case is TestCase or TestCaseV2, false if it's LocalTestData\n */\nexport function isTestCaseOrTestCaseV2(testCase) {\n return (\"id\" in testCase && \"pipelineId\" in testCase && \"datasetId\" in testCase);\n}\n"],"names":["this","axios"],"mappings":"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"}