@jaypie/testkit 1.2.4 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,15 +6,16 @@ import * as errors from '@jaypie/errors';
6
6
  import { BadRequestError as BadRequestError$1, UnhandledError as UnhandledError$1 } from '@jaypie/errors';
7
7
  import * as kit$1 from '@jaypie/kit';
8
8
  import * as original$1 from '@jaypie/datadog';
9
- import * as original$2 from '@jaypie/express';
10
- import * as original$3 from '@jaypie/llm';
9
+ import * as original$2 from '@jaypie/dynamodb';
10
+ import * as original$3 from '@jaypie/express';
11
+ import * as original$4 from '@jaypie/llm';
11
12
  import { mongoose as mongoose$1 } from '@jaypie/mongoose';
12
13
  export { mongoose } from '@jaypie/mongoose';
13
14
  import { readFile } from 'fs/promises';
14
15
  import { dirname, join } from 'path';
15
16
  import { fileURLToPath } from 'url';
16
17
  import { TextractDocument } from 'amazon-textract-response-parser';
17
- import * as original$4 from '@jaypie/textract';
18
+ import * as original$5 from '@jaypie/textract';
18
19
 
19
20
  /* eslint-disable no-console */
20
21
  /**
@@ -593,31 +594,123 @@ var datadog = /*#__PURE__*/Object.freeze({
593
594
  submitMetricSet: submitMetricSet
594
595
  });
595
596
 
597
+ // Re-export constants (no need to mock, just pass through)
598
+ const APEX = original$2.APEX;
599
+ const ARCHIVED_SUFFIX = original$2.ARCHIVED_SUFFIX;
600
+ const DELETED_SUFFIX = original$2.DELETED_SUFFIX;
601
+ const INDEX_ALIAS = original$2.INDEX_ALIAS;
602
+ const INDEX_CLASS = original$2.INDEX_CLASS;
603
+ const INDEX_OU = original$2.INDEX_OU;
604
+ const INDEX_TYPE = original$2.INDEX_TYPE;
605
+ const INDEX_XID = original$2.INDEX_XID;
606
+ const SEPARATOR = original$2.SEPARATOR;
607
+ // Key builder functions - use createMockFunction with typed implementations
608
+ const buildIndexAlias = createMockFunction((ou, model, alias) => original$2.buildIndexAlias(ou, model, alias));
609
+ const buildIndexClass = createMockFunction((ou, model, recordClass) => original$2.buildIndexClass(ou, model, recordClass));
610
+ const buildIndexOu = createMockFunction((ou, model) => original$2.buildIndexOu(ou, model));
611
+ const buildIndexType = createMockFunction((ou, model, type) => original$2.buildIndexType(ou, model, type));
612
+ const buildIndexXid = createMockFunction((ou, model, xid) => original$2.buildIndexXid(ou, model, xid));
613
+ const calculateOu = createMockFunction((parent) => original$2.calculateOu(parent));
614
+ const indexEntity = createMockFunction((entity, suffix) => original$2.indexEntity(entity, suffix));
615
+ // Client functions
616
+ const initClient = createMockFunction(() => {
617
+ // No-op in mock
618
+ });
619
+ const getDocClient = createMockFunction(() => ({
620
+ send: createMockResolvedFunction({ Items: [] }),
621
+ }));
622
+ const getTableName = createMockFunction(() => "mock-table");
623
+ const isInitialized = createMockFunction(() => true);
624
+ const resetClient = createMockFunction(() => {
625
+ // No-op in mock
626
+ });
627
+ // Entity operations - service handler pattern (callable with object params)
628
+ const getEntity = createMockFunction(async () => null);
629
+ const putEntity = createMockFunction(async (params) => original$2.indexEntity(params.entity));
630
+ const updateEntity = createMockFunction(async (params) => ({
631
+ ...original$2.indexEntity(params.entity),
632
+ updatedAt: new Date().toISOString(),
633
+ }));
634
+ const deleteEntity = createMockFunction(async () => true);
635
+ const archiveEntity = createMockFunction(async () => true);
636
+ const destroyEntity = createMockFunction(async () => true);
637
+ // Query functions - service handler pattern (callable with object params)
638
+ const queryByOu = createMockFunction(async () => ({
639
+ items: [],
640
+ lastEvaluatedKey: undefined,
641
+ }));
642
+ const queryByAlias = createMockFunction(async () => null);
643
+ const queryByClass = createMockFunction(async () => ({
644
+ items: [],
645
+ lastEvaluatedKey: undefined,
646
+ }));
647
+ const queryByType = createMockFunction(async () => ({
648
+ items: [],
649
+ lastEvaluatedKey: undefined,
650
+ }));
651
+ const queryByXid = createMockFunction(async () => null);
652
+
653
+ var dynamodb = /*#__PURE__*/Object.freeze({
654
+ __proto__: null,
655
+ APEX: APEX,
656
+ ARCHIVED_SUFFIX: ARCHIVED_SUFFIX,
657
+ DELETED_SUFFIX: DELETED_SUFFIX,
658
+ INDEX_ALIAS: INDEX_ALIAS,
659
+ INDEX_CLASS: INDEX_CLASS,
660
+ INDEX_OU: INDEX_OU,
661
+ INDEX_TYPE: INDEX_TYPE,
662
+ INDEX_XID: INDEX_XID,
663
+ SEPARATOR: SEPARATOR,
664
+ archiveEntity: archiveEntity,
665
+ buildIndexAlias: buildIndexAlias,
666
+ buildIndexClass: buildIndexClass,
667
+ buildIndexOu: buildIndexOu,
668
+ buildIndexType: buildIndexType,
669
+ buildIndexXid: buildIndexXid,
670
+ calculateOu: calculateOu,
671
+ deleteEntity: deleteEntity,
672
+ destroyEntity: destroyEntity,
673
+ getDocClient: getDocClient,
674
+ getEntity: getEntity,
675
+ getTableName: getTableName,
676
+ indexEntity: indexEntity,
677
+ initClient: initClient,
678
+ isInitialized: isInitialized,
679
+ putEntity: putEntity,
680
+ queryByAlias: queryByAlias,
681
+ queryByClass: queryByClass,
682
+ queryByOu: queryByOu,
683
+ queryByType: queryByType,
684
+ queryByXid: queryByXid,
685
+ resetClient: resetClient,
686
+ updateEntity: updateEntity
687
+ });
688
+
596
689
  /* eslint-disable @typescript-eslint/no-unsafe-function-type */
