@jaypie/testkit 1.2.16 → 1.2.18

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.
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import * as jestExtendedMatchers from 'jest-extended';
2
2
  import { matchers as matchers$1 } from 'jest-json-schema';
3
3
  import { isDeepStrictEqual } from 'node:util';
4
4
  import { vi } from 'vitest';
5
- import { isJaypieError, UnauthorizedError, NotFoundError, InternalError, GatewayTimeoutError, ForbiddenError, ConfigurationError, BadRequestError, BadGatewayError, UnavailableError } from '@jaypie/errors';
5
+ import { isJaypieError, InternalError, GatewayTimeoutError, ForbiddenError, ConfigurationError, BadRequestError, BadGatewayError, NotFoundError, UnauthorizedError, UnavailableError } from '@jaypie/errors';
6
6
 
7
7
  const LOG = {
8
8
  LEVEL: {
@@ -82,3 +82,30 @@ export declare class JaypieStream {
82
82
  export declare const createJaypieStream: ((source: AsyncIterable<unknown>) => JaypieStream) & {
83
83
  mock: any;
84
84
  };
85
+ export declare const sendToConnection: ((options: {
86
+ callbackUrl?: string;
87
+ connectionId: string;
88
+ data: unknown;
89
+ domainName?: string;
90
+ stage?: string;
91
+ }) => Promise<{
92
+ connectionValid: boolean;
93
+ success: boolean;
94
+ }>) & {
95
+ mock: any;
96
+ };
97
+ export declare const broadcastToConnections: ((options: {
98
+ callbackUrl?: string;
99
+ connectionIds: string[];
100
+ data: unknown;
101
+ domainName?: string;
102
+ stage?: string;
103
+ }) => Promise<{
104
+ staleConnections: string[];
105
+ successCount: number;
106
+ }>) & {
107
+ mock: any;
108
+ };
109
+ export declare const clearWebSocketClientCache: (() => void) & {
110
+ mock: any;
111
+ };
@@ -1,12 +1,12 @@
1
1
  import * as original from "@jaypie/dynamodb";
2
2
  import type { BaseQueryOptions, DynamoClientConfig, ExportResult, ParentReference, QueryParams, QueryResult, SeedOptions, SeedResult, StorableEntity } from "@jaypie/dynamodb";
3
- import type { IndexableModel } from "@jaypie/fabric";
3
+ import type { IndexableModel, IndexDefinition } from "@jaypie/fabric";
4
4
  export declare const APEX = "@";
5
5
  export declare const ARCHIVED_SUFFIX = "#archived";
6
- export declare const DEFAULT_INDEXES: import("@jaypie/fabric").IndexDefinition[];
6
+ export declare const DEFAULT_INDEXES: IndexDefinition[];
7
7
  export declare const DELETED_SUFFIX = "#deleted";
8
8
  export declare const INDEX_ALIAS = "indexAlias";
9
- export declare const INDEX_CLASS = "indexClass";
9
+ export declare const INDEX_CATEGORY = "indexCategory";
10
10
  export declare const INDEX_SCOPE = "indexScope";
11
11
  export declare const INDEX_TYPE = "indexType";
12
12
  export declare const INDEX_XID = "indexXid";
@@ -19,7 +19,7 @@ export declare const buildCompositeKey: ((entity: Record<string, unknown> & {
19
19
  export declare const buildIndexAlias: ((scope: string, model: string, alias: string) => string) & {
20
20
  mock: any;
21
21
  };
22
- export declare const buildIndexClass: ((scope: string, model: string, recordClass: string) => string) & {
22
+ export declare const buildIndexCategory: ((scope: string, model: string, category: string) => string) & {
23
23
  mock: any;
24
24
  };
25
25
  export declare const buildIndexScope: ((scope: string, model: string) => string) & {
@@ -106,14 +106,14 @@ export declare const queryByAlias: ((params: {
106
106
  }) => Promise<StorableEntity | null>) & {
107
107
  mock: any;
108
108
  };
109
- export declare const queryByClass: ((params: {
109
+ export declare const queryByCategory: ((params: {
110
110
  archived?: boolean;
111
111
  ascending?: boolean;
112
+ category: string;
112
113
  deleted?: boolean;
113
114
  limit?: number;
114
115
  model: string;
115
116
  scope: string;
116
- recordClass: string;
117
117
  startKey?: Record<string, unknown>;
118
118
  }) => Promise<QueryResult<StorableEntity>>) & {
119
119
  mock: any;
@@ -3,11 +3,11 @@
3
3
  import * as vitest from 'vitest';
4
4
  import * as errors from '@jaypie/errors';
5
5
  import * as kit from '@jaypie/kit';
6
- import * as _jaypie_fabric from '@jaypie/fabric';
7
- export { IndexableModel } from '@jaypie/fabric';
8
6
  import * as original from '@jaypie/dynamodb';
9
- import { ParentReference, StorableEntity, DynamoClientConfig, QueryResult, SeedOptions, SeedResult, ExportResult } from '@jaypie/dynamodb';
7
+ import { ParentReference, StorableEntity, ExportResult, DynamoClientConfig, QueryResult, SeedOptions, SeedResult } from '@jaypie/dynamodb';
10
8
  export { BaseQueryOptions, ExportResult, ParentReference, QueryParams, QueryResult, SeedOptions, SeedResult, StorableEntity } from '@jaypie/dynamodb';
9
+ import { IndexDefinition } from '@jaypie/fabric';
10
+ export { IndexableModel } from '@jaypie/fabric';
11
11
  import * as original$1 from '@jaypie/express';
12
12
  import * as original$2 from '@jaypie/llm';
13
13
  export { FORMAT, LEVEL, Logger, log } from '@jaypie/logger';
@@ -97,6 +97,33 @@ declare class JaypieStream {
97
97
  declare const createJaypieStream: ((source: AsyncIterable<unknown>) => JaypieStream) & {
98
98
  mock: any;
99
99
  };
100
+ declare const sendToConnection: ((options: {
101
+ callbackUrl?: string;
102
+ connectionId: string;
103
+ data: unknown;
104
+ domainName?: string;
105
+ stage?: string;
106
+ }) => Promise<{
107
+ connectionValid: boolean;
108
+ success: boolean;
109
+ }>) & {
110
+ mock: any;
111
+ };
112
+ declare const broadcastToConnections: ((options: {
113
+ callbackUrl?: string;
114
+ connectionIds: string[];
115
+ data: unknown;
116
+ domainName?: string;
117
+ stage?: string;
118
+ }) => Promise<{
119
+ staleConnections: string[];
120
+ successCount: number;
121
+ }>) & {
122
+ mock: any;
123
+ };
124
+ declare const clearWebSocketClientCache: (() => void) & {
125
+ mock: any;
126
+ };
100
127
 
101
128
  declare const JaypieError: typeof errors.JaypieError;
102
129
  declare const BadGatewayError: typeof errors.BadGatewayError;
@@ -334,10 +361,10 @@ declare const submitMetricSet: vitest.Mock<(...args: any[]) => any>;
334
361
 
335
362
  declare const APEX = "@";
336
363
  declare const ARCHIVED_SUFFIX = "#archived";
337
- declare const DEFAULT_INDEXES: _jaypie_fabric.IndexDefinition[];
364
+ declare const DEFAULT_INDEXES: IndexDefinition[];
338
365
  declare const DELETED_SUFFIX = "#deleted";
339
366
  declare const INDEX_ALIAS = "indexAlias";
340
- declare const INDEX_CLASS = "indexClass";
367
+ declare const INDEX_CATEGORY = "indexCategory";
341
368
  declare const INDEX_SCOPE = "indexScope";
342
369
  declare const INDEX_TYPE = "indexType";
343
370
  declare const INDEX_XID = "indexXid";
@@ -350,7 +377,7 @@ declare const buildCompositeKey: ((entity: Record<string, unknown> & {
350
377
  declare const buildIndexAlias: ((scope: string, model: string, alias: string) => string) & {
351
378
  mock: any;
352
379
  };
353
- declare const buildIndexClass: ((scope: string, model: string, recordClass: string) => string) & {
380
+ declare const buildIndexCategory: ((scope: string, model: string, category: string) => string) & {
354
381
  mock: any;
355
382
  };
356
383
  declare const buildIndexScope: ((scope: string, model: string) => string) & {
@@ -437,14 +464,14 @@ declare const queryByAlias: ((params: {
437
464
  }) => Promise<StorableEntity | null>) & {
438
465
  mock: any;
439
466
  };
440
- declare const queryByClass: ((params: {
467
+ declare const queryByCategory: ((params: {
441
468
  archived?: boolean;
442
469
  ascending?: boolean;
470
+ category: string;
443
471
  deleted?: boolean;
444
472
  limit?: number;
445
473
  model: string;
446
474
  scope: string;
447
- recordClass: string;
448
475
  startKey?: Record<string, unknown>;
449
476
  }) => Promise<QueryResult<StorableEntity>>) & {
450
477
  mock: any;
@@ -572,6 +599,31 @@ type StreamHandlerFunction = (event: unknown, responseStream: {
572
599
  declare const lambdaStreamHandler: ((handler: StreamHandlerFunction, props?: LambdaOptions) => StreamHandlerFunction) & {
573
600
  mock: any;
574
601
  };
602
+ type WebSocketHandlerFunction = (event: unknown, context: WebSocketContext, ...extra: unknown[]) => Promise<WebSocketResponse>;
603
+ interface WebSocketContext {
604
+ awsRequestId?: string;
605
+ body: string | null;
606
+ broadcast: (connectionIds: string[], data: unknown) => Promise<{
607
+ staleConnections: string[];
608
+ successCount: number;
609
+ }>;
610
+ connectionId: string;
611
+ domainName: string;
612
+ queryStringParameters: Record<string, string> | null;
613
+ routeKey: string;
614
+ send: (data: unknown) => Promise<{
615
+ connectionValid: boolean;
616
+ success: boolean;
617
+ }>;
618
+ stage: string;
619
+ }
620
+ interface WebSocketResponse {
621
+ body?: string;
622
+ statusCode: number;
623
+ }
624
+ declare const websocketHandler: ((handler: WebSocketHandlerFunction, props?: LambdaOptions) => (event: unknown, context?: unknown, ...args: unknown[]) => Promise<WebSocketResponse>) & {
625
+ mock: any;
626
+ };
575
627
 
576
628
  declare const LLM: typeof original$2.LLM;
577
629
  declare const Llm: vitest.Mock<(...args: any[]) => any> & {
@@ -676,5 +728,5 @@ declare const textractJsonToMarkdown: vitest.Mock<(...args: any[]) => any>;
676
728
 
677
729
  declare const mock: Record<string, any>;
678
730
 
679
- export { APEX, ARCHIVED_SUFFIX, BadGatewayError, BadRequestError, ConfigurationError, CorsError, DATADOG, DEFAULT_INDEXES, DELETED_SUFFIX, EXPRESS, ForbiddenError, GatewayTimeoutError, GeminiProvider, GoneError, HTTP, INDEX_ALIAS, INDEX_CLASS, INDEX_SCOPE, INDEX_TYPE, INDEX_XID, IllogicalError, InternalError, JAYPIE, JaypieError, JaypieStream, JaypieToolkit, LLM, LambdaRequest, LambdaResponseBuffered, LambdaResponseStreaming, Llm, LlmMessageRole, LlmMessageType, LlmStreamChunkType, MarkdownPage, MethodNotAllowedError, MultiError, NotFoundError, NotImplementedError, OpenRouterProvider, PROJECT, ProjectError, ProjectMultiError, RejectedError, SEPARATOR, TeapotError, TooManyRequestsError, Toolkit, UnauthorizedError, UnavailableError, UnhandledError, UnreachableCodeError, archiveEntity, badRequestRoute, buildCompositeKey, buildIndexAlias, buildIndexClass, buildIndexScope, buildIndexType, buildIndexXid, calculateScope, cloneDeep, connect, connectFromSecretEnv, cors, createExpressStream, createJaypieStream, createLambdaHandler, createLambdaStream, createLambdaStreamHandler, createLogger, mock as default, deleteEntity, destroyEntity, disconnect, echoRoute, envBoolean, envsKey, errorFromStatusCode, exportEntities, exportEntitiesToJson, expressHandler, expressHttpCodeHandler, expressStreamHandler, extractReasoning, forbiddenRoute, force, formatError, formatNljson, formatSse, formatStreamError, formatStreamErrorNljson, formatStreamErrorSse, getContentTypeForFormat, getCurrentInvoke, getCurrentInvokeUuid, getDocClient, getEntity, getEnvSecret, getHeaderFrom, getMessages, getObjectKeyCaseInsensitive, getS3FileBuffer, getSecret, getSingletonMessage, getTableName, getTextractJob, goneRoute, hasDatadogEnv, indexEntity, initClient, isClass, isInitialized, isJaypieError, isLlmOperateInput, isLlmOperateInputContent, isLlmOperateInputFile, isLlmOperateInputImage, isLocalEnv, isNodeTestEnv, isProductionEnv, jaypieErrorFromStatus, jaypieHandler, lambdaHandler, lambdaStreamHandler, loadEnvSecrets, methodNotAllowedRoute, noContentRoute, notFoundRoute, notImplementedRoute, placeholders, putEntity, query, queryByAlias, queryByClass, queryByScope, queryByType, queryByXid, resetClient, resolveValue, safeParseFloat, seedEntities, seedEntityIfNotExists, sendBatchMessages, sendMessage, sendTextractJob, sleep, streamToSse, submitDistribution, submitMetric, submitMetricSet, textractJsonToMarkdown, toolkit, tools, updateEntity, uuid };
680
- export type { ExpressHandlerFunction, ExpressHandlerOptions, ExpressStreamHandlerFunction, ExpressStreamHandlerOptions, LambdaOptions };
731
+ export { APEX, ARCHIVED_SUFFIX, BadGatewayError, BadRequestError, ConfigurationError, CorsError, DATADOG, DEFAULT_INDEXES, DELETED_SUFFIX, EXPRESS, ForbiddenError, GatewayTimeoutError, GeminiProvider, GoneError, HTTP, INDEX_ALIAS, INDEX_CATEGORY, INDEX_SCOPE, INDEX_TYPE, INDEX_XID, IllogicalError, InternalError, JAYPIE, JaypieError, JaypieStream, JaypieToolkit, LLM, LambdaRequest, LambdaResponseBuffered, LambdaResponseStreaming, Llm, LlmMessageRole, LlmMessageType, LlmStreamChunkType, MarkdownPage, MethodNotAllowedError, MultiError, NotFoundError, NotImplementedError, OpenRouterProvider, PROJECT, ProjectError, ProjectMultiError, RejectedError, SEPARATOR, TeapotError, TooManyRequestsError, Toolkit, UnauthorizedError, UnavailableError, UnhandledError, UnreachableCodeError, archiveEntity, badRequestRoute, broadcastToConnections, buildCompositeKey, buildIndexAlias, buildIndexCategory, buildIndexScope, buildIndexType, buildIndexXid, calculateScope, clearWebSocketClientCache, cloneDeep, connect, connectFromSecretEnv, cors, createExpressStream, createJaypieStream, createLambdaHandler, createLambdaStream, createLambdaStreamHandler, createLogger, mock as default, deleteEntity, destroyEntity, disconnect, echoRoute, envBoolean, envsKey, errorFromStatusCode, exportEntities, exportEntitiesToJson, expressHandler, expressHttpCodeHandler, expressStreamHandler, extractReasoning, forbiddenRoute, force, formatError, formatNljson, formatSse, formatStreamError, formatStreamErrorNljson, formatStreamErrorSse, getContentTypeForFormat, getCurrentInvoke, getCurrentInvokeUuid, getDocClient, getEntity, getEnvSecret, getHeaderFrom, getMessages, getObjectKeyCaseInsensitive, getS3FileBuffer, getSecret, getSingletonMessage, getTableName, getTextractJob, goneRoute, hasDatadogEnv, indexEntity, initClient, isClass, isInitialized, isJaypieError, isLlmOperateInput, isLlmOperateInputContent, isLlmOperateInputFile, isLlmOperateInputImage, isLocalEnv, isNodeTestEnv, isProductionEnv, jaypieErrorFromStatus, jaypieHandler, lambdaHandler, lambdaStreamHandler, loadEnvSecrets, methodNotAllowedRoute, noContentRoute, notFoundRoute, notImplementedRoute, placeholders, putEntity, query, queryByAlias, queryByCategory, queryByScope, queryByType, queryByXid, resetClient, resolveValue, safeParseFloat, seedEntities, seedEntityIfNotExists, sendBatchMessages, sendMessage, sendTextractJob, sendToConnection, sleep, streamToSse, submitDistribution, submitMetric, submitMetricSet, textractJsonToMarkdown, toolkit, tools, updateEntity, uuid, websocketHandler };
732
+ export type { ExpressHandlerFunction, ExpressHandlerOptions, ExpressStreamHandlerFunction, ExpressStreamHandlerOptions, LambdaOptions, WebSocketContext, WebSocketResponse };
@@ -302,10 +302,19 @@ class JaypieStream {
302
302
  }
303
303
  }
304
304
  const createJaypieStream = createMockFunction((source) => new JaypieStream(source));
305
+ // WebSocket utilities
306
+ const sendToConnection = createMockFunction(async () => ({ connectionValid: true, success: true }));
307
+ const broadcastToConnections = createMockFunction(async (options) => ({
308
+ staleConnections: [],
309
+ successCount: options?.connectionIds?.length ?? 0,
310
+ }));
311
+ const clearWebSocketClientCache = createMockFunction(() => { });
305
312
 
306
313
  var aws = /*#__PURE__*/Object.freeze({
307
314
  __proto__: null,
308
315
  JaypieStream: JaypieStream,
316
+ broadcastToConnections: broadcastToConnections,
317
+ clearWebSocketClientCache: clearWebSocketClientCache,
309
318
  createExpressStream: createExpressStream,
310
319
  createJaypieStream: createJaypieStream,
311
320
  createLambdaStream: createLambdaStream,
@@ -325,6 +334,7 @@ var aws = /*#__PURE__*/Object.freeze({
325
334
  sendBatchMessages: sendBatchMessages,
326
335
  sendMessage: sendMessage,
327
336
  sendTextractJob: sendTextractJob,
337
+ sendToConnection: sendToConnection,
328
338
  streamToSse: streamToSse
329
339
  });
330
340
 
@@ -620,7 +630,7 @@ const ARCHIVED_SUFFIX = original$2.ARCHIVED_SUFFIX;
620
630
  const DEFAULT_INDEXES = original$2.DEFAULT_INDEXES;
621
631
  const DELETED_SUFFIX = original$2.DELETED_SUFFIX;
622
632
  const INDEX_ALIAS = original$2.INDEX_ALIAS;
623
- const INDEX_CLASS = original$2.INDEX_CLASS;
633
+ const INDEX_CATEGORY = original$2.INDEX_CATEGORY;
624
634
  const INDEX_SCOPE = original$2.INDEX_SCOPE;
625
635
  const INDEX_TYPE = original$2.INDEX_TYPE;
626
636
  const INDEX_XID = original$2.INDEX_XID;
@@ -628,7 +638,7 @@ const SEPARATOR = original$2.SEPARATOR;
628
638
  // Key builder functions - use createMockFunction with typed implementations
629
639
  const buildCompositeKey = createMockFunction((entity, fields, suffix) => original$2.buildCompositeKey(entity, fields, suffix));
630
640
  const buildIndexAlias = createMockFunction((scope, model, alias) => original$2.buildIndexAlias(scope, model, alias));
631
- const buildIndexClass = createMockFunction((scope, model, recordClass) => original$2.buildIndexClass(scope, model, recordClass));
641
+ const buildIndexCategory = createMockFunction((scope, model, category) => original$2.buildIndexCategory(scope, model, category));
632
642
  const buildIndexScope = createMockFunction((scope, model) => original$2.buildIndexScope(scope, model));
633
643
  const buildIndexType = createMockFunction((scope, model, type) => original$2.buildIndexType(scope, model, type));
634
644
  const buildIndexXid = createMockFunction((scope, model, xid) => original$2.buildIndexXid(scope, model, xid));
@@ -662,7 +672,7 @@ const queryByScope = createMockFunction(async () => ({
662
672
  lastEvaluatedKey: undefined,
663
673
  }));
664
674
  const queryByAlias = createMockFunction(async () => null);
665
- const queryByClass = createMockFunction(async () => ({
675
+ const queryByCategory = createMockFunction(async () => ({
666
676
  items: [],
667
677
  lastEvaluatedKey: undefined,
668
678
  }));
@@ -696,7 +706,7 @@ var dynamodb = /*#__PURE__*/Object.freeze({
696
706
  DEFAULT_INDEXES: DEFAULT_INDEXES,
697
707
  DELETED_SUFFIX: DELETED_SUFFIX,
698
708
  INDEX_ALIAS: INDEX_ALIAS,
699
- INDEX_CLASS: INDEX_CLASS,
709
+ INDEX_CATEGORY: INDEX_CATEGORY,
700
710
  INDEX_SCOPE: INDEX_SCOPE,
701
711
  INDEX_TYPE: INDEX_TYPE,
702
712
  INDEX_XID: INDEX_XID,
@@ -704,7 +714,7 @@ var dynamodb = /*#__PURE__*/Object.freeze({
704
714
  archiveEntity: archiveEntity,
705
715
  buildCompositeKey: buildCompositeKey,
706
716
  buildIndexAlias: buildIndexAlias,
707
- buildIndexClass: buildIndexClass,
717
+ buildIndexCategory: buildIndexCategory,
708
718
  buildIndexScope: buildIndexScope,
709
719
  buildIndexType: buildIndexType,
710
720
  buildIndexXid: buildIndexXid,
@@ -722,7 +732,7 @@ var dynamodb = /*#__PURE__*/Object.freeze({
722
732
  putEntity: putEntity,
723
733
  query: query,
724
734
  queryByAlias: queryByAlias,
725
- queryByClass: queryByClass,
735
+ queryByCategory: queryByCategory,
726
736
  queryByScope: queryByScope,
727
737
  queryByType: queryByType,
728
738
  queryByXid: queryByXid,
@@ -1005,11 +1015,36 @@ const lambdaStreamHandler = createMockFunction((handler, props = {}) => {
1005
1015
  }
1006
1016
  };
1007
1017
  });
1018
+ // Mock implementation of websocketHandler
1019
+ const websocketHandler = createMockFunction((handler, props = {}) => {
1020
+ // If handler is an object and options is a function, swap them
1021
+ if (typeof handler === "object" && typeof props === "function") {
1022
+ const temp = handler;
1023
+ handler = props;
1024
+ props = temp;
1025
+ }
1026
+ return async (event, context = {}, ...extra) => {
1027
+ // Create a mock WebSocket context
1028
+ const wsContext = {
1029
+ awsRequestId: context?.awsRequestId,
1030
+ body: event?.body ?? null,
1031
+ broadcast: async () => ({ staleConnections: [], successCount: 0 }),
1032
+ connectionId: "mock-connection-id",
1033
+ domainName: "ws.example.com",
1034
+ queryStringParameters: event?.queryStringParameters ?? null,
1035
+ routeKey: event?.requestContext?.routeKey ?? "$default",
1036
+ send: async () => ({ connectionValid: true, success: true }),
1037
+ stage: "production",
1038
+ };
1039
+ return handler(event, wsContext, ...extra);
1040
+ };
1041
+ });
1008
1042
 
1009
1043
  var lambda = /*#__PURE__*/Object.freeze({
1010
1044
  __proto__: null,
1011
1045
  lambdaHandler: lambdaHandler,
1012
- lambdaStreamHandler: lambdaStreamHandler
1046
+ lambdaStreamHandler: lambdaStreamHandler,
1047
+ websocketHandler: websocketHandler
1013
1048
  });
1014
1049
 
1015
1050
  const LLM = original$4.LLM;
@@ -1233,5 +1268,5 @@ const mock = {
1233
1268
  ...textract$1,
1234
1269
  };
1235
1270
 
1236
- export { APEX, ARCHIVED_SUFFIX, BadGatewayError, BadRequestError, ConfigurationError, CorsError, DATADOG, DEFAULT_INDEXES, DELETED_SUFFIX, EXPRESS, ForbiddenError, GatewayTimeoutError, GeminiProvider, GoneError, HTTP$1 as HTTP, INDEX_ALIAS, INDEX_CLASS, INDEX_SCOPE, INDEX_TYPE, INDEX_XID, IllogicalError, InternalError, JAYPIE, JaypieError, JaypieStream, JaypieToolkit, LLM, LambdaRequest, LambdaResponseBuffered, LambdaResponseStreaming, Llm, LlmMessageRole, LlmMessageType, LlmStreamChunkType, MarkdownPage, MethodNotAllowedError, MultiError, NotFoundError, NotImplementedError, OpenRouterProvider, PROJECT, ProjectError, ProjectMultiError, RejectedError, SEPARATOR, TeapotError, TooManyRequestsError, Toolkit, UnauthorizedError, UnavailableError, UnhandledError, UnreachableCodeError, archiveEntity, badRequestRoute, buildCompositeKey, buildIndexAlias, buildIndexClass, buildIndexScope, buildIndexType, buildIndexXid, calculateScope, cloneDeep, connect, connectFromSecretEnv, cors, createExpressStream, createJaypieStream, createLambdaHandler, createLambdaStream, createLambdaStreamHandler, createLogger, mock as default, deleteEntity, destroyEntity, disconnect, echoRoute, envBoolean, envsKey, errorFromStatusCode, exportEntities, exportEntitiesToJson, expressHandler, expressHttpCodeHandler, expressStreamHandler, extractReasoning, forbiddenRoute, force, formatError, formatNljson, formatSse, formatStreamError, formatStreamErrorNljson, formatStreamErrorSse, getContentTypeForFormat, getCurrentInvoke, getCurrentInvokeUuid, getDocClient, getEntity, getEnvSecret, getHeaderFrom, getMessages, getObjectKeyCaseInsensitive, getS3FileBuffer, getSecret, getSingletonMessage, getTableName, getTextractJob, goneRoute, hasDatadogEnv, indexEntity, initClient, isClass, isInitialized, isJaypieError, isLlmOperateInput, isLlmOperateInputContent, isLlmOperateInputFile, isLlmOperateInputImage, isLocalEnv, isNodeTestEnv, isProductionEnv, jaypieErrorFromStatus, jaypieHandler, lambdaHandler, lambdaStreamHandler, loadEnvSecrets, methodNotAllowedRoute, noContentRoute, notFoundRoute, notImplementedRoute, placeholders, putEntity, query, queryByAlias, queryByClass, queryByScope, queryByType, queryByXid, resetClient, resolveValue, safeParseFloat, seedEntities, seedEntityIfNotExists, sendBatchMessages, sendMessage, sendTextractJob, sleep, streamToSse, submitDistribution, submitMetric, submitMetricSet, textractJsonToMarkdown, toolkit, tools, updateEntity, uuid };
1271
+ export { APEX, ARCHIVED_SUFFIX, BadGatewayError, BadRequestError, ConfigurationError, CorsError, DATADOG, DEFAULT_INDEXES, DELETED_SUFFIX, EXPRESS, ForbiddenError, GatewayTimeoutError, GeminiProvider, GoneError, HTTP$1 as HTTP, INDEX_ALIAS, INDEX_CATEGORY, INDEX_SCOPE, INDEX_TYPE, INDEX_XID, IllogicalError, InternalError, JAYPIE, JaypieError, JaypieStream, JaypieToolkit, LLM, LambdaRequest, LambdaResponseBuffered, LambdaResponseStreaming, Llm, LlmMessageRole, LlmMessageType, LlmStreamChunkType, MarkdownPage, MethodNotAllowedError, MultiError, NotFoundError, NotImplementedError, OpenRouterProvider, PROJECT, ProjectError, ProjectMultiError, RejectedError, SEPARATOR, TeapotError, TooManyRequestsError, Toolkit, UnauthorizedError, UnavailableError, UnhandledError, UnreachableCodeError, archiveEntity, badRequestRoute, broadcastToConnections, buildCompositeKey, buildIndexAlias, buildIndexCategory, buildIndexScope, buildIndexType, buildIndexXid, calculateScope, clearWebSocketClientCache, cloneDeep, connect, connectFromSecretEnv, cors, createExpressStream, createJaypieStream, createLambdaHandler, createLambdaStream, createLambdaStreamHandler, createLogger, mock as default, deleteEntity, destroyEntity, disconnect, echoRoute, envBoolean, envsKey, errorFromStatusCode, exportEntities, exportEntitiesToJson, expressHandler, expressHttpCodeHandler, expressStreamHandler, extractReasoning, forbiddenRoute, force, formatError, formatNljson, formatSse, formatStreamError, formatStreamErrorNljson, formatStreamErrorSse, getContentTypeForFormat, getCurrentInvoke, getCurrentInvokeUuid, getDocClient, getEntity, getEnvSecret, getHeaderFrom, getMessages, getObjectKeyCaseInsensitive, getS3FileBuffer, getSecret, getSingletonMessage, getTableName, getTextractJob, goneRoute, hasDatadogEnv, indexEntity, initClient, isClass, isInitialized, isJaypieError, isLlmOperateInput, isLlmOperateInputContent, isLlmOperateInputFile, isLlmOperateInputImage, isLocalEnv, isNodeTestEnv, isProductionEnv, jaypieErrorFromStatus, jaypieHandler, lambdaHandler, lambdaStreamHandler, loadEnvSecrets, methodNotAllowedRoute, noContentRoute, notFoundRoute, notImplementedRoute, placeholders, putEntity, query, queryByAlias, queryByCategory, queryByScope, queryByType, queryByXid, resetClient, resolveValue, safeParseFloat, seedEntities, seedEntityIfNotExists, sendBatchMessages, sendMessage, sendTextractJob, sendToConnection, sleep, streamToSse, submitDistribution, submitMetric, submitMetricSet, textractJsonToMarkdown, toolkit, tools, updateEntity, uuid, websocketHandler };
1237
1272
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/mock/utils.ts","../../../src/mock/aws.ts","../../../src/mockLog.module.ts","../../../src/mock/core.ts","../../../src/mock/datadog.ts","../../../src/mock/dynamodb.ts","../../../src/mock/express.ts","../../../src/mock/kit.ts","../../../src/mock/lambda.ts","../../../src/mock/llm.ts","../../../src/mock/logger.ts","../../../src/mock/mongoose.ts","../../../src/mock/textract.ts","../../../src/mock/index.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { vi } from \"vitest\";\n\nimport { LlmTool } from \"@jaypie/llm\";\n\n/**\n * Internal wrapper for vi.fn() that adds _jaypie: true to all mocks\n */\nfunction _createJaypieMock<T extends (...args: any[]) => any>(\n implementation?: T,\n): ReturnType<typeof vi.fn> {\n const mock = vi.fn(implementation);\n Object.defineProperty(mock, \"_jaypie\", { value: true });\n return mock;\n}\n\n/**\n * Creates function mocks with proper typing\n * Internal utility to create properly typed mocks\n */\nfunction createMockFunction<T extends (...args: any[]) => any>(\n implementation?: (...args: Parameters<T>) => ReturnType<T>,\n): T & { mock: any } {\n // Use a more specific type conversion to avoid TypeScript error\n return _createJaypieMock(implementation) as unknown as T & { mock: any };\n}\n\n/**\n * Creates a mock function that resolves to a value when awaited\n * Internal utility to create async mock functions\n */\nfunction createMockResolvedFunction<T>(value: T): ReturnType<typeof vi.fn> {\n return _createJaypieMock().mockResolvedValue(value);\n}\n\n/**\n * Creates a mock function that returns a value\n * Internal utility to create mock functions that return a value\n */\nfunction createMockReturnedFunction<T>(value: T): ReturnType<typeof vi.fn> {\n return _createJaypieMock().mockReturnValue(value);\n}\n\n/**\n * Creates a mock function that wraps another function\n * Internal utility to create mock functions that wrap another function\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction createMockWrappedFunction<T = any>(\n fn: (...args: unknown[]) => unknown,\n fallbackOrOptions:\n | any\n | {\n fallback?: any;\n throws?: boolean;\n class?: boolean;\n } = \"_MOCK_WRAPPED_RESULT\",\n): ReturnType<typeof vi.fn> {\n // Determine if we have a direct fallback or options object\n const options =\n typeof fallbackOrOptions === \"object\" &&\n fallbackOrOptions !== null &&\n (\"fallback\" in fallbackOrOptions ||\n \"throws\" in fallbackOrOptions ||\n \"class\" in fallbackOrOptions)\n ? fallbackOrOptions\n : { fallback: fallbackOrOptions };\n\n // Extract values with defaults\n const fallback = options.fallback ?? \"_MOCK_WRAPPED_RESULT\";\n const throws = options.throws ?? false;\n const isClass = options.class ?? false;\n\n return _createJaypieMock().mockImplementation((...args: unknown[]) => {\n try {\n return isClass ? new (fn as any)(...args) : fn(...args);\n } catch (error) {\n if (throws) {\n throw error;\n }\n\n console.warn(\n `[@jaypie/testkit] Actual implementation failed. To suppress this warning, manually mock the response with mockReturnValue`,\n );\n if (error instanceof Error) {\n console.warn(`[@jaypie/testkit] ${error.message}`);\n }\n\n // If fallback is a function, call it\n if (typeof fallback === \"function\") {\n try {\n return fallback(...args);\n } catch (fallbackError) {\n console.warn(\n `[@jaypie/testkit] Fallback function failed: ${fallbackError instanceof Error ? fallbackError.message : fallbackError}`,\n );\n return \"_MOCK_WRAPPED_RESULT\";\n }\n }\n\n return fallback;\n }\n });\n}\n\nfunction createMockWrappedObject<T extends Record<string, any>>(\n object: T,\n fallbackOrOptions:\n | any\n | {\n fallback?: any;\n throws?: boolean;\n class?: boolean;\n } = \"_MOCK_WRAPPED_RESULT\",\n): T {\n let returnMock: Record<string, any> = {};\n\n // Extract values with defaults for the top-level call\n const options =\n typeof fallbackOrOptions === \"object\" &&\n fallbackOrOptions !== null &&\n (\"fallback\" in fallbackOrOptions ||\n \"throws\" in fallbackOrOptions ||\n \"class\" in fallbackOrOptions)\n ? fallbackOrOptions\n : { fallback: fallbackOrOptions };\n\n const fallback = options.fallback ?? \"_MOCK_WRAPPED_RESULT\";\n const throws = options.throws ?? false;\n const isClass = options.class ?? false;\n\n // Create options for recursive calls\n // Do not pass down class=true to nested objects\n const recursiveOptions = {\n fallback,\n throws,\n class: false, // Always pass class=false to nested objects\n };\n\n if (typeof object === \"function\") {\n returnMock = createMockWrappedFunction(object, {\n fallback,\n throws,\n class: isClass,\n });\n }\n for (const key of Object.keys(object)) {\n const value = object[key];\n if (typeof value === \"function\") {\n returnMock[key] = createMockWrappedFunction(value, {\n fallback,\n throws,\n class: isClass,\n });\n } else if (typeof value === \"object\" && value !== null) {\n returnMock[key] = createMockWrappedObject(value, recursiveOptions);\n } else {\n returnMock[key] = value;\n }\n }\n return returnMock as T;\n}\n\n/**\n * Utility to create a mock error constructor from an error class\n */\nfunction createMockError<T extends new (...args: any[]) => Error>(\n ErrorClass: T,\n): T {\n // Create a mock constructor that returns a new instance of ErrorClass\n const mockConstructor = _createJaypieMock(function (\n this: any,\n ...args: any[]\n ) {\n return new ErrorClass(...args);\n });\n return mockConstructor as unknown as T;\n}\n\n// Mock core errors - All error classes extend JaypieError\nclass MockValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ValidationError\";\n }\n}\n\nclass MockNotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NotFoundError\";\n }\n}\n\n/**\n * Creates a mock LlmTool for testing purposes\n * @param nameOrCallOrOptions - Name (string), call function, or full options object\n * @param callOrOptions - Call function or options object (when first param is string)\n * @returns Mock LlmTool object\n */\nfunction createMockTool(\n nameOrCallOrOptions?: string | ((...args: any[]) => any) | Partial<LlmTool>,\n callOrOptions?: ((...args: any[]) => any) | Partial<LlmTool>,\n): LlmTool {\n // Default options\n const defaults: LlmTool = {\n name: \"mockTool\",\n description: \"Mock tool for testing\",\n parameters: {},\n type: \"function\",\n call: createMockResolvedFunction({ result: \"MOCK_TOOL\" }),\n message: \"MOCK_TOOL_MESSAGE\",\n };\n\n // Handle different parameter combinations\n if (typeof nameOrCallOrOptions === \"string\") {\n // First parameter is name\n const name = nameOrCallOrOptions;\n\n if (typeof callOrOptions === \"function\") {\n // Second parameter is call function\n return {\n ...defaults,\n name,\n call: callOrOptions,\n };\n } else if (callOrOptions && typeof callOrOptions === \"object\") {\n // Second parameter is options object\n return {\n ...defaults,\n name,\n ...callOrOptions,\n };\n } else {\n // Only name provided\n return {\n ...defaults,\n name,\n };\n }\n } else if (typeof nameOrCallOrOptions === \"function\") {\n // First parameter is call function\n return {\n ...defaults,\n call: nameOrCallOrOptions,\n };\n } else if (nameOrCallOrOptions && typeof nameOrCallOrOptions === \"object\") {\n // First parameter is options object\n return {\n ...defaults,\n ...nameOrCallOrOptions,\n };\n } else {\n // No parameters or invalid parameters\n return defaults;\n }\n}\n\n// Export functions for internal use\nexport {\n createMockFunction,\n createMockResolvedFunction,\n createMockReturnedFunction,\n createMockWrappedFunction,\n createMockWrappedObject,\n MockValidationError,\n MockNotFoundError,\n createMockError,\n createMockTool,\n};\n","import * as original from \"@jaypie/aws\";\nimport {\n createMockFunction,\n createMockResolvedFunction,\n createMockWrappedFunction,\n} from \"./utils\";\n\n// Constants for mock values\nconst TAG = \"AWS\";\n\nexport const getMessages = createMockWrappedFunction(original.getMessages, []);\n\nexport const getS3FileBuffer = createMockFunction<\n ({ bucket, key }: { bucket: string; key: string }) => Promise<Buffer>\n>(async ({ bucket, key }) => Buffer.from(`_MOCK_S3_FILE_[${bucket}/${key}]`));\n\nexport const getSecret = createMockResolvedFunction(\"mock-secret-value\");\n\nexport const sendMessage = createMockResolvedFunction({\n MessageId: \"mock-message-id\",\n});\n\n// Add missing functions from original implementation\nexport const getEnvSecret = createMockFunction<\n (key: string) => Promise<string>\n>(async (key) => `_MOCK_ENV_SECRET_[${TAG}][${key}]`);\n\nexport const loadEnvSecrets = createMockResolvedFunction(undefined);\n\nexport const getSingletonMessage = createMockWrappedFunction(\n original.getSingletonMessage,\n { value: \"_MOCK_SINGLETON_MESSAGE_\" },\n);\n\nexport const getTextractJob = createMockFunction<\n (jobId: string) => Promise<any>\n>(async (job) => ({ value: `_MOCK_TEXTRACT_JOB_[${job}]` }));\n\nexport const sendBatchMessages = createMockResolvedFunction(true);\n\nexport const sendTextractJob = createMockFunction<\n ({\n bucket,\n key,\n featureTypes,\n }: {\n bucket: string;\n key: string;\n featureTypes?: string[];\n snsRoleArn?: string;\n snsTopicArn?: string;\n }) => Promise<any[]>\n>(async ({ bucket, key }) => {\n // Basic validation to mimic original behavior\n if (!bucket || !key) {\n throw new Error(\"Bucket and key are required\");\n }\n return [`_MOCK_TEXTRACT_JOB_ID_[${TAG}]_${bucket}_${key}`];\n});\n\n// Streaming utilities\nexport const formatNljson = createMockFunction<\n (chunk: Record<string, unknown>) => string\n>((chunk) => JSON.stringify(chunk) + \"\\n\");\n\nexport const formatSse = createMockFunction<\n (chunk: { type: string; [key: string]: unknown }) => string\n>((chunk) => `event: ${chunk.type}\\ndata: ${JSON.stringify(chunk)}\\n\\n`);\n\nexport const formatStreamError = createMockFunction<\n (errorBody: Record<string, unknown>, format?: string) => string\n>((errorBody, format = \"sse\") => {\n if (format === \"nljson\") {\n return JSON.stringify({ error: errorBody }) + \"\\n\";\n }\n return `event: error\\ndata: ${JSON.stringify(errorBody)}\\n\\n`;\n});\n\nexport const formatStreamErrorNljson = createMockFunction<\n (errorBody: Record<string, unknown>) => string\n>((errorBody) => JSON.stringify({ error: errorBody }) + \"\\n\");\n\nexport const formatStreamErrorSse = createMockFunction<\n (errorBody: Record<string, unknown>) => string\n>((errorBody) => `event: error\\ndata: ${JSON.stringify(errorBody)}\\n\\n`);\n\nexport const getContentTypeForFormat = createMockFunction<\n (format: string) => string\n>((format) => {\n if (format === \"nljson\") {\n return \"application/x-ndjson\";\n }\n return \"text/event-stream\";\n});\n\nexport const streamToSse = createMockFunction<\n (stream: AsyncIterable<unknown>) => AsyncIterable<string>\n>(async function* (stream) {\n for await (const chunk of stream) {\n yield `event: mock\\ndata: ${JSON.stringify(chunk)}\\n\\n`;\n }\n});\n\nexport const createLambdaStream = createMockFunction<\n (\n stream: AsyncIterable<unknown>,\n writer: { write: (chunk: string) => void; end: () => void },\n ) => Promise<void>\n>(async (stream, writer) => {\n for await (const chunk of stream) {\n writer.write(JSON.stringify(chunk));\n }\n writer.end();\n});\n\nexport const createExpressStream = createMockFunction<\n (\n stream: AsyncIterable<unknown>,\n res: {\n setHeader: (name: string, value: string) => void;\n write: (chunk: string) => boolean;\n end: () => void;\n flushHeaders: () => void;\n },\n ) => Promise<void>\n>(async (stream, res) => {\n res.setHeader(\"Content-Type\", \"text/event-stream\");\n res.flushHeaders();\n for await (const chunk of stream) {\n res.write(JSON.stringify(chunk));\n }\n res.end();\n});\n\n// Mock JaypieStream class\nexport class JaypieStream {\n private readonly source: AsyncIterable<unknown>;\n\n constructor(source: AsyncIterable<unknown>) {\n this.source = source;\n }\n\n async toLambda(writer: {\n write: (chunk: string) => void;\n end: () => void;\n }): Promise<void> {\n for await (const chunk of this.source) {\n writer.write(JSON.stringify(chunk));\n }\n writer.end();\n }\n\n async toExpress(res: {\n setHeader: (name: string, value: string) => void;\n write: (chunk: string) => boolean;\n end: () => void;\n flushHeaders: () => void;\n }): Promise<void> {\n res.setHeader(\"Content-Type\", \"text/event-stream\");\n res.flushHeaders();\n for await (const chunk of this.source) {\n res.write(JSON.stringify(chunk));\n }\n res.end();\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this.source[Symbol.asyncIterator]();\n }\n\n toSse(): AsyncIterable<string> {\n const source = this.source;\n return {\n async *[Symbol.asyncIterator]() {\n for await (const chunk of source) {\n yield `event: mock\\ndata: ${JSON.stringify(chunk)}\\n\\n`;\n }\n },\n };\n }\n}\n\nexport const createJaypieStream = createMockFunction<\n (source: AsyncIterable<unknown>) => JaypieStream\n>((source) => new JaypieStream(source));\n","import { log } from \"@jaypie/logger\";\nimport { vi } from \"vitest\";\nimport { LogMock } from \"./types/jaypie-testkit\";\n\nexport function mockLogFactory(): LogMock {\n // Create skeleton of mock objects\n const mock = {\n debug: vi.fn(),\n error: vi.fn(),\n fatal: vi.fn(),\n info: vi.fn(),\n init: vi.fn(),\n lib: vi.fn(),\n tag: vi.fn(),\n trace: vi.fn(),\n untag: vi.fn(),\n var: vi.fn(),\n warn: vi.fn(),\n with: vi.fn(),\n } as LogMock;\n\n // Fill out nested mocks\n mock.debug.var = mock.var;\n mock.error.var = mock.var;\n mock.fatal.var = mock.var;\n mock.info.var = mock.var;\n mock.trace.var = mock.var;\n mock.warn.var = mock.var;\n\n // Have modules return correct objects\n mock.init.mockReturnValue(null);\n mock.lib.mockReturnValue(mock);\n mock.with.mockReturnValue(mock);\n\n // Pin mocks to the module\n mock.mock = {\n debug: mock.debug,\n error: mock.error,\n fatal: mock.fatal,\n info: mock.info,\n init: mock.init,\n lib: mock.lib,\n tag: mock.tag,\n trace: mock.trace,\n untag: mock.untag,\n var: mock.var,\n warn: mock.warn,\n with: mock.with,\n };\n\n return mock;\n}\n\nconst LOG_METHOD_NAMES = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"init\",\n \"lib\",\n \"tag\",\n \"trace\",\n \"untag\",\n \"var\",\n \"warn\",\n \"with\",\n] as const;\n\n// Use Record type for more flexible access pattern\nconst originalLogMethods = new WeakMap<typeof log, Record<string, unknown>>();\n\nexport function spyLog(logInstance: typeof log): void {\n if (!originalLogMethods.has(logInstance)) {\n const mockLog = mockLogFactory();\n const originalMethods: Record<string, unknown> = {};\n\n // Save only methods that actually exist on the log instance\n LOG_METHOD_NAMES.forEach((method) => {\n if (method in logInstance) {\n originalMethods[method] =\n logInstance[method as keyof typeof logInstance];\n // Use type assertion after checking existence\n (logInstance as unknown as Record<string, unknown>)[method] =\n mockLog[method];\n }\n });\n\n originalLogMethods.set(logInstance, originalMethods);\n }\n}\n\nexport function restoreLog(logInstance: typeof log): void {\n const originalMethods = originalLogMethods.get(logInstance);\n if (originalMethods) {\n LOG_METHOD_NAMES.forEach((method) => {\n if (method in originalMethods && method in logInstance) {\n // Use type assertion after checking existence\n (logInstance as unknown as Record<string, unknown>)[method] =\n originalMethods[method];\n }\n });\n originalLogMethods.delete(logInstance);\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport {\n createMockError,\n createMockFunction,\n createMockResolvedFunction,\n createMockReturnedFunction,\n createMockWrappedFunction,\n createMockWrappedObject,\n} from \"./utils\";\nimport { beforeAll } from \"vitest\";\nimport { spyLog } from \"../mockLog.module.js\";\nimport { log } from \"@jaypie/logger\";\nimport * as errors from \"@jaypie/errors\";\nimport * as kit from \"@jaypie/kit\";\n\n// Constants for mock values\nconst TAG = \"CORE\";\n\n// JaypieError is the base class - export it directly from errors\nexport const JaypieError = errors.JaypieError;\n\nexport const BadGatewayError: typeof errors.BadGatewayError = createMockError(\n errors.BadGatewayError,\n);\nexport const BadRequestError: typeof errors.BadRequestError = createMockError(\n errors.BadRequestError,\n);\nexport const ConfigurationError: typeof errors.ConfigurationError =\n createMockError(errors.ConfigurationError);\nexport const CorsError: typeof errors.CorsError = createMockError(\n errors.CorsError,\n);\nexport const ForbiddenError: typeof errors.ForbiddenError = createMockError(\n errors.ForbiddenError,\n);\nexport const GatewayTimeoutError: typeof errors.GatewayTimeoutError =\n createMockError(errors.GatewayTimeoutError);\nexport const GoneError: typeof errors.GoneError = createMockError(\n errors.GoneError,\n);\nexport const IllogicalError: typeof errors.IllogicalError = createMockError(\n errors.IllogicalError,\n);\nexport const InternalError: typeof errors.InternalError = createMockError(\n errors.InternalError,\n);\nexport const MethodNotAllowedError: typeof errors.MethodNotAllowedError =\n createMockError(errors.MethodNotAllowedError);\n// Backwards compatibility aliases\nexport const MultiError: typeof errors.InternalError = createMockError(\n errors.InternalError,\n);\nexport const NotFoundError: typeof errors.NotFoundError = createMockError(\n errors.NotFoundError,\n);\nexport const NotImplementedError: typeof errors.NotImplementedError =\n createMockError(errors.NotImplementedError);\nexport const ProjectError: typeof errors.InternalError = createMockError(\n errors.InternalError,\n);\nexport const ProjectMultiError: typeof errors.InternalError = createMockError(\n errors.InternalError,\n);\nexport const RejectedError: typeof errors.RejectedError = createMockError(\n errors.RejectedError,\n);\nexport const TeapotError: typeof errors.TeapotError = createMockError(\n errors.TeapotError,\n);\nexport const TooManyRequestsError: typeof errors.TooManyRequestsError =\n createMockError(errors.TooManyRequestsError);\nexport const UnauthorizedError: typeof errors.UnauthorizedError =\n createMockError(errors.UnauthorizedError);\nexport const UnavailableError: typeof errors.UnavailableError = createMockError(\n errors.UnavailableError,\n);\nexport const UnhandledError: typeof errors.UnhandledError = createMockError(\n errors.UnhandledError,\n);\nexport const UnreachableCodeError: typeof errors.UnreachableCodeError =\n createMockError(errors.UnreachableCodeError);\n\nbeforeAll(async () => {\n spyLog(log);\n});\nexport { log };\n\n// Add missing core functions\nexport const cloneDeep = createMockWrappedFunction(kit.cloneDeep, {\n throws: true,\n});\n\nexport const envBoolean = createMockReturnedFunction(true);\n\nexport const envsKey = createMockWrappedFunction(\n kit.envsKey as (...args: unknown[]) => unknown,\n `_MOCK_ENVS_KEY_[${TAG}]`,\n);\n\nexport const errorFromStatusCode = createMockFunction<\n (statusCode: number, message?: string) => Error\n>((statusCode, message = `Mock error for status code ${statusCode}`) => {\n try {\n // Try to mimic original implementation\n switch (statusCode) {\n case 400:\n return new BadRequestError(message);\n case 401:\n return new UnauthorizedError(message);\n case 403:\n return new ForbiddenError(message);\n case 404:\n return new NotFoundError(message);\n case 405:\n return new MethodNotAllowedError(message);\n case 410:\n return new GoneError(message);\n case 418:\n return new TeapotError(message);\n case 500:\n return new InternalError(message);\n case 501:\n return new NotImplementedError(message);\n case 502:\n return new BadGatewayError(message);\n case 503:\n return new UnavailableError(message);\n case 504:\n return new GatewayTimeoutError(message);\n default:\n return new Error(message);\n }\n } catch {\n return new Error(`_MOCK_ERROR_FROM_STATUS_CODE_[${TAG}][${statusCode}]`);\n }\n});\n\nexport const formatError = createMockWrappedFunction(\n kit.formatError as (...args: unknown[]) => unknown,\n `_MOCK_FORMAT_ERROR_[${TAG}]`,\n);\n\n// Alias for errorFromStatusCode (exported from @jaypie/errors as jaypieErrorFromStatus)\nexport const jaypieErrorFromStatus = errorFromStatusCode;\n\nexport const getHeaderFrom = createMockWrappedFunction(\n kit.getHeaderFrom as (...args: unknown[]) => unknown,\n `_MOCK_GET_HEADER_FROM_[${TAG}]`,\n);\n\nexport const getObjectKeyCaseInsensitive = createMockWrappedFunction(\n kit.getObjectKeyCaseInsensitive as (...args: unknown[]) => unknown,\n `_MOCK_GET_OBJECT_KEY_CASE_INSENSITIVE_[${TAG}]`,\n);\n\nexport const isClass = createMockWrappedFunction(\n kit.isClass,\n `_MOCK_IS_CLASS_[${TAG}]`,\n);\n\nexport const isJaypieError = createMockWrappedFunction(\n errors.isJaypieError,\n false,\n);\n\nexport const resolveValue = createMockWrappedFunction(\n kit.resolveValue,\n `_MOCK_RESOLVE_VALUE_[${TAG}]`,\n);\n\nexport const safeParseFloat = createMockWrappedFunction(\n kit.safeParseFloat as (...args: unknown[]) => unknown,\n `_MOCK_SAFE_PARSE_FLOAT_[${TAG}]`,\n);\n\nexport const placeholders = createMockWrappedFunction(\n kit.placeholders as (...args: unknown[]) => unknown,\n `_MOCK_PLACEHOLDERS_[${TAG}]`,\n);\n\n// Add force utilities to help with jaypieHandler implementation\nexport const force = createMockWrappedObject(kit.force);\n\nexport const jaypieHandler = createMockFunction<\n (\n handler: Function,\n options?: {\n setup?: Function | Function[];\n teardown?: Function | Function[];\n unavailable?: boolean;\n validate?: Function | Function[];\n },\n ) => Function\n>((handler, options = {}) => {\n return async (...args: any[]) => {\n let result;\n let thrownError;\n\n // Destructure options with defaults\n const {\n setup = [],\n teardown = [],\n unavailable = kit.force.boolean(process.env.PROJECT_UNAVAILABLE),\n validate = [],\n } = options;\n\n // Check if service is unavailable\n if (unavailable) throw new UnavailableError(\"Service unavailable\");\n\n // Run validation functions\n const validateFunctions = kit.force.array(validate);\n for (const validator of validateFunctions) {\n if (typeof validator === \"function\") {\n const valid = await validator(...args);\n if (valid === false) {\n throw new BadRequestError(\"Validation failed\");\n }\n }\n }\n\n try {\n // Run setup functions\n const setupFunctions = kit.force.array(setup);\n for (const setupFunction of setupFunctions) {\n if (typeof setupFunction === \"function\") {\n await setupFunction(...args);\n }\n }\n\n // Execute the handler\n result = await handler(...args);\n } catch (error) {\n thrownError = error;\n }\n\n // Run teardown functions (always run even if there was an error)\n const teardownFunctions = kit.force.array(teardown);\n for (const teardownFunction of teardownFunctions) {\n if (typeof teardownFunction === \"function\") {\n try {\n await teardownFunction(...args);\n } catch (teardownError) {\n // Swallow teardown errors, but log them\n // eslint-disable-next-line no-console\n console.error(teardownError);\n }\n }\n }\n\n // If there was an error in the handler, throw it after teardown\n if (thrownError) {\n throw thrownError;\n }\n\n return result;\n };\n});\n\nexport const sleep = createMockResolvedFunction(true);\n\nexport const uuid = createMockWrappedFunction(\n () => \"00000000-0000-0000-0000-000000000000\",\n `00000000-0000-0000-0000-000000000000`,\n);\n\nexport const HTTP = kit.HTTP;\nexport const JAYPIE = kit.JAYPIE;\nexport const PROJECT = kit.PROJECT;\n","import { createMockResolvedFunction, createMockWrappedFunction } from \"./utils\";\n\nimport * as original from \"@jaypie/datadog\";\n\nexport const DATADOG = original.DATADOG;\nexport const hasDatadogEnv = createMockWrappedFunction(\n original.hasDatadogEnv,\n false,\n);\nexport const submitDistribution = createMockResolvedFunction(true);\nexport const submitMetric = createMockResolvedFunction(true);\nexport const submitMetricSet = createMockResolvedFunction(true);\n","import * as original from \"@jaypie/dynamodb\";\nimport type {\n BaseQueryOptions,\n DynamoClientConfig,\n ExportResult,\n ParentReference,\n QueryParams,\n QueryResult,\n SeedOptions,\n SeedResult,\n StorableEntity,\n} from \"@jaypie/dynamodb\";\nimport type { IndexableModel } from \"@jaypie/fabric\";\n\nimport { createMockFunction, createMockResolvedFunction } from \"./utils\";\n\n// Re-export constants (no need to mock, just pass through)\nexport const APEX = original.APEX;\nexport const ARCHIVED_SUFFIX = original.ARCHIVED_SUFFIX;\nexport const DEFAULT_INDEXES = original.DEFAULT_INDEXES;\nexport const DELETED_SUFFIX = original.DELETED_SUFFIX;\nexport const INDEX_ALIAS = original.INDEX_ALIAS;\nexport const INDEX_CLASS = original.INDEX_CLASS;\nexport const INDEX_SCOPE = original.INDEX_SCOPE;\nexport const INDEX_TYPE = original.INDEX_TYPE;\nexport const INDEX_XID = original.INDEX_XID;\nexport const SEPARATOR = original.SEPARATOR;\n\n// Key builder functions - use createMockFunction with typed implementations\nexport const buildCompositeKey = createMockFunction<\n (\n entity: Record<string, unknown> & { model: string },\n fields: string[],\n suffix?: string,\n ) => string\n>((entity, fields, suffix) => original.buildCompositeKey(entity, fields, suffix));\n\nexport const buildIndexAlias = createMockFunction<\n (scope: string, model: string, alias: string) => string\n>((scope, model, alias) => original.buildIndexAlias(scope, model, alias));\n\nexport const buildIndexClass = createMockFunction<\n (scope: string, model: string, recordClass: string) => string\n>((scope, model, recordClass) => original.buildIndexClass(scope, model, recordClass));\n\nexport const buildIndexScope = createMockFunction<\n (scope: string, model: string) => string\n>((scope, model) => original.buildIndexScope(scope, model));\n\nexport const buildIndexType = createMockFunction<\n (scope: string, model: string, type: string) => string\n>((scope, model, type) => original.buildIndexType(scope, model, type));\n\nexport const buildIndexXid = createMockFunction<\n (scope: string, model: string, xid: string) => string\n>((scope, model, xid) => original.buildIndexXid(scope, model, xid));\n\nexport const calculateScope = createMockFunction<\n (parent?: ParentReference) => string\n>((parent) => original.calculateScope(parent));\n\nexport const indexEntity = createMockFunction<\n <T extends StorableEntity>(entity: T, suffix?: string) => T\n>(<T extends StorableEntity>(entity: T, suffix?: string) =>\n original.indexEntity(entity, suffix),\n);\n\n// Client functions\nexport const initClient = createMockFunction<\n (config: DynamoClientConfig) => void\n>(() => {\n // No-op in mock\n});\n\nexport const getDocClient = createMockFunction(() => ({\n send: createMockResolvedFunction({ Items: [] }),\n}));\n\nexport const getTableName = createMockFunction(() => \"mock-table\");\n\nexport const isInitialized = createMockFunction(() => true);\n\nexport const resetClient = createMockFunction(() => {\n // No-op in mock\n});\n\n// Entity operations - service handler pattern (callable with object params)\nexport const getEntity = createMockFunction<\n (params: { id: string; model: string }) => Promise<StorableEntity | null>\n>(async () => null);\n\nexport const putEntity = createMockFunction<\n (params: { entity: StorableEntity }) => Promise<StorableEntity>\n>(async (params: { entity: StorableEntity }) =>\n original.indexEntity(params.entity),\n);\n\nexport const updateEntity = createMockFunction<\n (params: { entity: StorableEntity }) => Promise<StorableEntity>\n>(async (params: { entity: StorableEntity }) => ({\n ...original.indexEntity(params.entity),\n updatedAt: new Date().toISOString(),\n}));\n\nexport const deleteEntity = createMockFunction<\n (params: { id: string; model: string }) => Promise<boolean>\n>(async () => true);\n\nexport const archiveEntity = createMockFunction<\n (params: { id: string; model: string }) => Promise<boolean>\n>(async () => true);\n\nexport const destroyEntity = createMockFunction<\n (params: { id: string; model: string }) => Promise<boolean>\n>(async () => true);\n\n// Query functions - service handler pattern (callable with object params)\nexport const queryByScope = createMockFunction<\n (params: {\n model: string;\n scope: string;\n archived?: boolean;\n ascending?: boolean;\n deleted?: boolean;\n limit?: number;\n startKey?: Record<string, unknown>;\n }) => Promise<QueryResult<StorableEntity>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\nexport const queryByAlias = createMockFunction<\n (params: {\n alias: string;\n archived?: boolean;\n deleted?: boolean;\n model: string;\n scope: string;\n }) => Promise<StorableEntity | null>\n>(async () => null);\n\nexport const queryByClass = createMockFunction<\n (params: {\n archived?: boolean;\n ascending?: boolean;\n deleted?: boolean;\n limit?: number;\n model: string;\n scope: string;\n recordClass: string;\n startKey?: Record<string, unknown>;\n }) => Promise<QueryResult<StorableEntity>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\nexport const queryByType = createMockFunction<\n (params: {\n archived?: boolean;\n ascending?: boolean;\n deleted?: boolean;\n limit?: number;\n model: string;\n scope: string;\n startKey?: Record<string, unknown>;\n type: string;\n }) => Promise<QueryResult<StorableEntity>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\nexport const queryByXid = createMockFunction<\n (params: {\n archived?: boolean;\n deleted?: boolean;\n model: string;\n scope: string;\n xid: string;\n }) => Promise<StorableEntity | null>\n>(async () => null);\n\n// Unified query function with auto-detect\nexport const query = createMockFunction<\n <T extends StorableEntity = StorableEntity>(params: {\n archived?: boolean;\n ascending?: boolean;\n deleted?: boolean;\n filter?: Partial<T>;\n limit?: number;\n model: string;\n scope?: string;\n startKey?: Record<string, unknown>;\n }) => Promise<QueryResult<T>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\n// Seed and export utilities\nexport const seedEntityIfNotExists = createMockFunction<\n <T extends Partial<StorableEntity>>(entity: T) => Promise<boolean>\n>(async () => true);\n\nexport const seedEntities = createMockFunction<\n <T extends Partial<StorableEntity>>(\n entities: T[],\n options?: SeedOptions,\n ) => Promise<SeedResult>\n>(async () => ({\n created: [],\n errors: [],\n skipped: [],\n}));\n\nexport const exportEntities = createMockFunction<\n <T extends StorableEntity>(\n model: string,\n scope: string,\n limit?: number,\n ) => Promise<ExportResult<T>>\n>(async () => ({\n count: 0,\n entities: [],\n}));\n\nexport const exportEntitiesToJson = createMockFunction<\n (model: string, scope: string, pretty?: boolean) => Promise<string>\n>(async () => \"[]\");\n\n// Re-export types for convenience\nexport type {\n BaseQueryOptions,\n ExportResult,\n ParentReference,\n QueryParams,\n QueryResult,\n SeedOptions,\n SeedResult,\n StorableEntity,\n};\nexport type { IndexableModel };\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport {\n createMockFunction,\n createMockReturnedFunction,\n createMockWrappedFunction,\n} from \"./utils\";\nimport { BadRequestError, UnhandledError } from \"@jaypie/errors\";\nimport { force, jaypieHandler } from \"./core\";\nimport * as original from \"@jaypie/express\";\n\n// Constants for mock values\nconst TAG = \"EXPRESS\";\nconst HTTP = {\n CODE: { OK: 200, CREATED: 201, NO_CONTENT: 204, INTERNAL_ERROR: 500 },\n};\n\n// Re-export Lambda adapter classes directly (these are not mocked)\nexport const createLambdaHandler = createMockWrappedFunction(\n original.createLambdaHandler as (...args: unknown[]) => unknown,\n);\nexport const createLambdaStreamHandler = createMockWrappedFunction(\n original.createLambdaStreamHandler as (...args: unknown[]) => unknown,\n);\nexport const getCurrentInvoke = createMockReturnedFunction<{\n context: unknown;\n event: unknown;\n}>({ context: undefined, event: undefined });\nexport const LambdaRequest = original.LambdaRequest;\nexport const LambdaResponseBuffered = original.LambdaResponseBuffered;\nexport const LambdaResponseStreaming = original.LambdaResponseStreaming;\n\nexport const EXPRESS = original.EXPRESS;\n\n// Add Express route functions\nexport const badRequestRoute = createMockWrappedFunction(\n original.badRequestRoute as (...args: unknown[]) => unknown,\n { error: `_MOCK_BAD_REQUEST_ROUTE_[${TAG}]` },\n);\n\nexport const echoRoute = createMockWrappedFunction(\n original.echoRoute as (...args: unknown[]) => unknown,\n (req: unknown) => req,\n);\n\nexport const forbiddenRoute = createMockWrappedFunction(\n original.forbiddenRoute as (...args: unknown[]) => unknown,\n { error: `_MOCK_FORBIDDEN_ROUTE_[${TAG}]` },\n);\n\nexport const goneRoute = createMockWrappedFunction(\n original.goneRoute as (...args: unknown[]) => unknown,\n {\n error: `_MOCK_GONE_ROUTE_[${TAG}]`,\n },\n);\n\nexport const methodNotAllowedRoute = createMockWrappedFunction(\n original.methodNotAllowedRoute as (...args: unknown[]) => unknown,\n { error: `_MOCK_METHOD_NOT_ALLOWED_ROUTE_[${TAG}]` },\n);\n\nexport const noContentRoute = createMockWrappedFunction(\n original.noContentRoute as (...args: unknown[]) => unknown,\n { status: 204 },\n);\n\nexport const notFoundRoute = createMockWrappedFunction(\n original.notFoundRoute as (...args: unknown[]) => unknown,\n {\n error: `_MOCK_NOT_FOUND_ROUTE_[${TAG}]`,\n },\n);\n\nexport const notImplementedRoute = createMockWrappedFunction(\n original.notImplementedRoute as any,\n { error: `_MOCK_NOT_IMPLEMENTED_ROUTE_[${TAG}]` },\n);\n\nexport const expressHttpCodeHandler = createMockWrappedFunction(\n original.expressHttpCodeHandler as any,\n (...args: any[]) => {\n const [, res] = args;\n return res.status(200).send();\n },\n);\n\nexport const cors = createMockWrappedFunction(original.cors as any);\n\nexport const getCurrentInvokeUuid = createMockReturnedFunction<\n string | undefined\n>(\"mock-invoke-uuid-12345678\");\n\n// Type definitions needed for the expressHandler\ninterface WithJsonFunction {\n json: () => any;\n}\n\nexport interface ExpressHandlerFunction {\n (req: any, res: any, ...extra: any[]): Promise<any> | any;\n}\n\nexport interface ExpressHandlerOptions {\n locals?: Record<string, any>;\n setup?: any[] | Function;\n teardown?: any[] | Function;\n unavailable?: boolean;\n validate?: any[] | Function;\n}\n\ntype ExpressHandlerParameter = ExpressHandlerFunction | ExpressHandlerOptions;\n\nexport interface ExpressStreamHandlerOptions {\n locals?: Record<string, any>;\n setup?: any[] | Function;\n teardown?: any[] | Function;\n unavailable?: boolean;\n validate?: any[] | Function;\n contentType?: string;\n}\n\nexport type ExpressStreamHandlerFunction = (\n req: any,\n res: any,\n ...extra: any[]\n) => Promise<void>;\n\ntype ExpressStreamHandlerParameter =\n | ExpressStreamHandlerFunction\n | ExpressStreamHandlerOptions;\n\nexport const expressStreamHandler = createMockFunction<\n (\n handlerOrProps: ExpressStreamHandlerParameter,\n propsOrHandler?: ExpressStreamHandlerParameter,\n ) => (req: any, res: any, ...extra: any[]) => Promise<void>\n>((handlerOrProps, propsOrHandler) => {\n let handler: ExpressStreamHandlerFunction;\n let props: ExpressStreamHandlerOptions;\n\n if (\n typeof handlerOrProps === \"object\" &&\n typeof propsOrHandler === \"function\"\n ) {\n handler = propsOrHandler;\n props = handlerOrProps;\n } else if (typeof handlerOrProps === \"function\") {\n handler = handlerOrProps;\n props = (propsOrHandler || {}) as ExpressStreamHandlerOptions;\n } else {\n throw new BadRequestError(\"handler must be a function\");\n }\n\n return async (req = {}, res: any = {}, ...extra: unknown[]) => {\n // Set SSE headers if res has setHeader method\n if (typeof res.setHeader === \"function\") {\n res.setHeader(\"Content-Type\", props.contentType || \"text/event-stream\");\n res.setHeader(\"Cache-Control\", \"no-cache\");\n res.setHeader(\"Connection\", \"keep-alive\");\n res.setHeader(\"X-Accel-Buffering\", \"no\");\n if (typeof res.flushHeaders === \"function\") {\n res.flushHeaders();\n }\n }\n\n try {\n await handler(req, res, ...extra);\n } finally {\n // End the response if possible\n if (typeof res.end === \"function\") {\n try {\n res.end();\n } catch {\n // Response may already be ended\n }\n }\n }\n };\n});\n\nexport const expressHandler = createMockFunction<\n (\n handlerOrProps: ExpressHandlerParameter,\n propsOrHandler?: ExpressHandlerParameter,\n ) => (req: any, res: any, ...extra: any[]) => Promise<any>\n>((handlerOrProps, propsOrHandler) => {\n let handler: ExpressHandlerFunction;\n let props: ExpressHandlerOptions;\n\n if (\n typeof handlerOrProps === \"object\" &&\n typeof propsOrHandler === \"function\"\n ) {\n handler = propsOrHandler;\n props = handlerOrProps;\n } else if (typeof handlerOrProps === \"function\") {\n handler = handlerOrProps;\n props = (propsOrHandler || {}) as ExpressHandlerOptions;\n } else {\n throw new BadRequestError(\"handler must be a function\");\n }\n\n // Add locals setup if needed\n if (\n props.locals &&\n typeof props.locals === \"object\" &&\n !Array.isArray(props.locals)\n ) {\n const keys = Object.keys(props.locals);\n if (!props.setup) props.setup = [];\n props.setup = force.array(props.setup);\n props.setup.unshift((req: { locals?: Record<string, unknown> }) => {\n if (!req || typeof req !== \"object\") {\n throw new BadRequestError(\"req must be an object\");\n }\n // Set req.locals if it doesn't exist\n if (!req.locals) req.locals = {};\n if (typeof req.locals !== \"object\" || Array.isArray(req.locals)) {\n throw new BadRequestError(\"req.locals must be an object\");\n }\n if (!req.locals._jaypie) req.locals._jaypie = {};\n });\n const localsSetup = async (\n localsReq: { locals: Record<string, unknown> },\n localsRes: unknown,\n ) => {\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n if (typeof props.locals![key] === \"function\") {\n localsReq.locals[key] = await props.locals![key](\n localsReq,\n localsRes,\n );\n } else {\n localsReq.locals[key] = props.locals![key];\n }\n }\n };\n props.setup.push(localsSetup);\n }\n if (props.locals && typeof props.locals !== \"object\") {\n throw new BadRequestError(\"props.locals must be an object\");\n }\n if (props.locals && Array.isArray(props.locals)) {\n throw new BadRequestError(\"props.locals must be an object\");\n }\n if (props.locals === null) {\n throw new BadRequestError(\"props.locals must be an object\");\n }\n\n const jaypieFunction = jaypieHandler(handler, props);\n return async (req = {}, res = {}, ...extra: unknown[]) => {\n const status = HTTP.CODE.OK;\n let response;\n let supertestMode = false;\n\n if (\n res &&\n typeof res === \"object\" &&\n \"socket\" in res &&\n res.constructor.name === \"ServerResponse\"\n ) {\n // Use the response object in supertest mode\n supertestMode = true;\n }\n\n try {\n response = await jaypieFunction(req, res, ...extra);\n } catch (error: any) {\n // In the mock context, if status is a function we are in a \"supertest\"\n if (supertestMode && typeof res.status === \"function\") {\n // In theory jaypieFunction has handled all errors\n const errorStatus = error?.status || HTTP.CODE.INTERNAL_ERROR;\n let errorResponse;\n if (typeof error?.json === \"function\") {\n errorResponse = error.json();\n } else {\n // This should never happen\n errorResponse = new UnhandledError().json();\n }\n res.status(errorStatus).json(errorResponse);\n return;\n } else {\n // else, res.status is not a function, throw the error\n throw error;\n }\n }\n\n if (supertestMode && typeof res.status === \"function\") {\n if (response) {\n if (typeof response === \"object\") {\n if (typeof (response as WithJsonFunction).json === \"function\") {\n res.json((response as WithJsonFunction).json());\n } else {\n res.status(status).json(response);\n }\n } else if (typeof response === \"string\") {\n try {\n res.status(status).json(JSON.parse(response));\n } catch {\n res.status(status).send(response);\n }\n } else if (response === true) {\n res.status(HTTP.CODE.CREATED).send();\n } else {\n res.status(status).send(response);\n }\n } else {\n res.status(HTTP.CODE.NO_CONTENT).send();\n }\n } else {\n return response;\n }\n };\n});\n","import { createMockReturnedFunction } from \"./utils\";\n\nexport const isLocalEnv = createMockReturnedFunction(false);\n\nexport const isNodeTestEnv = createMockReturnedFunction(true);\n\nexport const isProductionEnv = createMockReturnedFunction(false);\n","import { createMockFunction } from \"./utils\";\nimport { jaypieHandler } from \"./core\";\n\n// We'll use more specific types instead of Function\ntype HandlerFunction = (...args: unknown[]) => unknown;\ntype LifecycleFunction = (...args: unknown[]) => unknown | Promise<unknown>;\n\nexport interface LambdaOptions {\n name?: string;\n setup?: LifecycleFunction | LifecycleFunction[];\n teardown?: LifecycleFunction | LifecycleFunction[];\n throw?: boolean;\n unavailable?: boolean;\n validate?: LifecycleFunction | LifecycleFunction[];\n [key: string]: unknown;\n}\n\n// Mock implementation of lambdaHandler that follows the original implementation pattern\nexport const lambdaHandler = createMockFunction<\n (handler: HandlerFunction, props?: LambdaOptions) => HandlerFunction\n>((handler, props = {}) => {\n // If handler is an object and options is a function, swap them\n if (typeof handler === \"object\" && typeof props === \"function\") {\n const temp = handler;\n handler = props;\n props = temp;\n }\n return async (event: unknown, context: unknown, ...extra: unknown[]) => {\n return jaypieHandler(handler, props)(event, context, ...extra);\n };\n});\n\n// Mock stream handler function type\ntype StreamHandlerFunction = (\n event: unknown,\n responseStream: { write: (data: string) => void; end: () => void },\n context: unknown,\n ...extra: unknown[]\n) => Promise<void>;\n\n// Mock implementation of lambdaStreamHandler\nexport const lambdaStreamHandler = createMockFunction<\n (\n handler: StreamHandlerFunction,\n props?: LambdaOptions,\n ) => StreamHandlerFunction\n>((handler, props = {}) => {\n // If handler is an object and options is a function, swap them\n if (typeof handler === \"object\" && typeof props === \"function\") {\n const temp = handler;\n handler = props;\n props = temp;\n }\n return async (\n event: unknown,\n responseStream: { write: (data: string) => void; end: () => void },\n context: unknown,\n ...extra: unknown[]\n ) => {\n try {\n await handler(event, responseStream, context, ...extra);\n } finally {\n try {\n responseStream.end();\n } catch {\n // Response stream may already be ended\n }\n }\n };\n});\n","import { vi } from \"vitest\";\nimport {\n createMockResolvedFunction,\n createMockReturnedFunction,\n createMockTool,\n createMockWrappedObject,\n} from \"./utils\";\n\nimport * as original from \"@jaypie/llm\";\n\nexport const LLM = original.LLM;\n\nconst mockOperate = createMockResolvedFunction({\n content: \"_MOCK_OUTPUT_TEXT\",\n fallbackAttempts: 1,\n fallbackUsed: false,\n history: [\n {\n content: \"_MOCK_USER_INPUT\",\n role: \"user\",\n type: \"message\",\n },\n {\n id: \"_MOCK_MESSAGE_ID\",\n type: \"message\",\n status: \"completed\",\n content: \"_MOCK_CONTENT\",\n role: \"assistant\",\n },\n ],\n model: \"_MOCK_MODEL\",\n output: [\n {\n id: \"_MOCK_MESSAGE_ID\",\n type: \"message\",\n status: \"completed\",\n content: \"_MOCK_CONTENT\",\n role: \"assistant\",\n },\n ],\n provider: \"_MOCK_PROVIDER\",\n reasoning: [],\n responses: [\n {\n id: \"_MOCK_RESPONSE_ID\",\n object: \"response\",\n created_at: Date.now() / 1000,\n status: \"completed\",\n error: null,\n output_text: \"_MOCK_OUTPUT_TEXT\",\n },\n ],\n status: \"completed\",\n usage: [\n {\n input: 100,\n output: 20,\n reasoning: 0,\n total: 120,\n provider: \"_MOCK_PROVIDER\",\n model: \"_MOCK_MODEL\",\n },\n ],\n});\nconst mockSend = createMockResolvedFunction(\"_MOCK_LLM_RESPONSE\");\nexport const Llm = Object.assign(\n vi.fn().mockImplementation((providerName = \"_MOCK_LLM_PROVIDER\") => ({\n _provider: providerName,\n _llm: {\n operate: mockOperate,\n send: mockSend,\n },\n operate: mockOperate,\n send: mockSend,\n })),\n {\n operate: mockOperate,\n send: mockSend,\n },\n);\n\n// Tool implementations - always return mock values\nconst random = createMockTool(\"random\", createMockReturnedFunction(0.5));\n\nconst roll = createMockTool(\"roll\", createMockReturnedFunction(6));\n\nconst time = createMockTool(\"time\", createMockReturnedFunction(`_MOCK_TIME`));\n\nconst weather = createMockTool(\n \"weather\",\n createMockResolvedFunction({\n location: `_MOCK_WEATHER_LOCATION`,\n forecast: [{ conditions: \"good\" }],\n }),\n);\n\nexport const Toolkit = createMockWrappedObject(original.Toolkit, {\n isClass: true,\n});\n\nexport const JaypieToolkit = createMockWrappedObject(original.JaypieToolkit, {\n isClass: true,\n});\n\nexport const LlmMessageRole = createMockWrappedObject(original.LlmMessageRole, {\n isClass: true,\n});\nexport const LlmMessageType = createMockWrappedObject(original.LlmMessageType, {\n isClass: true,\n});\nexport const LlmStreamChunkType = createMockWrappedObject(\n original.LlmStreamChunkType,\n {\n isClass: true,\n },\n);\n\n// Provider mocks\nexport const GeminiProvider = createMockWrappedObject(original.GeminiProvider, {\n isClass: true,\n});\nexport const OpenRouterProvider = createMockWrappedObject(\n original.OpenRouterProvider,\n {\n isClass: true,\n },\n);\n\n// Type guards and utilities - re-export from original (these are pure functions)\nexport const extractReasoning = original.extractReasoning;\nexport const isLlmOperateInput = original.isLlmOperateInput;\nexport const isLlmOperateInputContent = original.isLlmOperateInputContent;\nexport const isLlmOperateInputFile = original.isLlmOperateInputFile;\nexport const isLlmOperateInputImage = original.isLlmOperateInputImage;\n\n// Tool collections\nexport const toolkit = new original.JaypieToolkit([\n random,\n roll,\n time,\n weather,\n]);\n\nexport const tools = toolkit.tools;\n","import { createMockWrappedFunction } from \"./utils\";\nimport {\n FORMAT,\n LEVEL,\n Logger,\n createLogger as originalCreateLogger,\n} from \"@jaypie/logger\";\nimport { mockLogFactory } from \"../mockLog.module.js\";\n\nconst mockLog = mockLogFactory();\n\nexport const createLogger = createMockWrappedFunction(\n originalCreateLogger as any,\n mockLog,\n);\n\nexport { FORMAT, LEVEL, Logger };\n\nexport default mockLog;\n","import { createMockReturnedFunction } from \"./utils\";\n\n// Mongoose mock functions\nexport const connect = createMockReturnedFunction(true);\n\nexport const connectFromSecretEnv = createMockReturnedFunction(true);\n\nexport const disconnect = createMockReturnedFunction(true);\n\nexport { mongoose } from \"@jaypie/mongoose\";\n","import { readFile } from \"fs/promises\";\nimport { dirname, join } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { beforeAll } from \"vitest\";\nimport { TextractDocument } from \"amazon-textract-response-parser\";\nimport type { TextractPageAdaptable } from \"@jaypie/textract\";\nimport { createMockWrappedFunction, createMockWrappedObject } from \"./utils\";\nimport * as original from \"@jaypie/textract\";\n\n// Constants for mock values\nconst TAG = \"TEXTRACT\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst MOCK_TEXTRACT_DOCUMENT_PATH = join(__dirname, \"..\", \"mockTextract.json\");\n\n// Setup\nlet mockTextractContents: string;\nbeforeAll(async () => {\n mockTextractContents = await readFile(MOCK_TEXTRACT_DOCUMENT_PATH, \"utf-8\");\n});\n\n/**\n * Mock for MarkdownPage class from @jaypie/textract\n */\nexport const MarkdownPage = createMockWrappedObject(original.MarkdownPage, {\n class: true,\n fallback: () => {\n const mockDocument = new TextractDocument(JSON.parse(mockTextractContents));\n // Double type assertion needed to bridge incompatible types\n return new original.MarkdownPage(\n mockDocument.pageNumber(1) as unknown as TextractPageAdaptable,\n );\n },\n});\n\n/**\n * Mock for textractJsonToMarkdown function from @jaypie/textract\n */\nexport const textractJsonToMarkdown = createMockWrappedFunction<string>(\n original.textractJsonToMarkdown as any,\n `_MOCK_TEXTRACT_JSON_TO_MARKDOWN_[${TAG}]`,\n);\n\n// Export default for convenience\nexport default {\n MarkdownPage,\n textractJsonToMarkdown,\n};\n","// Import all mocks\nimport * as aws from \"./aws\";\nimport * as core from \"./core\";\nimport * as datadog from \"./datadog\";\nimport * as dynamodb from \"./dynamodb\";\nimport * as express from \"./express\";\nimport * as kit from \"./kit\";\nimport * as lambda from \"./lambda\";\nimport * as llm from \"./llm\";\nimport * as logger from \"./logger\";\nimport * as mongoose from \"./mongoose\";\nimport * as textract from \"./textract\";\n\n// Re-export all mocks\nexport * from \"./aws\";\nexport * from \"./core\";\nexport * from \"./datadog\";\nexport * from \"./dynamodb\";\nexport * from \"./express\";\nexport * from \"./kit\";\nexport * from \"./lambda\";\nexport * from \"./llm\";\nexport * from \"./logger\";\nexport * from \"./mongoose\";\nexport * from \"./textract\";\n\n// Export default object with all mocks\nconst mock: Record<string, any> = {\n // AWS module\n ...aws,\n\n // Core module\n ...core,\n\n // Datadog module\n ...datadog,\n\n // DynamoDB module\n ...dynamodb,\n\n // Express module\n ...express,\n\n // Kit module\n ...kit,\n\n // Lambda module\n ...lambda,\n\n // LLM module\n ...llm,\n\n // Logger module\n ...logger,\n\n // Mongoose module\n ...mongoose,\n\n // Textract module\n ...textract,\n};\n\nexport default mock;\n"],"names":["TAG","kit","HTTP","original","BadRequestError","UnhandledError","originalCreateLogger","__filename","__dirname","textract"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/mock/utils.ts","../../../src/mock/aws.ts","../../../src/mockLog.module.ts","../../../src/mock/core.ts","../../../src/mock/datadog.ts","../../../src/mock/dynamodb.ts","../../../src/mock/express.ts","../../../src/mock/kit.ts","../../../src/mock/lambda.ts","../../../src/mock/llm.ts","../../../src/mock/logger.ts","../../../src/mock/mongoose.ts","../../../src/mock/textract.ts","../../../src/mock/index.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { vi } from \"vitest\";\n\nimport { LlmTool } from \"@jaypie/llm\";\n\n/**\n * Internal wrapper for vi.fn() that adds _jaypie: true to all mocks\n */\nfunction _createJaypieMock<T extends (...args: any[]) => any>(\n implementation?: T,\n): ReturnType<typeof vi.fn> {\n const mock = vi.fn(implementation);\n Object.defineProperty(mock, \"_jaypie\", { value: true });\n return mock;\n}\n\n/**\n * Creates function mocks with proper typing\n * Internal utility to create properly typed mocks\n */\nfunction createMockFunction<T extends (...args: any[]) => any>(\n implementation?: (...args: Parameters<T>) => ReturnType<T>,\n): T & { mock: any } {\n // Use a more specific type conversion to avoid TypeScript error\n return _createJaypieMock(implementation) as unknown as T & { mock: any };\n}\n\n/**\n * Creates a mock function that resolves to a value when awaited\n * Internal utility to create async mock functions\n */\nfunction createMockResolvedFunction<T>(value: T): ReturnType<typeof vi.fn> {\n return _createJaypieMock().mockResolvedValue(value);\n}\n\n/**\n * Creates a mock function that returns a value\n * Internal utility to create mock functions that return a value\n */\nfunction createMockReturnedFunction<T>(value: T): ReturnType<typeof vi.fn> {\n return _createJaypieMock().mockReturnValue(value);\n}\n\n/**\n * Creates a mock function that wraps another function\n * Internal utility to create mock functions that wrap another function\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction createMockWrappedFunction<T = any>(\n fn: (...args: unknown[]) => unknown,\n fallbackOrOptions:\n | any\n | {\n fallback?: any;\n throws?: boolean;\n class?: boolean;\n } = \"_MOCK_WRAPPED_RESULT\",\n): ReturnType<typeof vi.fn> {\n // Determine if we have a direct fallback or options object\n const options =\n typeof fallbackOrOptions === \"object\" &&\n fallbackOrOptions !== null &&\n (\"fallback\" in fallbackOrOptions ||\n \"throws\" in fallbackOrOptions ||\n \"class\" in fallbackOrOptions)\n ? fallbackOrOptions\n : { fallback: fallbackOrOptions };\n\n // Extract values with defaults\n const fallback = options.fallback ?? \"_MOCK_WRAPPED_RESULT\";\n const throws = options.throws ?? false;\n const isClass = options.class ?? false;\n\n return _createJaypieMock().mockImplementation((...args: unknown[]) => {\n try {\n return isClass ? new (fn as any)(...args) : fn(...args);\n } catch (error) {\n if (throws) {\n throw error;\n }\n\n console.warn(\n `[@jaypie/testkit] Actual implementation failed. To suppress this warning, manually mock the response with mockReturnValue`,\n );\n if (error instanceof Error) {\n console.warn(`[@jaypie/testkit] ${error.message}`);\n }\n\n // If fallback is a function, call it\n if (typeof fallback === \"function\") {\n try {\n return fallback(...args);\n } catch (fallbackError) {\n console.warn(\n `[@jaypie/testkit] Fallback function failed: ${fallbackError instanceof Error ? fallbackError.message : fallbackError}`,\n );\n return \"_MOCK_WRAPPED_RESULT\";\n }\n }\n\n return fallback;\n }\n });\n}\n\nfunction createMockWrappedObject<T extends Record<string, any>>(\n object: T,\n fallbackOrOptions:\n | any\n | {\n fallback?: any;\n throws?: boolean;\n class?: boolean;\n } = \"_MOCK_WRAPPED_RESULT\",\n): T {\n let returnMock: Record<string, any> = {};\n\n // Extract values with defaults for the top-level call\n const options =\n typeof fallbackOrOptions === \"object\" &&\n fallbackOrOptions !== null &&\n (\"fallback\" in fallbackOrOptions ||\n \"throws\" in fallbackOrOptions ||\n \"class\" in fallbackOrOptions)\n ? fallbackOrOptions\n : { fallback: fallbackOrOptions };\n\n const fallback = options.fallback ?? \"_MOCK_WRAPPED_RESULT\";\n const throws = options.throws ?? false;\n const isClass = options.class ?? false;\n\n // Create options for recursive calls\n // Do not pass down class=true to nested objects\n const recursiveOptions = {\n fallback,\n throws,\n class: false, // Always pass class=false to nested objects\n };\n\n if (typeof object === \"function\") {\n returnMock = createMockWrappedFunction(object, {\n fallback,\n throws,\n class: isClass,\n });\n }\n for (const key of Object.keys(object)) {\n const value = object[key];\n if (typeof value === \"function\") {\n returnMock[key] = createMockWrappedFunction(value, {\n fallback,\n throws,\n class: isClass,\n });\n } else if (typeof value === \"object\" && value !== null) {\n returnMock[key] = createMockWrappedObject(value, recursiveOptions);\n } else {\n returnMock[key] = value;\n }\n }\n return returnMock as T;\n}\n\n/**\n * Utility to create a mock error constructor from an error class\n */\nfunction createMockError<T extends new (...args: any[]) => Error>(\n ErrorClass: T,\n): T {\n // Create a mock constructor that returns a new instance of ErrorClass\n const mockConstructor = _createJaypieMock(function (\n this: any,\n ...args: any[]\n ) {\n return new ErrorClass(...args);\n });\n return mockConstructor as unknown as T;\n}\n\n// Mock core errors - All error classes extend JaypieError\nclass MockValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ValidationError\";\n }\n}\n\nclass MockNotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NotFoundError\";\n }\n}\n\n/**\n * Creates a mock LlmTool for testing purposes\n * @param nameOrCallOrOptions - Name (string), call function, or full options object\n * @param callOrOptions - Call function or options object (when first param is string)\n * @returns Mock LlmTool object\n */\nfunction createMockTool(\n nameOrCallOrOptions?: string | ((...args: any[]) => any) | Partial<LlmTool>,\n callOrOptions?: ((...args: any[]) => any) | Partial<LlmTool>,\n): LlmTool {\n // Default options\n const defaults: LlmTool = {\n name: \"mockTool\",\n description: \"Mock tool for testing\",\n parameters: {},\n type: \"function\",\n call: createMockResolvedFunction({ result: \"MOCK_TOOL\" }),\n message: \"MOCK_TOOL_MESSAGE\",\n };\n\n // Handle different parameter combinations\n if (typeof nameOrCallOrOptions === \"string\") {\n // First parameter is name\n const name = nameOrCallOrOptions;\n\n if (typeof callOrOptions === \"function\") {\n // Second parameter is call function\n return {\n ...defaults,\n name,\n call: callOrOptions,\n };\n } else if (callOrOptions && typeof callOrOptions === \"object\") {\n // Second parameter is options object\n return {\n ...defaults,\n name,\n ...callOrOptions,\n };\n } else {\n // Only name provided\n return {\n ...defaults,\n name,\n };\n }\n } else if (typeof nameOrCallOrOptions === \"function\") {\n // First parameter is call function\n return {\n ...defaults,\n call: nameOrCallOrOptions,\n };\n } else if (nameOrCallOrOptions && typeof nameOrCallOrOptions === \"object\") {\n // First parameter is options object\n return {\n ...defaults,\n ...nameOrCallOrOptions,\n };\n } else {\n // No parameters or invalid parameters\n return defaults;\n }\n}\n\n// Export functions for internal use\nexport {\n createMockFunction,\n createMockResolvedFunction,\n createMockReturnedFunction,\n createMockWrappedFunction,\n createMockWrappedObject,\n MockValidationError,\n MockNotFoundError,\n createMockError,\n createMockTool,\n};\n","import * as original from \"@jaypie/aws\";\nimport {\n createMockFunction,\n createMockResolvedFunction,\n createMockWrappedFunction,\n} from \"./utils\";\n\n// Constants for mock values\nconst TAG = \"AWS\";\n\nexport const getMessages = createMockWrappedFunction(original.getMessages, []);\n\nexport const getS3FileBuffer = createMockFunction<\n ({ bucket, key }: { bucket: string; key: string }) => Promise<Buffer>\n>(async ({ bucket, key }) => Buffer.from(`_MOCK_S3_FILE_[${bucket}/${key}]`));\n\nexport const getSecret = createMockResolvedFunction(\"mock-secret-value\");\n\nexport const sendMessage = createMockResolvedFunction({\n MessageId: \"mock-message-id\",\n});\n\n// Add missing functions from original implementation\nexport const getEnvSecret = createMockFunction<\n (key: string) => Promise<string>\n>(async (key) => `_MOCK_ENV_SECRET_[${TAG}][${key}]`);\n\nexport const loadEnvSecrets = createMockResolvedFunction(undefined);\n\nexport const getSingletonMessage = createMockWrappedFunction(\n original.getSingletonMessage,\n { value: \"_MOCK_SINGLETON_MESSAGE_\" },\n);\n\nexport const getTextractJob = createMockFunction<\n (jobId: string) => Promise<any>\n>(async (job) => ({ value: `_MOCK_TEXTRACT_JOB_[${job}]` }));\n\nexport const sendBatchMessages = createMockResolvedFunction(true);\n\nexport const sendTextractJob = createMockFunction<\n ({\n bucket,\n key,\n featureTypes,\n }: {\n bucket: string;\n key: string;\n featureTypes?: string[];\n snsRoleArn?: string;\n snsTopicArn?: string;\n }) => Promise<any[]>\n>(async ({ bucket, key }) => {\n // Basic validation to mimic original behavior\n if (!bucket || !key) {\n throw new Error(\"Bucket and key are required\");\n }\n return [`_MOCK_TEXTRACT_JOB_ID_[${TAG}]_${bucket}_${key}`];\n});\n\n// Streaming utilities\nexport const formatNljson = createMockFunction<\n (chunk: Record<string, unknown>) => string\n>((chunk) => JSON.stringify(chunk) + \"\\n\");\n\nexport const formatSse = createMockFunction<\n (chunk: { type: string; [key: string]: unknown }) => string\n>((chunk) => `event: ${chunk.type}\\ndata: ${JSON.stringify(chunk)}\\n\\n`);\n\nexport const formatStreamError = createMockFunction<\n (errorBody: Record<string, unknown>, format?: string) => string\n>((errorBody, format = \"sse\") => {\n if (format === \"nljson\") {\n return JSON.stringify({ error: errorBody }) + \"\\n\";\n }\n return `event: error\\ndata: ${JSON.stringify(errorBody)}\\n\\n`;\n});\n\nexport const formatStreamErrorNljson = createMockFunction<\n (errorBody: Record<string, unknown>) => string\n>((errorBody) => JSON.stringify({ error: errorBody }) + \"\\n\");\n\nexport const formatStreamErrorSse = createMockFunction<\n (errorBody: Record<string, unknown>) => string\n>((errorBody) => `event: error\\ndata: ${JSON.stringify(errorBody)}\\n\\n`);\n\nexport const getContentTypeForFormat = createMockFunction<\n (format: string) => string\n>((format) => {\n if (format === \"nljson\") {\n return \"application/x-ndjson\";\n }\n return \"text/event-stream\";\n});\n\nexport const streamToSse = createMockFunction<\n (stream: AsyncIterable<unknown>) => AsyncIterable<string>\n>(async function* (stream) {\n for await (const chunk of stream) {\n yield `event: mock\\ndata: ${JSON.stringify(chunk)}\\n\\n`;\n }\n});\n\nexport const createLambdaStream = createMockFunction<\n (\n stream: AsyncIterable<unknown>,\n writer: { write: (chunk: string) => void; end: () => void },\n ) => Promise<void>\n>(async (stream, writer) => {\n for await (const chunk of stream) {\n writer.write(JSON.stringify(chunk));\n }\n writer.end();\n});\n\nexport const createExpressStream = createMockFunction<\n (\n stream: AsyncIterable<unknown>,\n res: {\n setHeader: (name: string, value: string) => void;\n write: (chunk: string) => boolean;\n end: () => void;\n flushHeaders: () => void;\n },\n ) => Promise<void>\n>(async (stream, res) => {\n res.setHeader(\"Content-Type\", \"text/event-stream\");\n res.flushHeaders();\n for await (const chunk of stream) {\n res.write(JSON.stringify(chunk));\n }\n res.end();\n});\n\n// Mock JaypieStream class\nexport class JaypieStream {\n private readonly source: AsyncIterable<unknown>;\n\n constructor(source: AsyncIterable<unknown>) {\n this.source = source;\n }\n\n async toLambda(writer: {\n write: (chunk: string) => void;\n end: () => void;\n }): Promise<void> {\n for await (const chunk of this.source) {\n writer.write(JSON.stringify(chunk));\n }\n writer.end();\n }\n\n async toExpress(res: {\n setHeader: (name: string, value: string) => void;\n write: (chunk: string) => boolean;\n end: () => void;\n flushHeaders: () => void;\n }): Promise<void> {\n res.setHeader(\"Content-Type\", \"text/event-stream\");\n res.flushHeaders();\n for await (const chunk of this.source) {\n res.write(JSON.stringify(chunk));\n }\n res.end();\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown> {\n return this.source[Symbol.asyncIterator]();\n }\n\n toSse(): AsyncIterable<string> {\n const source = this.source;\n return {\n async *[Symbol.asyncIterator]() {\n for await (const chunk of source) {\n yield `event: mock\\ndata: ${JSON.stringify(chunk)}\\n\\n`;\n }\n },\n };\n }\n}\n\nexport const createJaypieStream = createMockFunction<\n (source: AsyncIterable<unknown>) => JaypieStream\n>((source) => new JaypieStream(source));\n\n// WebSocket utilities\nexport const sendToConnection = createMockFunction<\n (options: {\n callbackUrl?: string;\n connectionId: string;\n data: unknown;\n domainName?: string;\n stage?: string;\n }) => Promise<{ connectionValid: boolean; success: boolean }>\n>(async () => ({ connectionValid: true, success: true }));\n\nexport const broadcastToConnections = createMockFunction<\n (options: {\n callbackUrl?: string;\n connectionIds: string[];\n data: unknown;\n domainName?: string;\n stage?: string;\n }) => Promise<{ staleConnections: string[]; successCount: number }>\n>(async (options) => ({\n staleConnections: [],\n successCount: options?.connectionIds?.length ?? 0,\n}));\n\nexport const clearWebSocketClientCache = createMockFunction<() => void>(\n () => {},\n);\n","import { log } from \"@jaypie/logger\";\nimport { vi } from \"vitest\";\nimport { LogMock } from \"./types/jaypie-testkit\";\n\nexport function mockLogFactory(): LogMock {\n // Create skeleton of mock objects\n const mock = {\n debug: vi.fn(),\n error: vi.fn(),\n fatal: vi.fn(),\n info: vi.fn(),\n init: vi.fn(),\n lib: vi.fn(),\n tag: vi.fn(),\n trace: vi.fn(),\n untag: vi.fn(),\n var: vi.fn(),\n warn: vi.fn(),\n with: vi.fn(),\n } as LogMock;\n\n // Fill out nested mocks\n mock.debug.var = mock.var;\n mock.error.var = mock.var;\n mock.fatal.var = mock.var;\n mock.info.var = mock.var;\n mock.trace.var = mock.var;\n mock.warn.var = mock.var;\n\n // Have modules return correct objects\n mock.init.mockReturnValue(null);\n mock.lib.mockReturnValue(mock);\n mock.with.mockReturnValue(mock);\n\n // Pin mocks to the module\n mock.mock = {\n debug: mock.debug,\n error: mock.error,\n fatal: mock.fatal,\n info: mock.info,\n init: mock.init,\n lib: mock.lib,\n tag: mock.tag,\n trace: mock.trace,\n untag: mock.untag,\n var: mock.var,\n warn: mock.warn,\n with: mock.with,\n };\n\n return mock;\n}\n\nconst LOG_METHOD_NAMES = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"init\",\n \"lib\",\n \"tag\",\n \"trace\",\n \"untag\",\n \"var\",\n \"warn\",\n \"with\",\n] as const;\n\n// Use Record type for more flexible access pattern\nconst originalLogMethods = new WeakMap<typeof log, Record<string, unknown>>();\n\nexport function spyLog(logInstance: typeof log): void {\n if (!originalLogMethods.has(logInstance)) {\n const mockLog = mockLogFactory();\n const originalMethods: Record<string, unknown> = {};\n\n // Save only methods that actually exist on the log instance\n LOG_METHOD_NAMES.forEach((method) => {\n if (method in logInstance) {\n originalMethods[method] =\n logInstance[method as keyof typeof logInstance];\n // Use type assertion after checking existence\n (logInstance as unknown as Record<string, unknown>)[method] =\n mockLog[method];\n }\n });\n\n originalLogMethods.set(logInstance, originalMethods);\n }\n}\n\nexport function restoreLog(logInstance: typeof log): void {\n const originalMethods = originalLogMethods.get(logInstance);\n if (originalMethods) {\n LOG_METHOD_NAMES.forEach((method) => {\n if (method in originalMethods && method in logInstance) {\n // Use type assertion after checking existence\n (logInstance as unknown as Record<string, unknown>)[method] =\n originalMethods[method];\n }\n });\n originalLogMethods.delete(logInstance);\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport {\n createMockError,\n createMockFunction,\n createMockResolvedFunction,\n createMockReturnedFunction,\n createMockWrappedFunction,\n createMockWrappedObject,\n} from \"./utils\";\nimport { beforeAll } from \"vitest\";\nimport { spyLog } from \"../mockLog.module.js\";\nimport { log } from \"@jaypie/logger\";\nimport * as errors from \"@jaypie/errors\";\nimport * as kit from \"@jaypie/kit\";\n\n// Constants for mock values\nconst TAG = \"CORE\";\n\n// JaypieError is the base class - export it directly from errors\nexport const JaypieError = errors.JaypieError;\n\nexport const BadGatewayError: typeof errors.BadGatewayError = createMockError(\n errors.BadGatewayError,\n);\nexport const BadRequestError: typeof errors.BadRequestError = createMockError(\n errors.BadRequestError,\n);\nexport const ConfigurationError: typeof errors.ConfigurationError =\n createMockError(errors.ConfigurationError);\nexport const CorsError: typeof errors.CorsError = createMockError(\n errors.CorsError,\n);\nexport const ForbiddenError: typeof errors.ForbiddenError = createMockError(\n errors.ForbiddenError,\n);\nexport const GatewayTimeoutError: typeof errors.GatewayTimeoutError =\n createMockError(errors.GatewayTimeoutError);\nexport const GoneError: typeof errors.GoneError = createMockError(\n errors.GoneError,\n);\nexport const IllogicalError: typeof errors.IllogicalError = createMockError(\n errors.IllogicalError,\n);\nexport const InternalError: typeof errors.InternalError = createMockError(\n errors.InternalError,\n);\nexport const MethodNotAllowedError: typeof errors.MethodNotAllowedError =\n createMockError(errors.MethodNotAllowedError);\n// Backwards compatibility aliases\nexport const MultiError: typeof errors.InternalError = createMockError(\n errors.InternalError,\n);\nexport const NotFoundError: typeof errors.NotFoundError = createMockError(\n errors.NotFoundError,\n);\nexport const NotImplementedError: typeof errors.NotImplementedError =\n createMockError(errors.NotImplementedError);\nexport const ProjectError: typeof errors.InternalError = createMockError(\n errors.InternalError,\n);\nexport const ProjectMultiError: typeof errors.InternalError = createMockError(\n errors.InternalError,\n);\nexport const RejectedError: typeof errors.RejectedError = createMockError(\n errors.RejectedError,\n);\nexport const TeapotError: typeof errors.TeapotError = createMockError(\n errors.TeapotError,\n);\nexport const TooManyRequestsError: typeof errors.TooManyRequestsError =\n createMockError(errors.TooManyRequestsError);\nexport const UnauthorizedError: typeof errors.UnauthorizedError =\n createMockError(errors.UnauthorizedError);\nexport const UnavailableError: typeof errors.UnavailableError = createMockError(\n errors.UnavailableError,\n);\nexport const UnhandledError: typeof errors.UnhandledError = createMockError(\n errors.UnhandledError,\n);\nexport const UnreachableCodeError: typeof errors.UnreachableCodeError =\n createMockError(errors.UnreachableCodeError);\n\nbeforeAll(async () => {\n spyLog(log);\n});\nexport { log };\n\n// Add missing core functions\nexport const cloneDeep = createMockWrappedFunction(kit.cloneDeep, {\n throws: true,\n});\n\nexport const envBoolean = createMockReturnedFunction(true);\n\nexport const envsKey = createMockWrappedFunction(\n kit.envsKey as (...args: unknown[]) => unknown,\n `_MOCK_ENVS_KEY_[${TAG}]`,\n);\n\nexport const errorFromStatusCode = createMockFunction<\n (statusCode: number, message?: string) => Error\n>((statusCode, message = `Mock error for status code ${statusCode}`) => {\n try {\n // Try to mimic original implementation\n switch (statusCode) {\n case 400:\n return new BadRequestError(message);\n case 401:\n return new UnauthorizedError(message);\n case 403:\n return new ForbiddenError(message);\n case 404:\n return new NotFoundError(message);\n case 405:\n return new MethodNotAllowedError(message);\n case 410:\n return new GoneError(message);\n case 418:\n return new TeapotError(message);\n case 500:\n return new InternalError(message);\n case 501:\n return new NotImplementedError(message);\n case 502:\n return new BadGatewayError(message);\n case 503:\n return new UnavailableError(message);\n case 504:\n return new GatewayTimeoutError(message);\n default:\n return new Error(message);\n }\n } catch {\n return new Error(`_MOCK_ERROR_FROM_STATUS_CODE_[${TAG}][${statusCode}]`);\n }\n});\n\nexport const formatError = createMockWrappedFunction(\n kit.formatError as (...args: unknown[]) => unknown,\n `_MOCK_FORMAT_ERROR_[${TAG}]`,\n);\n\n// Alias for errorFromStatusCode (exported from @jaypie/errors as jaypieErrorFromStatus)\nexport const jaypieErrorFromStatus = errorFromStatusCode;\n\nexport const getHeaderFrom = createMockWrappedFunction(\n kit.getHeaderFrom as (...args: unknown[]) => unknown,\n `_MOCK_GET_HEADER_FROM_[${TAG}]`,\n);\n\nexport const getObjectKeyCaseInsensitive = createMockWrappedFunction(\n kit.getObjectKeyCaseInsensitive as (...args: unknown[]) => unknown,\n `_MOCK_GET_OBJECT_KEY_CASE_INSENSITIVE_[${TAG}]`,\n);\n\nexport const isClass = createMockWrappedFunction(\n kit.isClass,\n `_MOCK_IS_CLASS_[${TAG}]`,\n);\n\nexport const isJaypieError = createMockWrappedFunction(\n errors.isJaypieError,\n false,\n);\n\nexport const resolveValue = createMockWrappedFunction(\n kit.resolveValue,\n `_MOCK_RESOLVE_VALUE_[${TAG}]`,\n);\n\nexport const safeParseFloat = createMockWrappedFunction(\n kit.safeParseFloat as (...args: unknown[]) => unknown,\n `_MOCK_SAFE_PARSE_FLOAT_[${TAG}]`,\n);\n\nexport const placeholders = createMockWrappedFunction(\n kit.placeholders as (...args: unknown[]) => unknown,\n `_MOCK_PLACEHOLDERS_[${TAG}]`,\n);\n\n// Add force utilities to help with jaypieHandler implementation\nexport const force = createMockWrappedObject(kit.force);\n\nexport const jaypieHandler = createMockFunction<\n (\n handler: Function,\n options?: {\n setup?: Function | Function[];\n teardown?: Function | Function[];\n unavailable?: boolean;\n validate?: Function | Function[];\n },\n ) => Function\n>((handler, options = {}) => {\n return async (...args: any[]) => {\n let result;\n let thrownError;\n\n // Destructure options with defaults\n const {\n setup = [],\n teardown = [],\n unavailable = kit.force.boolean(process.env.PROJECT_UNAVAILABLE),\n validate = [],\n } = options;\n\n // Check if service is unavailable\n if (unavailable) throw new UnavailableError(\"Service unavailable\");\n\n // Run validation functions\n const validateFunctions = kit.force.array(validate);\n for (const validator of validateFunctions) {\n if (typeof validator === \"function\") {\n const valid = await validator(...args);\n if (valid === false) {\n throw new BadRequestError(\"Validation failed\");\n }\n }\n }\n\n try {\n // Run setup functions\n const setupFunctions = kit.force.array(setup);\n for (const setupFunction of setupFunctions) {\n if (typeof setupFunction === \"function\") {\n await setupFunction(...args);\n }\n }\n\n // Execute the handler\n result = await handler(...args);\n } catch (error) {\n thrownError = error;\n }\n\n // Run teardown functions (always run even if there was an error)\n const teardownFunctions = kit.force.array(teardown);\n for (const teardownFunction of teardownFunctions) {\n if (typeof teardownFunction === \"function\") {\n try {\n await teardownFunction(...args);\n } catch (teardownError) {\n // Swallow teardown errors, but log them\n // eslint-disable-next-line no-console\n console.error(teardownError);\n }\n }\n }\n\n // If there was an error in the handler, throw it after teardown\n if (thrownError) {\n throw thrownError;\n }\n\n return result;\n };\n});\n\nexport const sleep = createMockResolvedFunction(true);\n\nexport const uuid = createMockWrappedFunction(\n () => \"00000000-0000-0000-0000-000000000000\",\n `00000000-0000-0000-0000-000000000000`,\n);\n\nexport const HTTP = kit.HTTP;\nexport const JAYPIE = kit.JAYPIE;\nexport const PROJECT = kit.PROJECT;\n","import { createMockResolvedFunction, createMockWrappedFunction } from \"./utils\";\n\nimport * as original from \"@jaypie/datadog\";\n\nexport const DATADOG = original.DATADOG;\nexport const hasDatadogEnv = createMockWrappedFunction(\n original.hasDatadogEnv,\n false,\n);\nexport const submitDistribution = createMockResolvedFunction(true);\nexport const submitMetric = createMockResolvedFunction(true);\nexport const submitMetricSet = createMockResolvedFunction(true);\n","import * as original from \"@jaypie/dynamodb\";\nimport type {\n BaseQueryOptions,\n DynamoClientConfig,\n ExportResult,\n ParentReference,\n QueryParams,\n QueryResult,\n SeedOptions,\n SeedResult,\n StorableEntity,\n} from \"@jaypie/dynamodb\";\nimport type { IndexableModel, IndexDefinition } from \"@jaypie/fabric\";\n\nimport { createMockFunction, createMockResolvedFunction } from \"./utils\";\n\n// Re-export constants (no need to mock, just pass through)\nexport const APEX = original.APEX;\nexport const ARCHIVED_SUFFIX = original.ARCHIVED_SUFFIX;\nexport const DEFAULT_INDEXES: IndexDefinition[] = original.DEFAULT_INDEXES;\nexport const DELETED_SUFFIX = original.DELETED_SUFFIX;\nexport const INDEX_ALIAS = original.INDEX_ALIAS;\nexport const INDEX_CATEGORY = original.INDEX_CATEGORY;\nexport const INDEX_SCOPE = original.INDEX_SCOPE;\nexport const INDEX_TYPE = original.INDEX_TYPE;\nexport const INDEX_XID = original.INDEX_XID;\nexport const SEPARATOR = original.SEPARATOR;\n\n// Key builder functions - use createMockFunction with typed implementations\nexport const buildCompositeKey = createMockFunction<\n (\n entity: Record<string, unknown> & { model: string },\n fields: string[],\n suffix?: string,\n ) => string\n>((entity, fields, suffix) =>\n original.buildCompositeKey(entity, fields, suffix),\n);\n\nexport const buildIndexAlias = createMockFunction<\n (scope: string, model: string, alias: string) => string\n>((scope, model, alias) => original.buildIndexAlias(scope, model, alias));\n\nexport const buildIndexCategory = createMockFunction<\n (scope: string, model: string, category: string) => string\n>((scope, model, category) =>\n original.buildIndexCategory(scope, model, category),\n);\n\nexport const buildIndexScope = createMockFunction<\n (scope: string, model: string) => string\n>((scope, model) => original.buildIndexScope(scope, model));\n\nexport const buildIndexType = createMockFunction<\n (scope: string, model: string, type: string) => string\n>((scope, model, type) => original.buildIndexType(scope, model, type));\n\nexport const buildIndexXid = createMockFunction<\n (scope: string, model: string, xid: string) => string\n>((scope, model, xid) => original.buildIndexXid(scope, model, xid));\n\nexport const calculateScope = createMockFunction<\n (parent?: ParentReference) => string\n>((parent) => original.calculateScope(parent));\n\nexport const indexEntity = createMockFunction<\n <T extends StorableEntity>(entity: T, suffix?: string) => T\n>(<T extends StorableEntity>(entity: T, suffix?: string) =>\n original.indexEntity(entity, suffix),\n);\n\n// Client functions\nexport const initClient = createMockFunction<\n (config: DynamoClientConfig) => void\n>(() => {\n // No-op in mock\n});\n\nexport const getDocClient = createMockFunction(() => ({\n send: createMockResolvedFunction({ Items: [] }),\n}));\n\nexport const getTableName = createMockFunction(() => \"mock-table\");\n\nexport const isInitialized = createMockFunction(() => true);\n\nexport const resetClient = createMockFunction(() => {\n // No-op in mock\n});\n\n// Entity operations - service handler pattern (callable with object params)\nexport const getEntity = createMockFunction<\n (params: { id: string; model: string }) => Promise<StorableEntity | null>\n>(async () => null);\n\nexport const putEntity = createMockFunction<\n (params: { entity: StorableEntity }) => Promise<StorableEntity>\n>(async (params: { entity: StorableEntity }) =>\n original.indexEntity(params.entity),\n);\n\nexport const updateEntity = createMockFunction<\n (params: { entity: StorableEntity }) => Promise<StorableEntity>\n>(async (params: { entity: StorableEntity }) => ({\n ...original.indexEntity(params.entity),\n updatedAt: new Date().toISOString(),\n}));\n\nexport const deleteEntity = createMockFunction<\n (params: { id: string; model: string }) => Promise<boolean>\n>(async () => true);\n\nexport const archiveEntity = createMockFunction<\n (params: { id: string; model: string }) => Promise<boolean>\n>(async () => true);\n\nexport const destroyEntity = createMockFunction<\n (params: { id: string; model: string }) => Promise<boolean>\n>(async () => true);\n\n// Query functions - service handler pattern (callable with object params)\nexport const queryByScope = createMockFunction<\n (params: {\n model: string;\n scope: string;\n archived?: boolean;\n ascending?: boolean;\n deleted?: boolean;\n limit?: number;\n startKey?: Record<string, unknown>;\n }) => Promise<QueryResult<StorableEntity>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\nexport const queryByAlias = createMockFunction<\n (params: {\n alias: string;\n archived?: boolean;\n deleted?: boolean;\n model: string;\n scope: string;\n }) => Promise<StorableEntity | null>\n>(async () => null);\n\nexport const queryByCategory = createMockFunction<\n (params: {\n archived?: boolean;\n ascending?: boolean;\n category: string;\n deleted?: boolean;\n limit?: number;\n model: string;\n scope: string;\n startKey?: Record<string, unknown>;\n }) => Promise<QueryResult<StorableEntity>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\nexport const queryByType = createMockFunction<\n (params: {\n archived?: boolean;\n ascending?: boolean;\n deleted?: boolean;\n limit?: number;\n model: string;\n scope: string;\n startKey?: Record<string, unknown>;\n type: string;\n }) => Promise<QueryResult<StorableEntity>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\nexport const queryByXid = createMockFunction<\n (params: {\n archived?: boolean;\n deleted?: boolean;\n model: string;\n scope: string;\n xid: string;\n }) => Promise<StorableEntity | null>\n>(async () => null);\n\n// Unified query function with auto-detect\nexport const query = createMockFunction<\n <T extends StorableEntity = StorableEntity>(params: {\n archived?: boolean;\n ascending?: boolean;\n deleted?: boolean;\n filter?: Partial<T>;\n limit?: number;\n model: string;\n scope?: string;\n startKey?: Record<string, unknown>;\n }) => Promise<QueryResult<T>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\n// Seed and export utilities\nexport const seedEntityIfNotExists = createMockFunction<\n <T extends Partial<StorableEntity>>(entity: T) => Promise<boolean>\n>(async () => true);\n\nexport const seedEntities = createMockFunction<\n <T extends Partial<StorableEntity>>(\n entities: T[],\n options?: SeedOptions,\n ) => Promise<SeedResult>\n>(async () => ({\n created: [],\n errors: [],\n skipped: [],\n}));\n\nexport const exportEntities = createMockFunction<\n <T extends StorableEntity>(\n model: string,\n scope: string,\n limit?: number,\n ) => Promise<ExportResult<T>>\n>(async () => ({\n count: 0,\n entities: [],\n}));\n\nexport const exportEntitiesToJson = createMockFunction<\n (model: string, scope: string, pretty?: boolean) => Promise<string>\n>(async () => \"[]\");\n\n// Re-export types for convenience\nexport type {\n BaseQueryOptions,\n ExportResult,\n ParentReference,\n QueryParams,\n QueryResult,\n SeedOptions,\n SeedResult,\n StorableEntity,\n};\nexport type { IndexableModel };\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport {\n createMockFunction,\n createMockReturnedFunction,\n createMockWrappedFunction,\n} from \"./utils\";\nimport { BadRequestError, UnhandledError } from \"@jaypie/errors\";\nimport { force, jaypieHandler } from \"./core\";\nimport * as original from \"@jaypie/express\";\n\n// Constants for mock values\nconst TAG = \"EXPRESS\";\nconst HTTP = {\n CODE: { OK: 200, CREATED: 201, NO_CONTENT: 204, INTERNAL_ERROR: 500 },\n};\n\n// Re-export Lambda adapter classes directly (these are not mocked)\nexport const createLambdaHandler = createMockWrappedFunction(\n original.createLambdaHandler as (...args: unknown[]) => unknown,\n);\nexport const createLambdaStreamHandler = createMockWrappedFunction(\n original.createLambdaStreamHandler as (...args: unknown[]) => unknown,\n);\nexport const getCurrentInvoke = createMockReturnedFunction<{\n context: unknown;\n event: unknown;\n}>({ context: undefined, event: undefined });\nexport const LambdaRequest = original.LambdaRequest;\nexport const LambdaResponseBuffered = original.LambdaResponseBuffered;\nexport const LambdaResponseStreaming = original.LambdaResponseStreaming;\n\nexport const EXPRESS = original.EXPRESS;\n\n// Add Express route functions\nexport const badRequestRoute = createMockWrappedFunction(\n original.badRequestRoute as (...args: unknown[]) => unknown,\n { error: `_MOCK_BAD_REQUEST_ROUTE_[${TAG}]` },\n);\n\nexport const echoRoute = createMockWrappedFunction(\n original.echoRoute as (...args: unknown[]) => unknown,\n (req: unknown) => req,\n);\n\nexport const forbiddenRoute = createMockWrappedFunction(\n original.forbiddenRoute as (...args: unknown[]) => unknown,\n { error: `_MOCK_FORBIDDEN_ROUTE_[${TAG}]` },\n);\n\nexport const goneRoute = createMockWrappedFunction(\n original.goneRoute as (...args: unknown[]) => unknown,\n {\n error: `_MOCK_GONE_ROUTE_[${TAG}]`,\n },\n);\n\nexport const methodNotAllowedRoute = createMockWrappedFunction(\n original.methodNotAllowedRoute as (...args: unknown[]) => unknown,\n { error: `_MOCK_METHOD_NOT_ALLOWED_ROUTE_[${TAG}]` },\n);\n\nexport const noContentRoute = createMockWrappedFunction(\n original.noContentRoute as (...args: unknown[]) => unknown,\n { status: 204 },\n);\n\nexport const notFoundRoute = createMockWrappedFunction(\n original.notFoundRoute as (...args: unknown[]) => unknown,\n {\n error: `_MOCK_NOT_FOUND_ROUTE_[${TAG}]`,\n },\n);\n\nexport const notImplementedRoute = createMockWrappedFunction(\n original.notImplementedRoute as any,\n { error: `_MOCK_NOT_IMPLEMENTED_ROUTE_[${TAG}]` },\n);\n\nexport const expressHttpCodeHandler = createMockWrappedFunction(\n original.expressHttpCodeHandler as any,\n (...args: any[]) => {\n const [, res] = args;\n return res.status(200).send();\n },\n);\n\nexport const cors = createMockWrappedFunction(original.cors as any);\n\nexport const getCurrentInvokeUuid = createMockReturnedFunction<\n string | undefined\n>(\"mock-invoke-uuid-12345678\");\n\n// Type definitions needed for the expressHandler\ninterface WithJsonFunction {\n json: () => any;\n}\n\nexport interface ExpressHandlerFunction {\n (req: any, res: any, ...extra: any[]): Promise<any> | any;\n}\n\nexport interface ExpressHandlerOptions {\n locals?: Record<string, any>;\n setup?: any[] | Function;\n teardown?: any[] | Function;\n unavailable?: boolean;\n validate?: any[] | Function;\n}\n\ntype ExpressHandlerParameter = ExpressHandlerFunction | ExpressHandlerOptions;\n\nexport interface ExpressStreamHandlerOptions {\n locals?: Record<string, any>;\n setup?: any[] | Function;\n teardown?: any[] | Function;\n unavailable?: boolean;\n validate?: any[] | Function;\n contentType?: string;\n}\n\nexport type ExpressStreamHandlerFunction = (\n req: any,\n res: any,\n ...extra: any[]\n) => Promise<void>;\n\ntype ExpressStreamHandlerParameter =\n | ExpressStreamHandlerFunction\n | ExpressStreamHandlerOptions;\n\nexport const expressStreamHandler = createMockFunction<\n (\n handlerOrProps: ExpressStreamHandlerParameter,\n propsOrHandler?: ExpressStreamHandlerParameter,\n ) => (req: any, res: any, ...extra: any[]) => Promise<void>\n>((handlerOrProps, propsOrHandler) => {\n let handler: ExpressStreamHandlerFunction;\n let props: ExpressStreamHandlerOptions;\n\n if (\n typeof handlerOrProps === \"object\" &&\n typeof propsOrHandler === \"function\"\n ) {\n handler = propsOrHandler;\n props = handlerOrProps;\n } else if (typeof handlerOrProps === \"function\") {\n handler = handlerOrProps;\n props = (propsOrHandler || {}) as ExpressStreamHandlerOptions;\n } else {\n throw new BadRequestError(\"handler must be a function\");\n }\n\n return async (req = {}, res: any = {}, ...extra: unknown[]) => {\n // Set SSE headers if res has setHeader method\n if (typeof res.setHeader === \"function\") {\n res.setHeader(\"Content-Type\", props.contentType || \"text/event-stream\");\n res.setHeader(\"Cache-Control\", \"no-cache\");\n res.setHeader(\"Connection\", \"keep-alive\");\n res.setHeader(\"X-Accel-Buffering\", \"no\");\n if (typeof res.flushHeaders === \"function\") {\n res.flushHeaders();\n }\n }\n\n try {\n await handler(req, res, ...extra);\n } finally {\n // End the response if possible\n if (typeof res.end === \"function\") {\n try {\n res.end();\n } catch {\n // Response may already be ended\n }\n }\n }\n };\n});\n\nexport const expressHandler = createMockFunction<\n (\n handlerOrProps: ExpressHandlerParameter,\n propsOrHandler?: ExpressHandlerParameter,\n ) => (req: any, res: any, ...extra: any[]) => Promise<any>\n>((handlerOrProps, propsOrHandler) => {\n let handler: ExpressHandlerFunction;\n let props: ExpressHandlerOptions;\n\n if (\n typeof handlerOrProps === \"object\" &&\n typeof propsOrHandler === \"function\"\n ) {\n handler = propsOrHandler;\n props = handlerOrProps;\n } else if (typeof handlerOrProps === \"function\") {\n handler = handlerOrProps;\n props = (propsOrHandler || {}) as ExpressHandlerOptions;\n } else {\n throw new BadRequestError(\"handler must be a function\");\n }\n\n // Add locals setup if needed\n if (\n props.locals &&\n typeof props.locals === \"object\" &&\n !Array.isArray(props.locals)\n ) {\n const keys = Object.keys(props.locals);\n if (!props.setup) props.setup = [];\n props.setup = force.array(props.setup);\n props.setup.unshift((req: { locals?: Record<string, unknown> }) => {\n if (!req || typeof req !== \"object\") {\n throw new BadRequestError(\"req must be an object\");\n }\n // Set req.locals if it doesn't exist\n if (!req.locals) req.locals = {};\n if (typeof req.locals !== \"object\" || Array.isArray(req.locals)) {\n throw new BadRequestError(\"req.locals must be an object\");\n }\n if (!req.locals._jaypie) req.locals._jaypie = {};\n });\n const localsSetup = async (\n localsReq: { locals: Record<string, unknown> },\n localsRes: unknown,\n ) => {\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n if (typeof props.locals![key] === \"function\") {\n localsReq.locals[key] = await props.locals![key](\n localsReq,\n localsRes,\n );\n } else {\n localsReq.locals[key] = props.locals![key];\n }\n }\n };\n props.setup.push(localsSetup);\n }\n if (props.locals && typeof props.locals !== \"object\") {\n throw new BadRequestError(\"props.locals must be an object\");\n }\n if (props.locals && Array.isArray(props.locals)) {\n throw new BadRequestError(\"props.locals must be an object\");\n }\n if (props.locals === null) {\n throw new BadRequestError(\"props.locals must be an object\");\n }\n\n const jaypieFunction = jaypieHandler(handler, props);\n return async (req = {}, res = {}, ...extra: unknown[]) => {\n const status = HTTP.CODE.OK;\n let response;\n let supertestMode = false;\n\n if (\n res &&\n typeof res === \"object\" &&\n \"socket\" in res &&\n res.constructor.name === \"ServerResponse\"\n ) {\n // Use the response object in supertest mode\n supertestMode = true;\n }\n\n try {\n response = await jaypieFunction(req, res, ...extra);\n } catch (error: any) {\n // In the mock context, if status is a function we are in a \"supertest\"\n if (supertestMode && typeof res.status === \"function\") {\n // In theory jaypieFunction has handled all errors\n const errorStatus = error?.status || HTTP.CODE.INTERNAL_ERROR;\n let errorResponse;\n if (typeof error?.json === \"function\") {\n errorResponse = error.json();\n } else {\n // This should never happen\n errorResponse = new UnhandledError().json();\n }\n res.status(errorStatus).json(errorResponse);\n return;\n } else {\n // else, res.status is not a function, throw the error\n throw error;\n }\n }\n\n if (supertestMode && typeof res.status === \"function\") {\n if (response) {\n if (typeof response === \"object\") {\n if (typeof (response as WithJsonFunction).json === \"function\") {\n res.json((response as WithJsonFunction).json());\n } else {\n res.status(status).json(response);\n }\n } else if (typeof response === \"string\") {\n try {\n res.status(status).json(JSON.parse(response));\n } catch {\n res.status(status).send(response);\n }\n } else if (response === true) {\n res.status(HTTP.CODE.CREATED).send();\n } else {\n res.status(status).send(response);\n }\n } else {\n res.status(HTTP.CODE.NO_CONTENT).send();\n }\n } else {\n return response;\n }\n };\n});\n","import { createMockReturnedFunction } from \"./utils\";\n\nexport const isLocalEnv = createMockReturnedFunction(false);\n\nexport const isNodeTestEnv = createMockReturnedFunction(true);\n\nexport const isProductionEnv = createMockReturnedFunction(false);\n","import { createMockFunction } from \"./utils\";\nimport { jaypieHandler } from \"./core\";\n\n// We'll use more specific types instead of Function\ntype HandlerFunction = (...args: unknown[]) => unknown;\ntype LifecycleFunction = (...args: unknown[]) => unknown | Promise<unknown>;\n\nexport interface LambdaOptions {\n name?: string;\n setup?: LifecycleFunction | LifecycleFunction[];\n teardown?: LifecycleFunction | LifecycleFunction[];\n throw?: boolean;\n unavailable?: boolean;\n validate?: LifecycleFunction | LifecycleFunction[];\n [key: string]: unknown;\n}\n\n// Mock implementation of lambdaHandler that follows the original implementation pattern\nexport const lambdaHandler = createMockFunction<\n (handler: HandlerFunction, props?: LambdaOptions) => HandlerFunction\n>((handler, props = {}) => {\n // If handler is an object and options is a function, swap them\n if (typeof handler === \"object\" && typeof props === \"function\") {\n const temp = handler;\n handler = props;\n props = temp;\n }\n return async (event: unknown, context: unknown, ...extra: unknown[]) => {\n return jaypieHandler(handler, props)(event, context, ...extra);\n };\n});\n\n// Mock stream handler function type\ntype StreamHandlerFunction = (\n event: unknown,\n responseStream: { write: (data: string) => void; end: () => void },\n context: unknown,\n ...extra: unknown[]\n) => Promise<void>;\n\n// Mock implementation of lambdaStreamHandler\nexport const lambdaStreamHandler = createMockFunction<\n (\n handler: StreamHandlerFunction,\n props?: LambdaOptions,\n ) => StreamHandlerFunction\n>((handler, props = {}) => {\n // If handler is an object and options is a function, swap them\n if (typeof handler === \"object\" && typeof props === \"function\") {\n const temp = handler;\n handler = props;\n props = temp;\n }\n return async (\n event: unknown,\n responseStream: { write: (data: string) => void; end: () => void },\n context: unknown,\n ...extra: unknown[]\n ) => {\n try {\n await handler(event, responseStream, context, ...extra);\n } finally {\n try {\n responseStream.end();\n } catch {\n // Response stream may already be ended\n }\n }\n };\n});\n\n// Mock WebSocket handler function type\ntype WebSocketHandlerFunction = (\n event: unknown,\n context: WebSocketContext,\n ...extra: unknown[]\n) => Promise<WebSocketResponse>;\n\n// Mock WebSocket context\nexport interface WebSocketContext {\n awsRequestId?: string;\n body: string | null;\n broadcast: (\n connectionIds: string[],\n data: unknown,\n ) => Promise<{ staleConnections: string[]; successCount: number }>;\n connectionId: string;\n domainName: string;\n queryStringParameters: Record<string, string> | null;\n routeKey: string;\n send: (\n data: unknown,\n ) => Promise<{ connectionValid: boolean; success: boolean }>;\n stage: string;\n}\n\n// Mock WebSocket response\nexport interface WebSocketResponse {\n body?: string;\n statusCode: number;\n}\n\n// Mock implementation of websocketHandler\nexport const websocketHandler = createMockFunction<\n (\n handler: WebSocketHandlerFunction,\n props?: LambdaOptions,\n ) => (\n event: unknown,\n context?: unknown,\n ...args: unknown[]\n ) => Promise<WebSocketResponse>\n>((handler, props = {}) => {\n // If handler is an object and options is a function, swap them\n if (typeof handler === \"object\" && typeof props === \"function\") {\n const temp = handler;\n handler = props;\n props = temp;\n }\n return async (event: unknown, context: unknown = {}, ...extra: unknown[]) => {\n // Create a mock WebSocket context\n const wsContext: WebSocketContext = {\n awsRequestId: (context as Record<string, string>)?.awsRequestId,\n body: (event as Record<string, string | null>)?.body ?? null,\n broadcast: async () => ({ staleConnections: [], successCount: 0 }),\n connectionId: \"mock-connection-id\",\n domainName: \"ws.example.com\",\n queryStringParameters:\n ((event as Record<string, unknown>)?.queryStringParameters as Record<\n string,\n string\n >) ?? null,\n routeKey:\n (\n (event as Record<string, unknown>)?.requestContext as Record<\n string,\n string\n >\n )?.routeKey ?? \"$default\",\n send: async () => ({ connectionValid: true, success: true }),\n stage: \"production\",\n };\n return handler(event, wsContext, ...extra);\n };\n});\n","import { vi } from \"vitest\";\nimport {\n createMockResolvedFunction,\n createMockReturnedFunction,\n createMockTool,\n createMockWrappedObject,\n} from \"./utils\";\n\nimport * as original from \"@jaypie/llm\";\n\nexport const LLM = original.LLM;\n\nconst mockOperate = createMockResolvedFunction({\n content: \"_MOCK_OUTPUT_TEXT\",\n fallbackAttempts: 1,\n fallbackUsed: false,\n history: [\n {\n content: \"_MOCK_USER_INPUT\",\n role: \"user\",\n type: \"message\",\n },\n {\n id: \"_MOCK_MESSAGE_ID\",\n type: \"message\",\n status: \"completed\",\n content: \"_MOCK_CONTENT\",\n role: \"assistant\",\n },\n ],\n model: \"_MOCK_MODEL\",\n output: [\n {\n id: \"_MOCK_MESSAGE_ID\",\n type: \"message\",\n status: \"completed\",\n content: \"_MOCK_CONTENT\",\n role: \"assistant\",\n },\n ],\n provider: \"_MOCK_PROVIDER\",\n reasoning: [],\n responses: [\n {\n id: \"_MOCK_RESPONSE_ID\",\n object: \"response\",\n created_at: Date.now() / 1000,\n status: \"completed\",\n error: null,\n output_text: \"_MOCK_OUTPUT_TEXT\",\n },\n ],\n status: \"completed\",\n usage: [\n {\n input: 100,\n output: 20,\n reasoning: 0,\n total: 120,\n provider: \"_MOCK_PROVIDER\",\n model: \"_MOCK_MODEL\",\n },\n ],\n});\nconst mockSend = createMockResolvedFunction(\"_MOCK_LLM_RESPONSE\");\nexport const Llm = Object.assign(\n vi.fn().mockImplementation((providerName = \"_MOCK_LLM_PROVIDER\") => ({\n _provider: providerName,\n _llm: {\n operate: mockOperate,\n send: mockSend,\n },\n operate: mockOperate,\n send: mockSend,\n })),\n {\n operate: mockOperate,\n send: mockSend,\n },\n);\n\n// Tool implementations - always return mock values\nconst random = createMockTool(\"random\", createMockReturnedFunction(0.5));\n\nconst roll = createMockTool(\"roll\", createMockReturnedFunction(6));\n\nconst time = createMockTool(\"time\", createMockReturnedFunction(`_MOCK_TIME`));\n\nconst weather = createMockTool(\n \"weather\",\n createMockResolvedFunction({\n location: `_MOCK_WEATHER_LOCATION`,\n forecast: [{ conditions: \"good\" }],\n }),\n);\n\nexport const Toolkit = createMockWrappedObject(original.Toolkit, {\n isClass: true,\n});\n\nexport const JaypieToolkit = createMockWrappedObject(original.JaypieToolkit, {\n isClass: true,\n});\n\nexport const LlmMessageRole = createMockWrappedObject(original.LlmMessageRole, {\n isClass: true,\n});\nexport const LlmMessageType = createMockWrappedObject(original.LlmMessageType, {\n isClass: true,\n});\nexport const LlmStreamChunkType = createMockWrappedObject(\n original.LlmStreamChunkType,\n {\n isClass: true,\n },\n);\n\n// Provider mocks\nexport const GeminiProvider = createMockWrappedObject(original.GeminiProvider, {\n isClass: true,\n});\nexport const OpenRouterProvider = createMockWrappedObject(\n original.OpenRouterProvider,\n {\n isClass: true,\n },\n);\n\n// Type guards and utilities - re-export from original (these are pure functions)\nexport const extractReasoning = original.extractReasoning;\nexport const isLlmOperateInput = original.isLlmOperateInput;\nexport const isLlmOperateInputContent = original.isLlmOperateInputContent;\nexport const isLlmOperateInputFile = original.isLlmOperateInputFile;\nexport const isLlmOperateInputImage = original.isLlmOperateInputImage;\n\n// Tool collections\nexport const toolkit = new original.JaypieToolkit([\n random,\n roll,\n time,\n weather,\n]);\n\nexport const tools = toolkit.tools;\n","import { createMockWrappedFunction } from \"./utils\";\nimport {\n FORMAT,\n LEVEL,\n Logger,\n createLogger as originalCreateLogger,\n} from \"@jaypie/logger\";\nimport { mockLogFactory } from \"../mockLog.module.js\";\n\nconst mockLog = mockLogFactory();\n\nexport const createLogger = createMockWrappedFunction(\n originalCreateLogger as any,\n mockLog,\n);\n\nexport { FORMAT, LEVEL, Logger };\n\nexport default mockLog;\n","import { createMockReturnedFunction } from \"./utils\";\n\n// Mongoose mock functions\nexport const connect = createMockReturnedFunction(true);\n\nexport const connectFromSecretEnv = createMockReturnedFunction(true);\n\nexport const disconnect = createMockReturnedFunction(true);\n\nexport { mongoose } from \"@jaypie/mongoose\";\n","import { readFile } from \"fs/promises\";\nimport { dirname, join } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { beforeAll } from \"vitest\";\nimport { TextractDocument } from \"amazon-textract-response-parser\";\nimport type { TextractPageAdaptable } from \"@jaypie/textract\";\nimport { createMockWrappedFunction, createMockWrappedObject } from \"./utils\";\nimport * as original from \"@jaypie/textract\";\n\n// Constants for mock values\nconst TAG = \"TEXTRACT\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nconst MOCK_TEXTRACT_DOCUMENT_PATH = join(__dirname, \"..\", \"mockTextract.json\");\n\n// Setup\nlet mockTextractContents: string;\nbeforeAll(async () => {\n mockTextractContents = await readFile(MOCK_TEXTRACT_DOCUMENT_PATH, \"utf-8\");\n});\n\n/**\n * Mock for MarkdownPage class from @jaypie/textract\n */\nexport const MarkdownPage = createMockWrappedObject(original.MarkdownPage, {\n class: true,\n fallback: () => {\n const mockDocument = new TextractDocument(JSON.parse(mockTextractContents));\n // Double type assertion needed to bridge incompatible types\n return new original.MarkdownPage(\n mockDocument.pageNumber(1) as unknown as TextractPageAdaptable,\n );\n },\n});\n\n/**\n * Mock for textractJsonToMarkdown function from @jaypie/textract\n */\nexport const textractJsonToMarkdown = createMockWrappedFunction<string>(\n original.textractJsonToMarkdown as any,\n `_MOCK_TEXTRACT_JSON_TO_MARKDOWN_[${TAG}]`,\n);\n\n// Export default for convenience\nexport default {\n MarkdownPage,\n textractJsonToMarkdown,\n};\n","// Import all mocks\nimport * as aws from \"./aws\";\nimport * as core from \"./core\";\nimport * as datadog from \"./datadog\";\nimport * as dynamodb from \"./dynamodb\";\nimport * as express from \"./express\";\nimport * as kit from \"./kit\";\nimport * as lambda from \"./lambda\";\nimport * as llm from \"./llm\";\nimport * as logger from \"./logger\";\nimport * as mongoose from \"./mongoose\";\nimport * as textract from \"./textract\";\n\n// Re-export all mocks\nexport * from \"./aws\";\nexport * from \"./core\";\nexport * from \"./datadog\";\nexport * from \"./dynamodb\";\nexport * from \"./express\";\nexport * from \"./kit\";\nexport * from \"./lambda\";\nexport * from \"./llm\";\nexport * from \"./logger\";\nexport * from \"./mongoose\";\nexport * from \"./textract\";\n\n// Export default object with all mocks\nconst mock: Record<string, any> = {\n // AWS module\n ...aws,\n\n // Core module\n ...core,\n\n // Datadog module\n ...datadog,\n\n // DynamoDB module\n ...dynamodb,\n\n // Express module\n ...express,\n\n // Kit module\n ...kit,\n\n // Lambda module\n ...lambda,\n\n // LLM module\n ...llm,\n\n // Logger module\n ...logger,\n\n // Mongoose module\n ...mongoose,\n\n // Textract module\n ...textract,\n};\n\nexport default mock;\n"],"names":["TAG","kit","HTTP","original","BadRequestError","UnhandledError","originalCreateLogger","__filename","__dirname","textract"],"mappings":"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"}
@@ -19,4 +19,29 @@ type StreamHandlerFunction = (event: unknown, responseStream: {
19
19
  export declare const lambdaStreamHandler: ((handler: StreamHandlerFunction, props?: LambdaOptions) => StreamHandlerFunction) & {
20
20
  mock: any;
21
21
  };
22
+ type WebSocketHandlerFunction = (event: unknown, context: WebSocketContext, ...extra: unknown[]) => Promise<WebSocketResponse>;
23
+ export interface WebSocketContext {
24
+ awsRequestId?: string;
25
+ body: string | null;
26
+ broadcast: (connectionIds: string[], data: unknown) => Promise<{
27
+ staleConnections: string[];
28
+ successCount: number;
29
+ }>;
30
+ connectionId: string;
31
+ domainName: string;
32
+ queryStringParameters: Record<string, string> | null;
33
+ routeKey: string;
34
+ send: (data: unknown) => Promise<{
35
+ connectionValid: boolean;
36
+ success: boolean;
37
+ }>;
38
+ stage: string;
39
+ }
40
+ export interface WebSocketResponse {
41
+ body?: string;
42
+ statusCode: number;
43
+ }
44
+ export declare const websocketHandler: ((handler: WebSocketHandlerFunction, props?: LambdaOptions) => (event: unknown, context?: unknown, ...args: unknown[]) => Promise<WebSocketResponse>) & {
45
+ mock: any;
46
+ };
22
47
  export {};
@@ -82,3 +82,30 @@ export declare class JaypieStream {
82
82
  export declare const createJaypieStream: ((source: AsyncIterable<unknown>) => JaypieStream) & {
83
83
  mock: any;
84
84
  };
85
+ export declare const sendToConnection: ((options: {
86
+ callbackUrl?: string;
87
+ connectionId: string;
88
+ data: unknown;
89
+ domainName?: string;
90
+ stage?: string;
91
+ }) => Promise<{
92
+ connectionValid: boolean;
93
+ success: boolean;
94
+ }>) & {
95
+ mock: any;
96
+ };
97
+ export declare const broadcastToConnections: ((options: {
98
+ callbackUrl?: string;
99
+ connectionIds: string[];
100
+ data: unknown;
101
+ domainName?: string;
102
+ stage?: string;
103
+ }) => Promise<{
104
+ staleConnections: string[];
105
+ successCount: number;
106
+ }>) & {
107
+ mock: any;
108
+ };
109
+ export declare const clearWebSocketClientCache: (() => void) & {
110
+ mock: any;
111
+ };
@@ -1,12 +1,12 @@
1
1
  import * as original from "@jaypie/dynamodb";
2
2
  import type { BaseQueryOptions, DynamoClientConfig, ExportResult, ParentReference, QueryParams, QueryResult, SeedOptions, SeedResult, StorableEntity } from "@jaypie/dynamodb";
3
- import type { IndexableModel } from "@jaypie/fabric";
3
+ import type { IndexableModel, IndexDefinition } from "@jaypie/fabric";
4
4
  export declare const APEX = "@";
5
5
  export declare const ARCHIVED_SUFFIX = "#archived";
6
- export declare const DEFAULT_INDEXES: import("@jaypie/fabric").IndexDefinition[];
6
+ export declare const DEFAULT_INDEXES: IndexDefinition[];
7
7
  export declare const DELETED_SUFFIX = "#deleted";
8
8
  export declare const INDEX_ALIAS = "indexAlias";
9
- export declare const INDEX_CLASS = "indexClass";
9
+ export declare const INDEX_CATEGORY = "indexCategory";
10
10
  export declare const INDEX_SCOPE = "indexScope";
11
11
  export declare const INDEX_TYPE = "indexType";
12
12
  export declare const INDEX_XID = "indexXid";
@@ -19,7 +19,7 @@ export declare const buildCompositeKey: ((entity: Record<string, unknown> & {
19
19
  export declare const buildIndexAlias: ((scope: string, model: string, alias: string) => string) & {
20
20
  mock: any;
21
21
  };
22
- export declare const buildIndexClass: ((scope: string, model: string, recordClass: string) => string) & {
22
+ export declare const buildIndexCategory: ((scope: string, model: string, category: string) => string) & {
23
23
  mock: any;
24
24
  };
25
25
  export declare const buildIndexScope: ((scope: string, model: string) => string) & {
@@ -106,14 +106,14 @@ export declare const queryByAlias: ((params: {
106
106
  }) => Promise<StorableEntity | null>) & {
107
107
  mock: any;
108
108
  };
109
- export declare const queryByClass: ((params: {
109
+ export declare const queryByCategory: ((params: {
110
110
  archived?: boolean;
111
111
  ascending?: boolean;
112
+ category: string;
112
113
  deleted?: boolean;
113
114
  limit?: number;
114
115
  model: string;
115
116
  scope: string;
116
- recordClass: string;
117
117
  startKey?: Record<string, unknown>;
118
118
  }) => Promise<QueryResult<StorableEntity>>) & {
119
119
  mock: any;
@@ -19,4 +19,29 @@ type StreamHandlerFunction = (event: unknown, responseStream: {
19
19
  export declare const lambdaStreamHandler: ((handler: StreamHandlerFunction, props?: LambdaOptions) => StreamHandlerFunction) & {
20
20
  mock: any;
21
21
  };
22
+ type WebSocketHandlerFunction = (event: unknown, context: WebSocketContext, ...extra: unknown[]) => Promise<WebSocketResponse>;
23
+ export interface WebSocketContext {
24
+ awsRequestId?: string;
25
+ body: string | null;
26
+ broadcast: (connectionIds: string[], data: unknown) => Promise<{
27
+ staleConnections: string[];
28
+ successCount: number;
29
+ }>;
30
+ connectionId: string;
31
+ domainName: string;
32
+ queryStringParameters: Record<string, string> | null;
33
+ routeKey: string;
34
+ send: (data: unknown) => Promise<{
35
+ connectionValid: boolean;
36
+ success: boolean;
37
+ }>;
38
+ stage: string;
39
+ }
40
+ export interface WebSocketResponse {
41
+ body?: string;
42
+ statusCode: number;
43
+ }
44
+ export declare const websocketHandler: ((handler: WebSocketHandlerFunction, props?: LambdaOptions) => (event: unknown, context?: unknown, ...args: unknown[]) => Promise<WebSocketResponse>) & {
45
+ mock: any;
46
+ };
22
47
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/testkit",
3
- "version": "1.2.16",
3
+ "version": "1.2.18",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/finlaysonstudio/jaypie.git"
@@ -40,6 +40,7 @@
40
40
  },
41
41
  "devDependencies": {
42
42
  "@jaypie/dynamodb": "*",
43
+ "@jaypie/fabric": "*",
43
44
  "@jaypie/types": "*",
44
45
  "@rollup/plugin-commonjs": "^28.0.3",
45
46
  "@rollup/plugin-json": "^6.1.0",
@@ -56,10 +57,10 @@
56
57
  "vitest": "^3.0.5"
57
58
  },
58
59
  "peerDependencies": {
59
- "@jaypie/dynamodb": ">=0.1.0",
60
- "@jaypie/errors": "^1.2.1",
61
- "@jaypie/kit": "^1.2.1",
62
- "@jaypie/logger": "^1.2.1",
60
+ "@jaypie/dynamodb": "*",
61
+ "@jaypie/errors": "*",
62
+ "@jaypie/kit": "*",
63
+ "@jaypie/logger": "*",
63
64
  "vitest": ">=1.0.0"
64
65
  },
65
66
  "peerDependenciesMeta": {