597
690
  // Constants for mock values
598
691
  const TAG$1 = "EXPRESS";
599
692
  const HTTP = {
600
693
  CODE: { OK: 200, CREATED: 201, NO_CONTENT: 204, INTERNAL_ERROR: 500 },
601
694
  };
602
- const EXPRESS = original$2.EXPRESS;
695
+ const EXPRESS = original$3.EXPRESS;
603
696
  // Add Express route functions
604
- const badRequestRoute = createMockWrappedFunction(original$2.badRequestRoute, { error: `_MOCK_BAD_REQUEST_ROUTE_[${TAG$1}]` });
605
- const echoRoute = createMockWrappedFunction(original$2.echoRoute, (req) => req);
606
- const forbiddenRoute = createMockWrappedFunction(original$2.forbiddenRoute, { error: `_MOCK_FORBIDDEN_ROUTE_[${TAG$1}]` });
607
- const goneRoute = createMockWrappedFunction(original$2.goneRoute, {
697
+ const badRequestRoute = createMockWrappedFunction(original$3.badRequestRoute, { error: `_MOCK_BAD_REQUEST_ROUTE_[${TAG$1}]` });
698
+ const echoRoute = createMockWrappedFunction(original$3.echoRoute, (req) => req);
699
+ const forbiddenRoute = createMockWrappedFunction(original$3.forbiddenRoute, { error: `_MOCK_FORBIDDEN_ROUTE_[${TAG$1}]` });
700
+ const goneRoute = createMockWrappedFunction(original$3.goneRoute, {
608
701
  error: `_MOCK_GONE_ROUTE_[${TAG$1}]`,
609
702
  });
610
- const methodNotAllowedRoute = createMockWrappedFunction(original$2.methodNotAllowedRoute, { error: `_MOCK_METHOD_NOT_ALLOWED_ROUTE_[${TAG$1}]` });
611
- const noContentRoute = createMockWrappedFunction(original$2.noContentRoute, { status: 204 });
612
- const notFoundRoute = createMockWrappedFunction(original$2.notFoundRoute, {
703
+ const methodNotAllowedRoute = createMockWrappedFunction(original$3.methodNotAllowedRoute, { error: `_MOCK_METHOD_NOT_ALLOWED_ROUTE_[${TAG$1}]` });
704
+ const noContentRoute = createMockWrappedFunction(original$3.noContentRoute, { status: 204 });
705
+ const notFoundRoute = createMockWrappedFunction(original$3.notFoundRoute, {
613
706
  error: `_MOCK_NOT_FOUND_ROUTE_[${TAG$1}]`,
614
707
  });
615
- const notImplementedRoute = createMockWrappedFunction(original$2.notImplementedRoute, { error: `_MOCK_NOT_IMPLEMENTED_ROUTE_[${TAG$1}]` });
616
- const expressHttpCodeHandler = createMockWrappedFunction(original$2.expressHttpCodeHandler, (...args) => {
708
+ const notImplementedRoute = createMockWrappedFunction(original$3.notImplementedRoute, { error: `_MOCK_NOT_IMPLEMENTED_ROUTE_[${TAG$1}]` });
709
+ const expressHttpCodeHandler = createMockWrappedFunction(original$3.expressHttpCodeHandler, (...args) => {
617
710
  const [, res] = args;
618
711
  return res.status(200).send();
619
712
  });
620
- const cors = createMockWrappedFunction(original$2.cors);
713
+ const cors = createMockWrappedFunction(original$3.cors);
621
714
  const expressStreamHandler = createMockFunction((handlerOrProps, propsOrHandler) => {
622
715
  let handler;
623
716
  let props;
@@ -858,7 +951,7 @@ var lambda = /*#__PURE__*/Object.freeze({
858
951
  lambdaStreamHandler: lambdaStreamHandler
859
952
  });
860
953
 
861
- const LLM = original$3.LLM;
954
+ const LLM = original$4.LLM;
862
955
  const mockOperate = createMockResolvedFunction({
863
956
  content: "_MOCK_OUTPUT_TEXT",
864
957
  history: [
@@ -930,36 +1023,36 @@ const weather = createMockTool("weather", createMockResolvedFunction({
930
1023
  location: `_MOCK_WEATHER_LOCATION`,
931
1024
  forecast: [{ conditions: "good" }],
932
1025
  }));
933
- const Toolkit = createMockWrappedObject(original$3.Toolkit, {
1026
+ const Toolkit = createMockWrappedObject(original$4.Toolkit, {
934
1027
  isClass: true,
935
1028
  });
936
- const JaypieToolkit = createMockWrappedObject(original$3.JaypieToolkit, {
1029
+ const JaypieToolkit = createMockWrappedObject(original$4.JaypieToolkit, {
937
1030
  isClass: true,
938
1031
  });
939
- const LlmMessageRole = createMockWrappedObject(original$3.LlmMessageRole, {
1032
+ const LlmMessageRole = createMockWrappedObject(original$4.LlmMessageRole, {
940
1033
  isClass: true,
941
1034
  });
942
- const LlmMessageType = createMockWrappedObject(original$3.LlmMessageType, {
1035
+ const LlmMessageType = createMockWrappedObject(original$4.LlmMessageType, {
943
1036
  isClass: true,
944
1037
  });
945
- const LlmStreamChunkType = createMockWrappedObject(original$3.LlmStreamChunkType, {
1038
+ const LlmStreamChunkType = createMockWrappedObject(original$4.LlmStreamChunkType, {
946
1039
  isClass: true,
947
1040
  });
948
1041
  // Provider mocks
949
- const GeminiProvider = createMockWrappedObject(original$3.GeminiProvider, {
1042
+ const GeminiProvider = createMockWrappedObject(original$4.GeminiProvider, {
950
1043
  isClass: true,
951
1044
  });
952
- const OpenRouterProvider = createMockWrappedObject(original$3.OpenRouterProvider, {
1045
+ const OpenRouterProvider = createMockWrappedObject(original$4.OpenRouterProvider, {
953
1046
  isClass: true,
954
1047
  });
955
1048
  // Type guards and utilities - re-export from original (these are pure functions)
956
- const extractReasoning = original$3.extractReasoning;
957
- const isLlmOperateInput = original$3.isLlmOperateInput;
958
- const isLlmOperateInputContent = original$3.isLlmOperateInputContent;
959
- const isLlmOperateInputFile = original$3.isLlmOperateInputFile;
960
- const isLlmOperateInputImage = original$3.isLlmOperateInputImage;
1049
+ const extractReasoning = original$4.extractReasoning;
1050
+ const isLlmOperateInput = original$4.isLlmOperateInput;
1051
+ const isLlmOperateInputContent = original$4.isLlmOperateInputContent;
1052
+ const isLlmOperateInputFile = original$4.isLlmOperateInputFile;
1053
+ const isLlmOperateInputImage = original$4.isLlmOperateInputImage;
961
1054
  // Tool collections
962
- const toolkit = new original$3.JaypieToolkit([
1055
+ const toolkit = new original$4.JaypieToolkit([
963
1056
  random,
964
1057
  roll,
965
1058
  time,
@@ -1025,18 +1118,18 @@ beforeAll(async () => {
1025
1118
  /**
1026
1119
  * Mock for MarkdownPage class from @jaypie/textract
1027
1120
  */
1028
- const MarkdownPage = createMockWrappedObject(original$4.MarkdownPage, {
1121
+ const MarkdownPage = createMockWrappedObject(original$5.MarkdownPage, {
1029
1122
  class: true,
1030
1123
  fallback: () => {
1031
1124
  const mockDocument = new TextractDocument(JSON.parse(mockTextractContents));
1032
1125
  // Double type assertion needed to bridge incompatible types
1033
- return new original$4.MarkdownPage(mockDocument.pageNumber(1));
1126
+ return new original$5.MarkdownPage(mockDocument.pageNumber(1));
1034
1127
  },
1035
1128
  });
1036
1129
  /**
1037
1130
  * Mock for textractJsonToMarkdown function from @jaypie/textract
1038
1131
  */
1039
- const textractJsonToMarkdown = createMockWrappedFunction(original$4.textractJsonToMarkdown, `_MOCK_TEXTRACT_JSON_TO_MARKDOWN_[${TAG}]`);
1132
+ const textractJsonToMarkdown = createMockWrappedFunction(original$5.textractJsonToMarkdown, `_MOCK_TEXTRACT_JSON_TO_MARKDOWN_[${TAG}]`);
1040
1133
  // Export default for convenience
1041
1134
  var textract = {
1042
1135
  MarkdownPage,
@@ -1051,6 +1144,21 @@ var textract$1 = /*#__PURE__*/Object.freeze({
1051
1144
  });
1052
1145
 
1053
1146
  // Mock implementations for @jaypie/vocabulary
1147
+ // Status Type - re-export real values (no mocking needed)
1148
+ const STATUS_VALUES = [
1149
+ "canceled",
1150
+ "complete",
1151
+ "error",
1152
+ "pending",
1153
+ "processing",
1154
+ "queued",
1155
+ "sending",
1156
+ ];
1157
+ const StatusType = [...STATUS_VALUES];
1158
+ function isStatus(value) {
1159
+ return (typeof value === "string" &&
1160
+ STATUS_VALUES.includes(value));
1161
+ }
1054
1162
  /**
1055
1163
  * Mock implementation of lambdaServiceHandler
1056
1164
  * Mirrors the real implementation: wraps a service handler for Lambda with getMessages processing
@@ -1098,10 +1206,72 @@ const lambdaServiceHandler = createMockFunction((handlerOrConfig, options = {})
1098
1206
  validate: opts.validate,
1099
1207
  });
1100
1208
  });
1209
+ /**
1210
+ * Mock implementation of createLlmTool
1211
+ * Creates an LLM tool from a vocabulary service handler
1212
+ */
1213
+ const createLlmTool = createMockFunction((config) => {
1214
+ const { description, handler, message, name } = config;
1215
+ const toolName = name ?? handler.alias ?? "tool";
1216
+ const toolDescription = description ?? handler.description ?? "";
1217
+ const tool = {
1218
+ call: async (args) => {
1219
+ return handler(args);
1220
+ },
1221
+ description: toolDescription,
1222
+ name: toolName,
1223
+ parameters: {
1224
+ properties: {},
1225
+ required: [],
1226
+ type: "object",
1227
+ },
1228
+ type: "function",
1229
+ };
1230
+ if (message !== undefined) {
1231
+ tool.message = message;
1232
+ }
1233
+ return { tool };
1234
+ });
1235
+ /**
1236
+ * Mock implementation of inputToJsonSchema
1237
+ * Converts vocabulary input definitions to JSON Schema
1238
+ */
1239
+ const inputToJsonSchema = createMockFunction(() => ({
1240
+ properties: {},
1241
+ required: [],
1242
+ type: "object",
1243
+ }));
1244
+ /**
1245
+ * Mock implementation of registerMcpTool
1246
+ * Registers a vocabulary service handler as an MCP tool
1247
+ */
1248
+ const registerMcpTool = createMockFunction((config) => {
1249
+ const { description, handler, name, server } = config;
1250
+ const toolName = name ?? handler.alias ?? "tool";
1251
+ const toolDescription = description ?? handler.description ?? "";
1252
+ server.tool(toolName, toolDescription, {}, async (args) => {
1253
+ const result = await handler(args);
1254
+ return {
1255
+ content: [
1256
+ {
1257
+ text: result === undefined || result === null ? "" : String(result),
1258
+ type: "text",
1259
+ },
1260
+ ],
1261
+ };
1262
+ });
1263
+ return { name: toolName };
1264
+ });
1101
1265
 
1102
1266
  var vocabulary = /*#__PURE__*/Object.freeze({
1103
1267
  __proto__: null,
1104
- lambdaServiceHandler: lambdaServiceHandler
1268
+ STATUS_VALUES: STATUS_VALUES,
1269
+ StatusType: StatusType,
1270
+ createLlmTool: createLlmTool,
1271
+ inputToJsonSchema: inputToJsonSchema,
1272
+ isStatus: isStatus,
1273
+ lambdaServiceHandler: lambdaServiceHandler,
1274
+ registerMcpTool: registerMcpTool
1105
1275
  });
1106
1276
 
1107
1277
  // Import all mocks
@@ -1113,15 +1283,19 @@ const mock = {
1113
1283
  ...core,
1114
1284
  // Datadog module
1115
1285
  ...datadog,
1286
+ // DynamoDB module
1287
+ ...dynamodb,
1116
1288
  // Express module
1117
1289
  ...express,
1290
+ // Kit module
1118
1291
  ...kit,
1119
1292
  // Lambda module
1120
1293
  ...lambda,
1121
1294
  // LLM module
1122
1295
  ...llm,
1296
+ // Logger module
1123
1297
  ...logger,
1124
- // Mongoose module (now empty)
1298
+ // Mongoose module
1125
1299
  ...mongoose,
1126
1300
  // Textract module
1127
1301
  ...textract$1,
@@ -1129,5 +1303,5 @@ const mock = {
1129
1303
  ...vocabulary,
1130
1304
  };
1131
1305
 
1132
- export { BadGatewayError, BadRequestError, ConfigurationError, CorsError, DATADOG, EXPRESS, ForbiddenError, GatewayTimeoutError, GeminiProvider, GoneError, HTTP$1 as HTTP, IllogicalError, InternalError, JAYPIE, JaypieError, JaypieStream, JaypieToolkit, LLM, Llm, LlmMessageRole, LlmMessageType, LlmStreamChunkType, MarkdownPage, MethodNotAllowedError, MultiError, NotFoundError, NotImplementedError, OpenRouterProvider, PROJECT, ProjectError, ProjectMultiError, RejectedError, TeapotError, TooManyRequestsError, Toolkit, UnauthorizedError, UnavailableError, UnhandledError, UnreachableCodeError, badRequestRoute, cloneDeep, connect, connectFromSecretEnv, cors, createExpressStream, createJaypieStream, createLambdaStream, createLogger, mock as default, disconnect, echoRoute, envBoolean, envsKey, errorFromStatusCode, expressHandler, expressHttpCodeHandler, expressStreamHandler, extractReasoning, forbiddenRoute, force, formatError, formatSSE, getEnvSecret, getHeaderFrom, getMessages, getObjectKeyCaseInsensitive, getS3FileBuffer, getSecret, getSingletonMessage, getTextractJob, goneRoute, hasDatadogEnv, isClass, isJaypieError, isLlmOperateInput, isLlmOperateInputContent, isLlmOperateInputFile, isLlmOperateInputImage, isLocalEnv, isNodeTestEnv, isProductionEnv, jaypieErrorFromStatus, jaypieHandler, lambdaHandler, lambdaServiceHandler, lambdaStreamHandler, loadEnvSecrets, methodNotAllowedRoute, noContentRoute, notFoundRoute, notImplementedRoute, placeholders, resolveValue, safeParseFloat, sendBatchMessages, sendMessage, sendTextractJob, sleep, streamToSSE, submitDistribution, submitMetric, submitMetricSet, textractJsonToMarkdown, toolkit, tools, uuid };
1306
+ export { APEX, ARCHIVED_SUFFIX, BadGatewayError, BadRequestError, ConfigurationError, CorsError, DATADOG, DELETED_SUFFIX, EXPRESS, ForbiddenError, GatewayTimeoutError, GeminiProvider, GoneError, HTTP$1 as HTTP, INDEX_ALIAS, INDEX_CLASS, INDEX_OU, INDEX_TYPE, INDEX_XID, IllogicalError, InternalError, JAYPIE, JaypieError, JaypieStream, JaypieToolkit, LLM, Llm, LlmMessageRole, LlmMessageType, LlmStreamChunkType, MarkdownPage, MethodNotAllowedError, MultiError, NotFoundError, NotImplementedError, OpenRouterProvider, PROJECT, ProjectError, ProjectMultiError, RejectedError, SEPARATOR, STATUS_VALUES, StatusType, TeapotError, TooManyRequestsError, Toolkit, UnauthorizedError, UnavailableError, UnhandledError, UnreachableCodeError, archiveEntity, badRequestRoute, buildIndexAlias, buildIndexClass, buildIndexOu, buildIndexType, buildIndexXid, calculateOu, cloneDeep, connect, connectFromSecretEnv, cors, createExpressStream, createJaypieStream, createLambdaStream, createLlmTool, createLogger, mock as default, deleteEntity, destroyEntity, disconnect, echoRoute, envBoolean, envsKey, errorFromStatusCode, expressHandler, expressHttpCodeHandler, expressStreamHandler, extractReasoning, forbiddenRoute, force, formatError, formatSSE, getDocClient, getEntity, getEnvSecret, getHeaderFrom, getMessages, getObjectKeyCaseInsensitive, getS3FileBuffer, getSecret, getSingletonMessage, getTableName, getTextractJob, goneRoute, hasDatadogEnv, indexEntity, initClient, inputToJsonSchema, isClass, isInitialized, isJaypieError, isLlmOperateInput, isLlmOperateInputContent, isLlmOperateInputFile, isLlmOperateInputImage, isLocalEnv, isNodeTestEnv, isProductionEnv, isStatus, jaypieErrorFromStatus, jaypieHandler, lambdaHandler, lambdaServiceHandler, lambdaStreamHandler, loadEnvSecrets, methodNotAllowedRoute, noContentRoute, notFoundRoute, notImplementedRoute, placeholders, putEntity, queryByAlias, queryByClass, queryByOu, queryByType, queryByXid, registerMcpTool, resetClient, resolveValue, safeParseFloat, sendBatchMessages, sendMessage, sendTextractJob, sleep, streamToSSE, submitDistribution, submitMetric, submitMetricSet, textractJsonToMarkdown, toolkit, tools, updateEntity, uuid };
1133
1307
  //# sourceMappingURL=index.js.map