@jaypie/testkit 1.2.7 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,4 @@
1
- import * as original from "@jaypie/dynamodb";
2
- import type { ArchiveEntityParams, BaseQueryOptions, DeleteEntityParams, DynamoClientConfig, FabricEntity, GetEntityParams, ParentReference, PutEntityParams, QueryByAliasParams, QueryByClassParams, QueryByOuParams, QueryByTypeParams, QueryByXidParams, QueryResult, UpdateEntityParams } from "@jaypie/dynamodb";
1
+ import type { BaseQueryOptions, DynamoClientConfig, FabricEntity, ParentReference, QueryResult } from "@jaypie/dynamodb";
3
2
  export declare const APEX = "@";
4
3
  export declare const ARCHIVED_SUFFIX = "#archived";
5
4
  export declare const DELETED_SUFFIX = "#deleted";
@@ -45,37 +44,91 @@ export declare const isInitialized: ((...args: any[]) => any) & {
45
44
  export declare const resetClient: ((...args: any[]) => any) & {
46
45
  mock: any;
47
46
  };
48
- export declare const getEntity: (<T extends FabricEntity = original.FabricEntity>(params: GetEntityParams) => Promise<T | null>) & {
47
+ export declare const getEntity: ((params: {
48
+ id: string;
49
+ model: string;
50
+ }) => Promise<FabricEntity | null>) & {
49
51
  mock: any;
50
52
  };
51
- export declare const putEntity: (<T extends FabricEntity>(params: PutEntityParams<T>) => Promise<T>) & {
53
+ export declare const putEntity: ((params: {
54
+ entity: FabricEntity;
55
+ }) => Promise<FabricEntity>) & {
52
56
  mock: any;
53
57
  };
54
- export declare const updateEntity: (<T extends FabricEntity>(params: UpdateEntityParams<T>) => Promise<T>) & {
58
+ export declare const updateEntity: ((params: {
59
+ entity: FabricEntity;
60
+ }) => Promise<FabricEntity>) & {
55
61
  mock: any;
56
62
  };
57
- export declare const deleteEntity: ((params: DeleteEntityParams) => Promise<boolean>) & {
63
+ export declare const deleteEntity: ((params: {
64
+ id: string;
65
+ model: string;
66
+ }) => Promise<boolean>) & {
58
67
  mock: any;
59
68
  };
60
- export declare const archiveEntity: ((params: ArchiveEntityParams) => Promise<boolean>) & {
69
+ export declare const archiveEntity: ((params: {
70
+ id: string;
71
+ model: string;
72
+ }) => Promise<boolean>) & {
61
73
  mock: any;
62
74
  };
63
- export declare const destroyEntity: ((params: DeleteEntityParams) => Promise<boolean>) & {
75
+ export declare const destroyEntity: ((params: {
76
+ id: string;
77
+ model: string;
78
+ }) => Promise<boolean>) & {
64
79
  mock: any;
65
80
  };
66
- export declare const queryByOu: (<T extends FabricEntity = original.FabricEntity>(params: QueryByOuParams) => Promise<QueryResult<T>>) & {
81
+ export declare const queryByOu: ((params: {
82
+ model: string;
83
+ ou: string;
84
+ archived?: boolean;
85
+ ascending?: boolean;
86
+ deleted?: boolean;
87
+ limit?: number;
88
+ startKey?: Record<string, unknown>;
89
+ }) => Promise<QueryResult<FabricEntity>>) & {
67
90
  mock: any;
68
91
  };
69
- export declare const queryByAlias: (<T extends FabricEntity = original.FabricEntity>(params: QueryByAliasParams) => Promise<T | null>) & {
92
+ export declare const queryByAlias: ((params: {
93
+ alias: string;
94
+ archived?: boolean;
95
+ deleted?: boolean;
96
+ model: string;
97
+ ou: string;
98
+ }) => Promise<FabricEntity | null>) & {
70
99
  mock: any;
71
100
  };
72
- export declare const queryByClass: (<T extends FabricEntity = original.FabricEntity>(params: QueryByClassParams) => Promise<QueryResult<T>>) & {
101
+ export declare const queryByClass: ((params: {
102
+ archived?: boolean;
103
+ ascending?: boolean;
104
+ deleted?: boolean;
105
+ limit?: number;
106
+ model: string;
107
+ ou: string;
108
+ recordClass: string;
109
+ startKey?: Record<string, unknown>;
110
+ }) => Promise<QueryResult<FabricEntity>>) & {
73
111
  mock: any;
74
112
  };
75
- export declare const queryByType: (<T extends FabricEntity = original.FabricEntity>(params: QueryByTypeParams) => Promise<QueryResult<T>>) & {
113
+ export declare const queryByType: ((params: {
114
+ archived?: boolean;
115
+ ascending?: boolean;
116
+ deleted?: boolean;
117
+ limit?: number;
118
+ model: string;
119
+ ou: string;
120
+ startKey?: Record<string, unknown>;
121
+ type: string;
122
+ }) => Promise<QueryResult<FabricEntity>>) & {
76
123
  mock: any;
77
124
  };
78
- export declare const queryByXid: (<T extends FabricEntity = original.FabricEntity>(params: QueryByXidParams) => Promise<T | null>) & {
125
+ export declare const queryByXid: ((params: {
126
+ archived?: boolean;
127
+ deleted?: boolean;
128
+ model: string;
129
+ ou: string;
130
+ xid: string;
131
+ }) => Promise<FabricEntity | null>) & {
79
132
  mock: any;
80
133
  };
81
134
  export type { BaseQueryOptions, FabricEntity, ParentReference, QueryResult };
@@ -3,10 +3,9 @@
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 original from '@jaypie/dynamodb';
7
- import { ParentReference, FabricEntity, DynamoClientConfig, GetEntityParams, PutEntityParams, UpdateEntityParams, DeleteEntityParams, ArchiveEntityParams, QueryByOuParams, QueryResult, QueryByAliasParams, QueryByClassParams, QueryByTypeParams, QueryByXidParams } from '@jaypie/dynamodb';
6
+ import { ParentReference, FabricEntity, DynamoClientConfig, QueryResult } from '@jaypie/dynamodb';
8
7
  export { BaseQueryOptions, FabricEntity, ParentReference, QueryResult } from '@jaypie/dynamodb';
9
- import * as original$1 from '@jaypie/llm';
8
+ import * as original from '@jaypie/llm';
10
9
  export { FORMAT, LEVEL, Logger, log } from '@jaypie/logger';
11
10
  export { mongoose } from '@jaypie/mongoose';
12
11
 
@@ -359,37 +358,91 @@ declare const isInitialized: ((...args: any[]) => any) & {
359
358
  declare const resetClient: ((...args: any[]) => any) & {
360
359
  mock: any;
361
360
  };
362
- declare const getEntity: (<T extends FabricEntity = original.FabricEntity>(params: GetEntityParams) => Promise<T | null>) & {
361
+ declare const getEntity: ((params: {
362
+ id: string;
363
+ model: string;
364
+ }) => Promise<FabricEntity | null>) & {
363
365
  mock: any;
364
366
  };
365
- declare const putEntity: (<T extends FabricEntity>(params: PutEntityParams<T>) => Promise<T>) & {
367
+ declare const putEntity: ((params: {
368
+ entity: FabricEntity;
369
+ }) => Promise<FabricEntity>) & {
366
370
  mock: any;
367
371
  };
368
- declare const updateEntity: (<T extends FabricEntity>(params: UpdateEntityParams<T>) => Promise<T>) & {
372
+ declare const updateEntity: ((params: {
373
+ entity: FabricEntity;
374
+ }) => Promise<FabricEntity>) & {
369
375
  mock: any;
370
376
  };
371
- declare const deleteEntity: ((params: DeleteEntityParams) => Promise<boolean>) & {
377
+ declare const deleteEntity: ((params: {
378
+ id: string;
379
+ model: string;
380
+ }) => Promise<boolean>) & {
372
381
  mock: any;
373
382
  };
374
- declare const archiveEntity: ((params: ArchiveEntityParams) => Promise<boolean>) & {
383
+ declare const archiveEntity: ((params: {
384
+ id: string;
385
+ model: string;
386
+ }) => Promise<boolean>) & {
375
387
  mock: any;
376
388
  };
377
- declare const destroyEntity: ((params: DeleteEntityParams) => Promise<boolean>) & {
389
+ declare const destroyEntity: ((params: {
390
+ id: string;
391
+ model: string;
392
+ }) => Promise<boolean>) & {
378
393
  mock: any;
379
394
  };
380
- declare const queryByOu: (<T extends FabricEntity = original.FabricEntity>(params: QueryByOuParams) => Promise<QueryResult<T>>) & {
395
+ declare const queryByOu: ((params: {
396
+ model: string;
397
+ ou: string;
398
+ archived?: boolean;
399
+ ascending?: boolean;
400
+ deleted?: boolean;
401
+ limit?: number;
402
+ startKey?: Record<string, unknown>;
403
+ }) => Promise<QueryResult<FabricEntity>>) & {
381
404
  mock: any;
382
405
  };
383
- declare const queryByAlias: (<T extends FabricEntity = original.FabricEntity>(params: QueryByAliasParams) => Promise<T | null>) & {
406
+ declare const queryByAlias: ((params: {
407
+ alias: string;
408
+ archived?: boolean;
409
+ deleted?: boolean;
410
+ model: string;
411
+ ou: string;
412
+ }) => Promise<FabricEntity | null>) & {
384
413
  mock: any;
385
414
  };
386
- declare const queryByClass: (<T extends FabricEntity = original.FabricEntity>(params: QueryByClassParams) => Promise<QueryResult<T>>) & {
415
+ declare const queryByClass: ((params: {
416
+ archived?: boolean;
417
+ ascending?: boolean;
418
+ deleted?: boolean;
419
+ limit?: number;
420
+ model: string;
421
+ ou: string;
422
+ recordClass: string;
423
+ startKey?: Record<string, unknown>;
424
+ }) => Promise<QueryResult<FabricEntity>>) & {
387
425
  mock: any;
388
426
  };
389
- declare const queryByType: (<T extends FabricEntity = original.FabricEntity>(params: QueryByTypeParams) => Promise<QueryResult<T>>) & {
427
+ declare const queryByType: ((params: {
428
+ archived?: boolean;
429
+ ascending?: boolean;
430
+ deleted?: boolean;
431
+ limit?: number;
432
+ model: string;
433
+ ou: string;
434
+ startKey?: Record<string, unknown>;
435
+ type: string;
436
+ }) => Promise<QueryResult<FabricEntity>>) & {
390
437
  mock: any;
391
438
  };
392
- declare const queryByXid: (<T extends FabricEntity = original.FabricEntity>(params: QueryByXidParams) => Promise<T | null>) & {
439
+ declare const queryByXid: ((params: {
440
+ archived?: boolean;
441
+ deleted?: boolean;
442
+ model: string;
443
+ ou: string;
444
+ xid: string;
445
+ }) => Promise<FabricEntity | null>) & {
393
446
  mock: any;
394
447
  };
395
448
 
@@ -464,25 +517,25 @@ declare const lambdaStreamHandler: ((handler: StreamHandlerFunction, props?: Lam
464
517
  mock: any;
465
518
  };
466
519
 
467
- declare const LLM: typeof original$1.LLM;
520
+ declare const LLM: typeof original.LLM;
468
521
  declare const Llm: vitest.Mock<(...args: any[]) => any> & {
469
522
  operate: vitest.Mock<(...args: any[]) => any>;
470
523
  send: vitest.Mock<(...args: any[]) => any>;
471
524
  };
472
- declare const Toolkit: typeof original$1.Toolkit;
473
- declare const JaypieToolkit: typeof original$1.JaypieToolkit;
474
- declare const LlmMessageRole: typeof original$1.LlmMessageRole;
475
- declare const LlmMessageType: typeof original$1.LlmMessageType;
476
- declare const LlmStreamChunkType: typeof original$1.LlmStreamChunkType;
477
- declare const GeminiProvider: typeof original$1.GeminiProvider;
478
- declare const OpenRouterProvider: typeof original$1.OpenRouterProvider;
479
- declare const extractReasoning: typeof original$1.extractReasoning;
480
- declare const isLlmOperateInput: typeof original$1.isLlmOperateInput;
481
- declare const isLlmOperateInputContent: typeof original$1.isLlmOperateInputContent;
482
- declare const isLlmOperateInputFile: typeof original$1.isLlmOperateInputFile;
483
- declare const isLlmOperateInputImage: typeof original$1.isLlmOperateInputImage;
484
- declare const toolkit: original$1.JaypieToolkit;
485
- declare const tools: Omit<original$1.LlmTool, "call">[];
525
+ declare const Toolkit: typeof original.Toolkit;
526
+ declare const JaypieToolkit: typeof original.JaypieToolkit;
527
+ declare const LlmMessageRole: typeof original.LlmMessageRole;
528
+ declare const LlmMessageType: typeof original.LlmMessageType;
529
+ declare const LlmStreamChunkType: typeof original.LlmStreamChunkType;
530
+ declare const GeminiProvider: typeof original.GeminiProvider;
531
+ declare const OpenRouterProvider: typeof original.OpenRouterProvider;
532
+ declare const extractReasoning: typeof original.extractReasoning;
533
+ declare const isLlmOperateInput: typeof original.isLlmOperateInput;
534
+ declare const isLlmOperateInputContent: typeof original.isLlmOperateInputContent;
535
+ declare const isLlmOperateInputFile: typeof original.isLlmOperateInputFile;
536
+ declare const isLlmOperateInputImage: typeof original.isLlmOperateInputImage;
537
+ declare const toolkit: original.JaypieToolkit;
538
+ declare const tools: Omit<original.LlmTool, "call">[];
486
539
 
487
540
  interface JsonApiError {
488
541
  errors: Array<{
@@ -6,15 +6,16 @@ import * as errors from '@jaypie/errors';
6
6
  import { BadRequestError as BadRequestError$1, UnhandledError as UnhandledError$1 } from '@jaypie/errors';
7
7
  import * as kit$1 from '@jaypie/kit';
8
8
  import * as original$1 from '@jaypie/datadog';
9
- import * as original$2 from '@jaypie/express';
10
- import * as original$3 from '@jaypie/llm';
9
+ import * as original$2 from '@jaypie/dynamodb';
10
+ import * as original$3 from '@jaypie/express';
11
+ import * as original$4 from '@jaypie/llm';
11
12
  import { mongoose as mongoose$1 } from '@jaypie/mongoose';
12
13
  export { mongoose } from '@jaypie/mongoose';
13
14
  import { readFile } from 'fs/promises';
14
15
  import { dirname, join } from 'path';
15
16
  import { fileURLToPath } from 'url';
16
17
  import { TextractDocument } from 'amazon-textract-response-parser';
17
- import * as original$4 from '@jaypie/textract';
18
+ import * as original$5 from '@jaypie/textract';
18
19
 
19
20
  /* eslint-disable no-console */
20
21
  /**
@@ -593,133 +594,24 @@ var datadog = /*#__PURE__*/Object.freeze({
593
594
  submitMetricSet: submitMetricSet
594
595
  });
595
596
 
596
- // Primary markers
597
- const APEX$1 = "@"; // Root-level marker (DynamoDB prohibits empty strings)
598
- const SEPARATOR$1 = "#"; // Composite key separator
599
- // GSI names
600
- const INDEX_ALIAS$1 = "indexAlias";
601
- const INDEX_CLASS$1 = "indexClass";
602
- const INDEX_OU$1 = "indexOu";
603
- const INDEX_TYPE$1 = "indexType";
604
- const INDEX_XID$1 = "indexXid";
605
- // Index suffixes for soft state
606
- const ARCHIVED_SUFFIX$1 = "#archived";
607
- const DELETED_SUFFIX$1 = "#deleted";
608
-
609
- /**
610
- * Build the indexOu key for hierarchical queries
611
- * @param ou - The organizational unit (APEX or "{parent.model}#{parent.id}")
612
- * @param model - The entity model name
613
- * @returns Composite key: "{ou}#{model}"
614
- */
615
- function buildIndexOu$1(ou, model) {
616
- return `${ou}${SEPARATOR$1}${model}`;
617
- }
618
- /**
619
- * Build the indexAlias key for human-friendly lookups
620
- * @param ou - The organizational unit
621
- * @param model - The entity model name
622
- * @param alias - The human-friendly alias
623
- * @returns Composite key: "{ou}#{model}#{alias}"
624
- */
625
- function buildIndexAlias$1(ou, model, alias) {
626
- return `${ou}${SEPARATOR$1}${model}${SEPARATOR$1}${alias}`;
627
- }
628
- /**
629
- * Build the indexClass key for category filtering
630
- * @param ou - The organizational unit
631
- * @param model - The entity model name
632
- * @param recordClass - The category classification
633
- * @returns Composite key: "{ou}#{model}#{class}"
634
- */
635
- function buildIndexClass$1(ou, model, recordClass) {
636
- return `${ou}${SEPARATOR$1}${model}${SEPARATOR$1}${recordClass}`;
637
- }
638
- /**
639
- * Build the indexType key for type filtering
640
- * @param ou - The organizational unit
641
- * @param model - The entity model name
642
- * @param type - The type classification
643
- * @returns Composite key: "{ou}#{model}#{type}"
644
- */
645
- function buildIndexType$1(ou, model, type) {
646
- return `${ou}${SEPARATOR$1}${model}${SEPARATOR$1}${type}`;
647
- }
648
- /**
649
- * Build the indexXid key for external ID lookups
650
- * @param ou - The organizational unit
651
- * @param model - The entity model name
652
- * @param xid - The external ID
653
- * @returns Composite key: "{ou}#{model}#{xid}"
654
- */
655
- function buildIndexXid$1(ou, model, xid) {
656
- return `${ou}${SEPARATOR$1}${model}${SEPARATOR$1}${xid}`;
657
- }
658
- /**
659
- * Calculate the organizational unit from a parent reference
660
- * @param parent - Optional parent entity reference
661
- * @returns APEX ("@") if no parent, otherwise "{parent.model}#{parent.id}"
662
- */
663
- function calculateOu$1(parent) {
664
- if (!parent) {
665
- return APEX$1;
666
- }
667
- return `${parent.model}${SEPARATOR$1}${parent.id}`;
668
- }
669
- /**
670
- * Auto-populate GSI index keys on an entity
671
- * - indexOu is always populated from ou + model
672
- * - indexAlias is populated only when alias is present
673
- * - indexClass is populated only when class is present
674
- * - indexType is populated only when type is present
675
- * - indexXid is populated only when xid is present
676
- *
677
- * @param entity - The entity to populate index keys for
678
- * @param suffix - Optional suffix to append to all index keys (e.g., "#deleted", "#archived")
679
- * @returns The entity with populated index keys
680
- */
681
- function indexEntity$1(entity, suffix = "") {
682
- const result = { ...entity };
683
- // indexOu is always set (from ou + model)
684
- result.indexOu = buildIndexOu$1(entity.ou, entity.model) + suffix;
685
- // Optional indexes - only set when the source field is present
686
- if (entity.alias !== undefined) {
687
- result.indexAlias =
688
- buildIndexAlias$1(entity.ou, entity.model, entity.alias) + suffix;
689
- }
690
- if (entity.class !== undefined) {
691
- result.indexClass =
692
- buildIndexClass$1(entity.ou, entity.model, entity.class) + suffix;
693
- }
694
- if (entity.type !== undefined) {
695
- result.indexType =
696
- buildIndexType$1(entity.ou, entity.model, entity.type) + suffix;
697
- }
698
- if (entity.xid !== undefined) {
699
- result.indexXid =
700
- buildIndexXid$1(entity.ou, entity.model, entity.xid) + suffix;
701
- }
702
- return result;
703
- }
704
-
705
597
  // Re-export constants (no need to mock, just pass through)
706
- const APEX = APEX$1;
707
- const ARCHIVED_SUFFIX = ARCHIVED_SUFFIX$1;
708
- const DELETED_SUFFIX = DELETED_SUFFIX$1;
709
- const INDEX_ALIAS = INDEX_ALIAS$1;
710
- const INDEX_CLASS = INDEX_CLASS$1;
711
- const INDEX_OU = INDEX_OU$1;
712
- const INDEX_TYPE = INDEX_TYPE$1;
713
- const INDEX_XID = INDEX_XID$1;
714
- const SEPARATOR = SEPARATOR$1;
598
+ const APEX = original$2.APEX;
599
+ const ARCHIVED_SUFFIX = original$2.ARCHIVED_SUFFIX;
600
+ const DELETED_SUFFIX = original$2.DELETED_SUFFIX;
601
+ const INDEX_ALIAS = original$2.INDEX_ALIAS;
602
+ const INDEX_CLASS = original$2.INDEX_CLASS;
603
+ const INDEX_OU = original$2.INDEX_OU;
604
+ const INDEX_TYPE = original$2.INDEX_TYPE;
605
+ const INDEX_XID = original$2.INDEX_XID;
606
+ const SEPARATOR = original$2.SEPARATOR;
715
607
  // Key builder functions - use createMockFunction with typed implementations
716
- const buildIndexAlias = createMockFunction((ou, model, alias) => buildIndexAlias$1(ou, model, alias));
717
- const buildIndexClass = createMockFunction((ou, model, recordClass) => buildIndexClass$1(ou, model, recordClass));
718
- const buildIndexOu = createMockFunction((ou, model) => buildIndexOu$1(ou, model));
719
- const buildIndexType = createMockFunction((ou, model, type) => buildIndexType$1(ou, model, type));
720
- const buildIndexXid = createMockFunction((ou, model, xid) => buildIndexXid$1(ou, model, xid));
721
- const calculateOu = createMockFunction((parent) => calculateOu$1(parent));
722
- const indexEntity = createMockFunction((entity, suffix) => indexEntity$1(entity, suffix));
608
+ const buildIndexAlias = createMockFunction((ou, model, alias) => original$2.buildIndexAlias(ou, model, alias));
609
+ const buildIndexClass = createMockFunction((ou, model, recordClass) => original$2.buildIndexClass(ou, model, recordClass));
610
+ const buildIndexOu = createMockFunction((ou, model) => original$2.buildIndexOu(ou, model));
611
+ const buildIndexType = createMockFunction((ou, model, type) => original$2.buildIndexType(ou, model, type));
612
+ const buildIndexXid = createMockFunction((ou, model, xid) => original$2.buildIndexXid(ou, model, xid));
613
+ const calculateOu = createMockFunction((parent) => original$2.calculateOu(parent));
614
+ const indexEntity = createMockFunction((entity, suffix) => original$2.indexEntity(entity, suffix));
723
615
  // Client functions
724
616
  const initClient = createMockFunction(() => {
725
617
  // No-op in mock
@@ -732,17 +624,17 @@ const isInitialized = createMockFunction(() => true);
732
624
  const resetClient = createMockFunction(() => {
733
625
  // No-op in mock
734
626
  });
735
- // Entity operations - return mock data
627
+ // Entity operations - service handler pattern (callable with object params)
736
628
  const getEntity = createMockFunction(async () => null);
737
- const putEntity = createMockFunction(async (params) => indexEntity$1(params.entity));
629
+ const putEntity = createMockFunction(async (params) => original$2.indexEntity(params.entity));
738
630
  const updateEntity = createMockFunction(async (params) => ({
739
- ...indexEntity$1(params.entity),
631
+ ...original$2.indexEntity(params.entity),
740
632
  updatedAt: new Date().toISOString(),
741
633
  }));
742
634
  const deleteEntity = createMockFunction(async () => true);
743
635
  const archiveEntity = createMockFunction(async () => true);
744
636
  const destroyEntity = createMockFunction(async () => true);
745
- // Query functions - return empty results by default (use object params)
637
+ // Query functions - service handler pattern (callable with object params)
746
638
  const queryByOu = createMockFunction(async () => ({
747
639
  items: [],
748
640
  lastEvaluatedKey: undefined,
@@ -800,25 +692,25 @@ const TAG$1 = "EXPRESS";
800
692
  const HTTP = {
801
693
  CODE: { OK: 200, CREATED: 201, NO_CONTENT: 204, INTERNAL_ERROR: 500 },
802
694
  };
803
- const EXPRESS = original$2.EXPRESS;
695
+ const EXPRESS = original$3.EXPRESS;
804
696
  // Add Express route functions
805
- const badRequestRoute = createMockWrappedFunction(original$2.badRequestRoute, { error: `_MOCK_BAD_REQUEST_ROUTE_[${TAG$1}]` });
806
- const echoRoute = createMockWrappedFunction(original$2.echoRoute, (req) => req);
807
- const forbiddenRoute = createMockWrappedFunction(original$2.forbiddenRoute, { error: `_MOCK_FORBIDDEN_ROUTE_[${TAG$1}]` });
808
- const goneRoute = createMockWrappedFunction(original$2.goneRoute, {
697
+ const badRequestRoute = createMockWrappedFunction(original$3.badRequestRoute, { error: `_MOCK_BAD_REQUEST_ROUTE_[${TAG$1}]` });
698
+ const echoRoute = createMockWrappedFunction(original$3.echoRoute, (req) => req);
699
+ const forbiddenRoute = createMockWrappedFunction(original$3.forbiddenRoute, { error: `_MOCK_FORBIDDEN_ROUTE_[${TAG$1}]` });
700
+ const goneRoute = createMockWrappedFunction(original$3.goneRoute, {
809
701
  error: `_MOCK_GONE_ROUTE_[${TAG$1}]`,
810
702
  });
811
- const methodNotAllowedRoute = createMockWrappedFunction(original$2.methodNotAllowedRoute, { error: `_MOCK_METHOD_NOT_ALLOWED_ROUTE_[${TAG$1}]` });
812
- const noContentRoute = createMockWrappedFunction(original$2.noContentRoute, { status: 204 });
813
- const notFoundRoute = createMockWrappedFunction(original$2.notFoundRoute, {
703
+ const methodNotAllowedRoute = createMockWrappedFunction(original$3.methodNotAllowedRoute, { error: `_MOCK_METHOD_NOT_ALLOWED_ROUTE_[${TAG$1}]` });
704
+ const noContentRoute = createMockWrappedFunction(original$3.noContentRoute, { status: 204 });
705
+ const notFoundRoute = createMockWrappedFunction(original$3.notFoundRoute, {
814
706
  error: `_MOCK_NOT_FOUND_ROUTE_[${TAG$1}]`,
815
707
  });
816
- const notImplementedRoute = createMockWrappedFunction(original$2.notImplementedRoute, { error: `_MOCK_NOT_IMPLEMENTED_ROUTE_[${TAG$1}]` });
817
- const expressHttpCodeHandler = createMockWrappedFunction(original$2.expressHttpCodeHandler, (...args) => {
708
+ const notImplementedRoute = createMockWrappedFunction(original$3.notImplementedRoute, { error: `_MOCK_NOT_IMPLEMENTED_ROUTE_[${TAG$1}]` });
709
+ const expressHttpCodeHandler = createMockWrappedFunction(original$3.expressHttpCodeHandler, (...args) => {
818
710
  const [, res] = args;
819
711
  return res.status(200).send();
820
712
  });
821
- const cors = createMockWrappedFunction(original$2.cors);
713
+ const cors = createMockWrappedFunction(original$3.cors);
822
714
  const expressStreamHandler = createMockFunction((handlerOrProps, propsOrHandler) => {
823
715
  let handler;
824
716
  let props;
@@ -1059,7 +951,7 @@ var lambda = /*#__PURE__*/Object.freeze({
1059
951
  lambdaStreamHandler: lambdaStreamHandler
1060
952
  });
1061
953
 
1062
- const LLM = original$3.LLM;
954
+ const LLM = original$4.LLM;
1063
955
  const mockOperate = createMockResolvedFunction({
1064
956
  content: "_MOCK_OUTPUT_TEXT",
1065
957
  history: [
@@ -1131,36 +1023,36 @@ const weather = createMockTool("weather", createMockResolvedFunction({
1131
1023
  location: `_MOCK_WEATHER_LOCATION`,
1132
1024
  forecast: [{ conditions: "good" }],
1133
1025
  }));
1134
- const Toolkit = createMockWrappedObject(original$3.Toolkit, {
1026
+ const Toolkit = createMockWrappedObject(original$4.Toolkit, {
1135
1027
  isClass: true,
1136
1028
  });
1137
- const JaypieToolkit = createMockWrappedObject(original$3.JaypieToolkit, {
1029
+ const JaypieToolkit = createMockWrappedObject(original$4.JaypieToolkit, {
1138
1030
  isClass: true,
1139
1031
  });
1140
- const LlmMessageRole = createMockWrappedObject(original$3.LlmMessageRole, {
1032
+ const LlmMessageRole = createMockWrappedObject(original$4.LlmMessageRole, {
1141
1033
  isClass: true,
1142
1034
  });
1143
- const LlmMessageType = createMockWrappedObject(original$3.LlmMessageType, {
1035
+ const LlmMessageType = createMockWrappedObject(original$4.LlmMessageType, {
1144
1036
  isClass: true,
1145
1037
  });
1146
- const LlmStreamChunkType = createMockWrappedObject(original$3.LlmStreamChunkType, {
1038
+ const LlmStreamChunkType = createMockWrappedObject(original$4.LlmStreamChunkType, {
1147
1039
  isClass: true,
1148
1040
  });
1149
1041
  // Provider mocks
1150
- const GeminiProvider = createMockWrappedObject(original$3.GeminiProvider, {
1042
+ const GeminiProvider = createMockWrappedObject(original$4.GeminiProvider, {
1151
1043
  isClass: true,
1152
1044
  });
1153
- const OpenRouterProvider = createMockWrappedObject(original$3.OpenRouterProvider, {
1045
+ const OpenRouterProvider = createMockWrappedObject(original$4.OpenRouterProvider, {
1154
1046
  isClass: true,
1155
1047
  });
1156
1048
  // Type guards and utilities - re-export from original (these are pure functions)
1157
- const extractReasoning = original$3.extractReasoning;
1158
- const isLlmOperateInput = original$3.isLlmOperateInput;
1159
- const isLlmOperateInputContent = original$3.isLlmOperateInputContent;
1160
- const isLlmOperateInputFile = original$3.isLlmOperateInputFile;
1161
- const isLlmOperateInputImage = original$3.isLlmOperateInputImage;
1049
+ const extractReasoning = original$4.extractReasoning;
1050
+ const isLlmOperateInput = original$4.isLlmOperateInput;
1051
+ const isLlmOperateInputContent = original$4.isLlmOperateInputContent;
1052
+ const isLlmOperateInputFile = original$4.isLlmOperateInputFile;
1053
+ const isLlmOperateInputImage = original$4.isLlmOperateInputImage;
1162
1054
  // Tool collections
1163
- const toolkit = new original$3.JaypieToolkit([
1055
+ const toolkit = new original$4.JaypieToolkit([
1164
1056
  random,
1165
1057
  roll,
1166
1058
  time,
@@ -1226,18 +1118,18 @@ beforeAll(async () => {
1226
1118
  /**
1227
1119
  * Mock for MarkdownPage class from @jaypie/textract
1228
1120
  */
1229
- const MarkdownPage = createMockWrappedObject(original$4.MarkdownPage, {
1121
+ const MarkdownPage = createMockWrappedObject(original$5.MarkdownPage, {
1230
1122
  class: true,
1231
1123
  fallback: () => {
1232
1124
  const mockDocument = new TextractDocument(JSON.parse(mockTextractContents));
1233
1125
  // Double type assertion needed to bridge incompatible types
1234
- return new original$4.MarkdownPage(mockDocument.pageNumber(1));
1126
+ return new original$5.MarkdownPage(mockDocument.pageNumber(1));
1235
1127
  },
1236
1128
  });
1237
1129
  /**
1238
1130
  * Mock for textractJsonToMarkdown function from @jaypie/textract
1239
1131
  */
1240
- const textractJsonToMarkdown = createMockWrappedFunction(original$4.textractJsonToMarkdown, `_MOCK_TEXTRACT_JSON_TO_MARKDOWN_[${TAG}]`);
1132
+ const textractJsonToMarkdown = createMockWrappedFunction(original$5.textractJsonToMarkdown, `_MOCK_TEXTRACT_JSON_TO_MARKDOWN_[${TAG}]`);
1241
1133
  // Export default for convenience
1242
1134
  var textract = {
1243
1135
  MarkdownPage,
@@ -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","../../../dynamodb/dist/esm/index.js","../../../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/vocabulary.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 formatSSE = createMockFunction<\n (chunk: { type: string; [key: string]: unknown }) => string\n>((chunk) => `event: ${chunk.type}\\ndata: ${JSON.stringify(chunk)}\\n\\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 { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { DynamoDBDocumentClient, PutCommand, DeleteCommand, GetCommand, QueryCommand } from '@aws-sdk/lib-dynamodb';\nimport { ConfigurationError } from '@jaypie/errors';\n\nconst DEFAULT_REGION = \"us-east-1\";\nconst LOCAL_CREDENTIALS = {\n accessKeyId: \"local\",\n secretAccessKey: \"local\",\n};\n// Module-level state\nlet docClient = null;\nlet tableName = null;\n/**\n * Check if endpoint indicates local development mode\n */\nfunction isLocalEndpoint(endpoint) {\n if (!endpoint)\n return false;\n return endpoint.includes(\"127.0.0.1\") || endpoint.includes(\"localhost\");\n}\n/**\n * Initialize the DynamoDB client\n * Must be called once at application startup before using query functions\n *\n * @param config - Client configuration\n */\nfunction initClient(config) {\n const { endpoint, region = DEFAULT_REGION } = config;\n // Auto-detect local mode and use dummy credentials\n const credentials = config.credentials ??\n (isLocalEndpoint(endpoint) ? LOCAL_CREDENTIALS : undefined);\n const dynamoClient = new DynamoDBClient({\n ...(credentials && { credentials }),\n ...(endpoint && { endpoint }),\n region,\n });\n docClient = DynamoDBDocumentClient.from(dynamoClient, {\n marshallOptions: {\n removeUndefinedValues: true,\n },\n });\n tableName = config.tableName;\n}\n/**\n * Get the initialized DynamoDB Document Client\n * @throws ConfigurationError if client has not been initialized\n */\nfunction getDocClient() {\n if (!docClient) {\n throw new ConfigurationError(\"DynamoDB client not initialized. Call initClient() first.\");\n }\n return docClient;\n}\n/**\n * Get the configured table name\n * @throws ConfigurationError if client has not been initialized\n */\nfunction getTableName() {\n if (!tableName) {\n throw new ConfigurationError(\"DynamoDB client not initialized. Call initClient() first.\");\n }\n return tableName;\n}\n/**\n * Check if the client has been initialized\n */\nfunction isInitialized() {\n return docClient !== null && tableName !== null;\n}\n/**\n * Reset the client state (primarily for testing)\n */\nfunction resetClient() {\n docClient = null;\n tableName = null;\n}\n\n// Primary markers\nconst APEX = \"@\"; // Root-level marker (DynamoDB prohibits empty strings)\nconst SEPARATOR = \"#\"; // Composite key separator\n// GSI names\nconst INDEX_ALIAS = \"indexAlias\";\nconst INDEX_CLASS = \"indexClass\";\nconst INDEX_OU = \"indexOu\";\nconst INDEX_TYPE = \"indexType\";\nconst INDEX_XID = \"indexXid\";\n// Index suffixes for soft state\nconst ARCHIVED_SUFFIX = \"#archived\";\nconst DELETED_SUFFIX = \"#deleted\";\n\n/**\n * Build the indexOu key for hierarchical queries\n * @param ou - The organizational unit (APEX or \"{parent.model}#{parent.id}\")\n * @param model - The entity model name\n * @returns Composite key: \"{ou}#{model}\"\n */\nfunction buildIndexOu(ou, model) {\n return `${ou}${SEPARATOR}${model}`;\n}\n/**\n * Build the indexAlias key for human-friendly lookups\n * @param ou - The organizational unit\n * @param model - The entity model name\n * @param alias - The human-friendly alias\n * @returns Composite key: \"{ou}#{model}#{alias}\"\n */\nfunction buildIndexAlias(ou, model, alias) {\n return `${ou}${SEPARATOR}${model}${SEPARATOR}${alias}`;\n}\n/**\n * Build the indexClass key for category filtering\n * @param ou - The organizational unit\n * @param model - The entity model name\n * @param recordClass - The category classification\n * @returns Composite key: \"{ou}#{model}#{class}\"\n */\nfunction buildIndexClass(ou, model, recordClass) {\n return `${ou}${SEPARATOR}${model}${SEPARATOR}${recordClass}`;\n}\n/**\n * Build the indexType key for type filtering\n * @param ou - The organizational unit\n * @param model - The entity model name\n * @param type - The type classification\n * @returns Composite key: \"{ou}#{model}#{type}\"\n */\nfunction buildIndexType(ou, model, type) {\n return `${ou}${SEPARATOR}${model}${SEPARATOR}${type}`;\n}\n/**\n * Build the indexXid key for external ID lookups\n * @param ou - The organizational unit\n * @param model - The entity model name\n * @param xid - The external ID\n * @returns Composite key: \"{ou}#{model}#{xid}\"\n */\nfunction buildIndexXid(ou, model, xid) {\n return `${ou}${SEPARATOR}${model}${SEPARATOR}${xid}`;\n}\n/**\n * Calculate the organizational unit from a parent reference\n * @param parent - Optional parent entity reference\n * @returns APEX (\"@\") if no parent, otherwise \"{parent.model}#{parent.id}\"\n */\nfunction calculateOu(parent) {\n if (!parent) {\n return APEX;\n }\n return `${parent.model}${SEPARATOR}${parent.id}`;\n}\n/**\n * Auto-populate GSI index keys on an entity\n * - indexOu is always populated from ou + model\n * - indexAlias is populated only when alias is present\n * - indexClass is populated only when class is present\n * - indexType is populated only when type is present\n * - indexXid is populated only when xid is present\n *\n * @param entity - The entity to populate index keys for\n * @param suffix - Optional suffix to append to all index keys (e.g., \"#deleted\", \"#archived\")\n * @returns The entity with populated index keys\n */\nfunction indexEntity(entity, suffix = \"\") {\n const result = { ...entity };\n // indexOu is always set (from ou + model)\n result.indexOu = buildIndexOu(entity.ou, entity.model) + suffix;\n // Optional indexes - only set when the source field is present\n if (entity.alias !== undefined) {\n result.indexAlias =\n buildIndexAlias(entity.ou, entity.model, entity.alias) + suffix;\n }\n if (entity.class !== undefined) {\n result.indexClass =\n buildIndexClass(entity.ou, entity.model, entity.class) + suffix;\n }\n if (entity.type !== undefined) {\n result.indexType =\n buildIndexType(entity.ou, entity.model, entity.type) + suffix;\n }\n if (entity.xid !== undefined) {\n result.indexXid =\n buildIndexXid(entity.ou, entity.model, entity.xid) + suffix;\n }\n return result;\n}\n\n/**\n * Get a single entity by primary key\n */\nasync function getEntity(params) {\n const { id, model } = params;\n const docClient = getDocClient();\n const tableName = getTableName();\n const command = new GetCommand({\n Key: { id, model },\n TableName: tableName,\n });\n const response = await docClient.send(command);\n return response.Item ?? null;\n}\n/**\n * Put (create or replace) an entity\n * Auto-populates GSI index keys via indexEntity\n */\nasync function putEntity(params) {\n const { entity } = params;\n const docClient = getDocClient();\n const tableName = getTableName();\n // Auto-populate index keys\n const indexedEntity = indexEntity(entity);\n const command = new PutCommand({\n Item: indexedEntity,\n TableName: tableName,\n });\n await docClient.send(command);\n return indexedEntity;\n}\n/**\n * Update an existing entity\n * Auto-populates GSI index keys and sets updatedAt\n */\nasync function updateEntity(params) {\n const { entity } = params;\n const docClient = getDocClient();\n const tableName = getTableName();\n // Update timestamp and re-index\n const updatedEntity = indexEntity({\n ...entity,\n updatedAt: new Date().toISOString(),\n });\n const command = new PutCommand({\n Item: updatedEntity,\n TableName: tableName,\n });\n await docClient.send(command);\n return updatedEntity;\n}\n/**\n * Calculate suffix based on entity's archived/deleted state\n */\nfunction calculateEntitySuffix(entity) {\n const hasArchived = Boolean(entity.archivedAt);\n const hasDeleted = Boolean(entity.deletedAt);\n if (hasArchived && hasDeleted) {\n return ARCHIVED_SUFFIX + DELETED_SUFFIX;\n }\n if (hasArchived) {\n return ARCHIVED_SUFFIX;\n }\n if (hasDeleted) {\n return DELETED_SUFFIX;\n }\n return \"\";\n}\n/**\n * Soft delete an entity by setting deletedAt timestamp\n * Re-indexes with appropriate suffix based on archived/deleted state\n */\nasync function deleteEntity(params) {\n const { id, model } = params;\n const docClient = getDocClient();\n const tableName = getTableName();\n // Fetch the current entity\n const existing = await getEntity({ id, model });\n if (!existing) {\n return false;\n }\n const now = new Date().toISOString();\n // Build updated entity with deletedAt\n const updatedEntity = {\n ...existing,\n deletedAt: now,\n updatedAt: now,\n };\n // Calculate suffix based on combined state (may already be archived)\n const suffix = calculateEntitySuffix(updatedEntity);\n const deletedEntity = indexEntity(updatedEntity, suffix);\n const command = new PutCommand({\n Item: deletedEntity,\n TableName: tableName,\n });\n await docClient.send(command);\n return true;\n}\n/**\n * Archive an entity by setting archivedAt timestamp\n * Re-indexes with appropriate suffix based on archived/deleted state\n */\nasync function archiveEntity(params) {\n const { id, model } = params;\n const docClient = getDocClient();\n const tableName = getTableName();\n // Fetch the current entity\n const existing = await getEntity({ id, model });\n if (!existing) {\n return false;\n }\n const now = new Date().toISOString();\n // Build updated entity with archivedAt\n const updatedEntity = {\n ...existing,\n archivedAt: now,\n updatedAt: now,\n };\n // Calculate suffix based on combined state (may already be deleted)\n const suffix = calculateEntitySuffix(updatedEntity);\n const archivedEntity = indexEntity(updatedEntity, suffix);\n const command = new PutCommand({\n Item: archivedEntity,\n TableName: tableName,\n });\n await docClient.send(command);\n return true;\n}\n/**\n * Hard delete an entity (permanently removes from table)\n * Use with caution - prefer deleteEntity for soft delete\n */\nasync function destroyEntity(params) {\n const { id, model } = params;\n const docClient = getDocClient();\n const tableName = getTableName();\n const command = new DeleteCommand({\n Key: { id, model },\n TableName: tableName,\n });\n await docClient.send(command);\n return true;\n}\n\n/**\n * Calculate the suffix based on archived/deleted flags\n * When both are true, returns combined suffix (archived first, alphabetically)\n */\nfunction calculateSuffix({ archived, deleted, }) {\n if (archived && deleted) {\n return ARCHIVED_SUFFIX + DELETED_SUFFIX;\n }\n if (archived) {\n return ARCHIVED_SUFFIX;\n }\n if (deleted) {\n return DELETED_SUFFIX;\n }\n return \"\";\n}\n/**\n * Execute a GSI query with common options\n */\nasync function executeQuery(indexName, keyValue, options = {}) {\n const { ascending = false, limit, startKey } = options;\n const docClient = getDocClient();\n const tableName = getTableName();\n const command = new QueryCommand({\n ExclusiveStartKey: startKey,\n ExpressionAttributeNames: {\n \"#pk\": indexName,\n },\n ExpressionAttributeValues: {\n \":pkValue\": keyValue,\n },\n IndexName: indexName,\n KeyConditionExpression: \"#pk = :pkValue\",\n ...(limit && { Limit: limit }),\n ScanIndexForward: ascending,\n TableName: tableName,\n });\n const response = await docClient.send(command);\n return {\n items: (response.Items ?? []),\n lastEvaluatedKey: response.LastEvaluatedKey,\n };\n}\n/**\n * Query entities by organizational unit (parent hierarchy)\n * Uses indexOu GSI\n *\n * @param params.archived - Query archived entities instead of active ones\n * @param params.deleted - Query deleted entities instead of active ones\n * @throws ConfigurationError if both archived and deleted are true\n */\nasync function queryByOu(params) {\n const { archived, deleted, model, ou, ...options } = params;\n const suffix = calculateSuffix({ archived, deleted });\n const keyValue = buildIndexOu(ou, model) + suffix;\n return executeQuery(INDEX_OU, keyValue, options);\n}\n/**\n * Query a single entity by human-friendly alias\n * Uses indexAlias GSI\n *\n * @param params.archived - Query archived entities instead of active ones\n * @param params.deleted - Query deleted entities instead of active ones\n * @throws ConfigurationError if both archived and deleted are true\n * @returns The matching entity or null if not found\n */\nasync function queryByAlias(params) {\n const { alias, archived, deleted, model, ou } = params;\n const suffix = calculateSuffix({ archived, deleted });\n const keyValue = buildIndexAlias(ou, model, alias) + suffix;\n const result = await executeQuery(INDEX_ALIAS, keyValue, { limit: 1 });\n return result.items[0] ?? null;\n}\n/**\n * Query entities by category classification\n * Uses indexClass GSI\n *\n * @param params.archived - Query archived entities instead of active ones\n * @param params.deleted - Query deleted entities instead of active ones\n * @throws ConfigurationError if both archived and deleted are true\n */\nasync function queryByClass(params) {\n const { archived, deleted, model, ou, recordClass, ...options } = params;\n const suffix = calculateSuffix({ archived, deleted });\n const keyValue = buildIndexClass(ou, model, recordClass) + suffix;\n return executeQuery(INDEX_CLASS, keyValue, options);\n}\n/**\n * Query entities by type classification\n * Uses indexType GSI\n *\n * @param params.archived - Query archived entities instead of active ones\n * @param params.deleted - Query deleted entities instead of active ones\n * @throws ConfigurationError if both archived and deleted are true\n */\nasync function queryByType(params) {\n const { archived, deleted, model, ou, type, ...options } = params;\n const suffix = calculateSuffix({ archived, deleted });\n const keyValue = buildIndexType(ou, model, type) + suffix;\n return executeQuery(INDEX_TYPE, keyValue, options);\n}\n/**\n * Query a single entity by external ID\n * Uses indexXid GSI\n *\n * @param params.archived - Query archived entities instead of active ones\n * @param params.deleted - Query deleted entities instead of active ones\n * @throws ConfigurationError if both archived and deleted are true\n * @returns The matching entity or null if not found\n */\nasync function queryByXid(params) {\n const { archived, deleted, model, ou, xid } = params;\n const suffix = calculateSuffix({ archived, deleted });\n const keyValue = buildIndexXid(ou, model, xid) + suffix;\n const result = await executeQuery(INDEX_XID, keyValue, { limit: 1 });\n return result.items[0] ?? null;\n}\n\nexport { APEX, ARCHIVED_SUFFIX, DELETED_SUFFIX, INDEX_ALIAS, INDEX_CLASS, INDEX_OU, INDEX_TYPE, INDEX_XID, SEPARATOR, archiveEntity, buildIndexAlias, buildIndexClass, buildIndexOu, buildIndexType, buildIndexXid, calculateOu, deleteEntity, destroyEntity, getDocClient, getEntity, getTableName, indexEntity, initClient, isInitialized, putEntity, queryByAlias, queryByClass, queryByOu, queryByType, queryByXid, resetClient, updateEntity };\n//# sourceMappingURL=index.js.map\n","import * as original from \"@jaypie/dynamodb\";\nimport type {\n ArchiveEntityParams,\n BaseQueryOptions,\n DeleteEntityParams,\n DynamoClientConfig,\n FabricEntity,\n GetEntityParams,\n ParentReference,\n PutEntityParams,\n QueryByAliasParams,\n QueryByClassParams,\n QueryByOuParams,\n QueryByTypeParams,\n QueryByXidParams,\n QueryResult,\n UpdateEntityParams,\n} from \"@jaypie/dynamodb\";\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 DELETED_SUFFIX = original.DELETED_SUFFIX;\nexport const INDEX_ALIAS = original.INDEX_ALIAS;\nexport const INDEX_CLASS = original.INDEX_CLASS;\nexport const INDEX_OU = original.INDEX_OU;\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 buildIndexAlias = createMockFunction<\n (ou: string, model: string, alias: string) => string\n>((ou, model, alias) => original.buildIndexAlias(ou, model, alias));\n\nexport const buildIndexClass = createMockFunction<\n (ou: string, model: string, recordClass: string) => string\n>((ou, model, recordClass) => original.buildIndexClass(ou, model, recordClass));\n\nexport const buildIndexOu = createMockFunction<\n (ou: string, model: string) => string\n>((ou, model) => original.buildIndexOu(ou, model));\n\nexport const buildIndexType = createMockFunction<\n (ou: string, model: string, type: string) => string\n>((ou, model, type) => original.buildIndexType(ou, model, type));\n\nexport const buildIndexXid = createMockFunction<\n (ou: string, model: string, xid: string) => string\n>((ou, model, xid) => original.buildIndexXid(ou, model, xid));\n\nexport const calculateOu = createMockFunction<\n (parent?: ParentReference) => string\n>((parent) => original.calculateOu(parent));\n\nexport const indexEntity = createMockFunction<\n <T extends FabricEntity>(entity: T, suffix?: string) => T\n>(<T extends FabricEntity>(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 - return mock data\nexport const getEntity = createMockFunction<\n <T extends FabricEntity = FabricEntity>(\n params: GetEntityParams,\n ) => Promise<T | null>\n>(async () => null);\n\nexport const putEntity = createMockFunction<\n <T extends FabricEntity>(params: PutEntityParams<T>) => Promise<T>\n>(async <T extends FabricEntity>(params: PutEntityParams<T>) =>\n original.indexEntity(params.entity),\n);\n\nexport const updateEntity = createMockFunction<\n <T extends FabricEntity>(params: UpdateEntityParams<T>) => Promise<T>\n>(async <T extends FabricEntity>(params: UpdateEntityParams<T>) => ({\n ...original.indexEntity(params.entity),\n updatedAt: new Date().toISOString(),\n}));\n\nexport const deleteEntity = createMockFunction<\n (params: DeleteEntityParams) => Promise<boolean>\n>(async () => true);\n\nexport const archiveEntity = createMockFunction<\n (params: ArchiveEntityParams) => Promise<boolean>\n>(async () => true);\n\nexport const destroyEntity = createMockFunction<\n (params: DeleteEntityParams) => Promise<boolean>\n>(async () => true);\n\n// Query functions - return empty results by default (use object params)\nexport const queryByOu = createMockFunction<\n <T extends FabricEntity = FabricEntity>(\n params: QueryByOuParams,\n ) => Promise<QueryResult<T>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\nexport const queryByAlias = createMockFunction<\n <T extends FabricEntity = FabricEntity>(\n params: QueryByAliasParams,\n ) => Promise<T | null>\n>(async () => null);\n\nexport const queryByClass = createMockFunction<\n <T extends FabricEntity = FabricEntity>(\n params: QueryByClassParams,\n ) => Promise<QueryResult<T>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\nexport const queryByType = createMockFunction<\n <T extends FabricEntity = FabricEntity>(\n params: QueryByTypeParams,\n ) => Promise<QueryResult<T>>\n>(async () => ({\n items: [],\n lastEvaluatedKey: undefined,\n}));\n\nexport const queryByXid = createMockFunction<\n <T extends FabricEntity = FabricEntity>(\n params: QueryByXidParams,\n ) => Promise<T | null>\n>(async () => null);\n\n// Re-export types for convenience\nexport type { BaseQueryOptions, FabricEntity, ParentReference, QueryResult };\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport { createMockFunction, createMockWrappedFunction } 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\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\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 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","// Mock implementations for @jaypie/vocabulary\n\nimport { createMockFunction } from \"./utils\";\nimport { lambdaHandler } from \"./lambda\";\nimport { getMessages } from \"./aws\";\n\n// Status Type - re-export real values (no mocking needed)\nexport const STATUS_VALUES = [\n \"canceled\",\n \"complete\",\n \"error\",\n \"pending\",\n \"processing\",\n \"queued\",\n \"sending\",\n] as const;\n\nexport type Status = (typeof STATUS_VALUES)[number];\n\nexport const StatusType = [...STATUS_VALUES] as (\n | \"canceled\"\n | \"complete\"\n | \"error\"\n | \"pending\"\n | \"processing\"\n | \"queued\"\n | \"sending\"\n)[];\n\nexport function isStatus(value: unknown): value is Status {\n return (\n typeof value === \"string\" &&\n STATUS_VALUES.includes(value as (typeof STATUS_VALUES)[number])\n );\n}\n\n// Vocabulary types\ntype ServiceHandlerFunction = (\n input?: Record<string, unknown> | string,\n) => Promise<unknown>;\n\ninterface ServiceHandlerFunctionWithMetadata extends ServiceHandlerFunction {\n alias?: string;\n description?: string;\n input?: Record<string, InputFieldDefinition>;\n}\n\ninterface InputFieldDefinition {\n default?: unknown;\n description?: string;\n required?: boolean;\n type: unknown;\n}\n\ninterface LambdaServiceHandlerOptions {\n chaos?: string;\n name?: string;\n secrets?: string[];\n setup?: ((...args: unknown[]) => void | Promise<void>)[];\n teardown?: ((...args: unknown[]) => void | Promise<void>)[];\n throw?: boolean;\n unavailable?: boolean;\n validate?: ((...args: unknown[]) => unknown | Promise<unknown>)[];\n}\n\ninterface LambdaServiceHandlerConfig extends LambdaServiceHandlerOptions {\n handler: ServiceHandlerFunction;\n}\n\n// Handler function type - must match what lambdaHandler returns\ntype HandlerFunction = (...args: unknown[]) => unknown;\n\n/**\n * Mock implementation of lambdaServiceHandler\n * Mirrors the real implementation: wraps a service handler for Lambda with getMessages processing\n */\nexport const lambdaServiceHandler = createMockFunction<\n (\n handlerOrConfig: ServiceHandlerFunction | LambdaServiceHandlerConfig,\n options?: LambdaServiceHandlerOptions,\n ) => HandlerFunction\n>((handlerOrConfig, options = {}) => {\n // Normalize arguments\n let handler: ServiceHandlerFunction;\n let opts: LambdaServiceHandlerOptions;\n\n if (typeof handlerOrConfig === \"function\") {\n handler = handlerOrConfig;\n opts = options;\n } else {\n const { handler: configHandler, ...configOpts } = handlerOrConfig;\n handler = configHandler;\n opts = configOpts;\n }\n\n // Use handler.alias as the name for logging (can be overridden via options.name)\n const name = opts.name ?? (handler as { alias?: string }).alias;\n\n // Create the inner Lambda handler logic\n const innerHandler = async (event: unknown): Promise<unknown> => {\n // Extract messages from SQS/SNS event wrapper\n const messages = getMessages(event);\n\n // Process each message through the service handler\n const results: unknown[] = [];\n for (const message of messages) {\n const result = await handler(message as Record<string, unknown>);\n results.push(result);\n }\n\n // Return single result if only one message, otherwise return array\n if (results.length === 1) {\n return results[0];\n }\n return results;\n };\n\n // Wrap with lambdaHandler for lifecycle management\n return lambdaHandler(innerHandler, {\n chaos: opts.chaos,\n name,\n secrets: opts.secrets,\n setup: opts.setup,\n teardown: opts.teardown,\n throw: opts.throw,\n unavailable: opts.unavailable,\n validate: opts.validate,\n });\n});\n\n// LLM adapter types\ninterface LlmTool {\n call: (args?: Record<string, unknown>) => Promise<unknown> | unknown;\n description: string;\n message?:\n | string\n | ((\n args?: Record<string, unknown>,\n context?: { name: string },\n ) => Promise<string> | string);\n name: string;\n parameters: Record<string, unknown>;\n type: \"function\" | string;\n}\n\ninterface CreateLlmToolConfig {\n description?: string;\n exclude?: string[];\n handler: ServiceHandlerFunctionWithMetadata;\n message?: string | ((args?: Record<string, unknown>) => string);\n name?: string;\n}\n\ninterface CreateLlmToolResult {\n tool: LlmTool;\n}\n\n/**\n * Mock implementation of createLlmTool\n * Creates an LLM tool from a vocabulary service handler\n */\nexport const createLlmTool = createMockFunction<\n (config: CreateLlmToolConfig) => CreateLlmToolResult\n>((config) => {\n const { description, handler, message, name } = config;\n\n const toolName = name ?? handler.alias ?? \"tool\";\n const toolDescription = description ?? handler.description ?? \"\";\n\n const tool: LlmTool = {\n call: async (args?: Record<string, unknown>): Promise<unknown> => {\n return handler(args);\n },\n description: toolDescription,\n name: toolName,\n parameters: {\n properties: {},\n required: [],\n type: \"object\",\n },\n type: \"function\",\n };\n\n if (message !== undefined) {\n tool.message = message;\n }\n\n return { tool };\n});\n\n/**\n * Mock implementation of inputToJsonSchema\n * Converts vocabulary input definitions to JSON Schema\n */\nexport const inputToJsonSchema = createMockFunction<\n (\n input?: Record<string, InputFieldDefinition>,\n options?: { exclude?: string[] },\n ) => Record<string, unknown>\n>(() => ({\n properties: {},\n required: [],\n type: \"object\",\n}));\n\n// MCP adapter types\ninterface McpToolResponse {\n content: Array<{ text: string; type: \"text\" }>;\n}\n\ninterface McpServer {\n tool: (\n name: string,\n description: string,\n schema: Record<string, unknown>,\n handler: (args: Record<string, unknown>) => Promise<McpToolResponse>,\n ) => void;\n}\n\ninterface RegisterMcpToolConfig {\n description?: string;\n handler: ServiceHandlerFunctionWithMetadata;\n name?: string;\n server: McpServer;\n}\n\ninterface RegisterMcpToolResult {\n name: string;\n}\n\n/**\n * Mock implementation of registerMcpTool\n * Registers a vocabulary service handler as an MCP tool\n */\nexport const registerMcpTool = createMockFunction<\n (config: RegisterMcpToolConfig) => RegisterMcpToolResult\n>((config) => {\n const { description, handler, name, server } = config;\n\n const toolName = name ?? handler.alias ?? \"tool\";\n const toolDescription = description ?? handler.description ?? \"\";\n\n server.tool(\n toolName,\n toolDescription,\n {},\n async (args: Record<string, unknown>): Promise<McpToolResponse> => {\n const result = await handler(args);\n return {\n content: [\n {\n text: result === undefined || result === null ? \"\" : String(result),\n type: \"text\" as const,\n },\n ],\n };\n },\n );\n\n return { name: toolName };\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\";\nimport * as vocabulary from \"./vocabulary\";\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\";\nexport * from \"./vocabulary\";\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 // Vocabulary module\n ...vocabulary,\n};\n\nexport default mock;\n"],"names":["TAG","kit","HTTP","original","APEX","SEPARATOR","INDEX_ALIAS","INDEX_CLASS","INDEX_OU","INDEX_TYPE","INDEX_XID","ARCHIVED_SUFFIX","DELETED_SUFFIX","buildIndexOu","buildIndexAlias","buildIndexClass","buildIndexType","buildIndexXid","calculateOu","indexEntity","original.APEX","original.ARCHIVED_SUFFIX","original.DELETED_SUFFIX","original.INDEX_ALIAS","original.INDEX_CLASS","original.INDEX_OU","original.INDEX_TYPE","original.INDEX_XID","original.SEPARATOR","original.buildIndexAlias","original.buildIndexClass","original.buildIndexOu","original.buildIndexType","original.buildIndexXid","original.calculateOu","original.indexEntity","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/vocabulary.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 formatSSE = createMockFunction<\n (chunk: { type: string; [key: string]: unknown }) => string\n>((chunk) => `event: ${chunk.type}\\ndata: ${JSON.stringify(chunk)}\\n\\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 FabricEntity,\n ParentReference,\n QueryResult,\n} from \"@jaypie/dynamodb\";\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 DELETED_SUFFIX = original.DELETED_SUFFIX;\nexport const INDEX_ALIAS = original.INDEX_ALIAS;\nexport const INDEX_CLASS = original.INDEX_CLASS;\nexport const INDEX_OU = original.INDEX_OU;\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 buildIndexAlias = createMockFunction<\n (ou: string, model: string, alias: string) => string\n>((ou, model, alias) => original.buildIndexAlias(ou, model, alias));\n\nexport const buildIndexClass = createMockFunction<\n (ou: string, model: string, recordClass: string) => string\n>((ou, model, recordClass) => original.buildIndexClass(ou, model, recordClass));\n\nexport const buildIndexOu = createMockFunction<\n (ou: string, model: string) => string\n>((ou, model) => original.buildIndexOu(ou, model));\n\nexport const buildIndexType = createMockFunction<\n (ou: string, model: string, type: string) => string\n>((ou, model, type) => original.buildIndexType(ou, model, type));\n\nexport const buildIndexXid = createMockFunction<\n (ou: string, model: string, xid: string) => string\n>((ou, model, xid) => original.buildIndexXid(ou, model, xid));\n\nexport const calculateOu = createMockFunction<\n (parent?: ParentReference) => string\n>((parent) => original.calculateOu(parent));\n\nexport const indexEntity = createMockFunction<\n <T extends FabricEntity>(entity: T, suffix?: string) => T\n>(<T extends FabricEntity>(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<FabricEntity | null>\n>(async () => null);\n\nexport const putEntity = createMockFunction<\n (params: { entity: FabricEntity }) => Promise<FabricEntity>\n>(async (params: { entity: FabricEntity }) =>\n original.indexEntity(params.entity),\n);\n\nexport const updateEntity = createMockFunction<\n (params: { entity: FabricEntity }) => Promise<FabricEntity>\n>(async (params: { entity: FabricEntity }) => ({\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 queryByOu = createMockFunction<\n (params: {\n model: string;\n ou: string;\n archived?: boolean;\n ascending?: boolean;\n deleted?: boolean;\n limit?: number;\n startKey?: Record<string, unknown>;\n }) => Promise<QueryResult<FabricEntity>>\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 ou: string;\n }) => Promise<FabricEntity | 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 ou: string;\n recordClass: string;\n startKey?: Record<string, unknown>;\n }) => Promise<QueryResult<FabricEntity>>\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 ou: string;\n startKey?: Record<string, unknown>;\n type: string;\n }) => Promise<QueryResult<FabricEntity>>\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 ou: string;\n xid: string;\n }) => Promise<FabricEntity | null>\n>(async () => null);\n\n// Re-export types for convenience\nexport type { BaseQueryOptions, FabricEntity, ParentReference, QueryResult };\n","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport { createMockFunction, createMockWrappedFunction } 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\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\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 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","// Mock implementations for @jaypie/vocabulary\n\nimport { createMockFunction } from \"./utils\";\nimport { lambdaHandler } from \"./lambda\";\nimport { getMessages } from \"./aws\";\n\n// Status Type - re-export real values (no mocking needed)\nexport const STATUS_VALUES = [\n \"canceled\",\n \"complete\",\n \"error\",\n \"pending\",\n \"processing\",\n \"queued\",\n \"sending\",\n] as const;\n\nexport type Status = (typeof STATUS_VALUES)[number];\n\nexport const StatusType = [...STATUS_VALUES] as (\n | \"canceled\"\n | \"complete\"\n | \"error\"\n | \"pending\"\n | \"processing\"\n | \"queued\"\n | \"sending\"\n)[];\n\nexport function isStatus(value: unknown): value is Status {\n return (\n typeof value === \"string\" &&\n STATUS_VALUES.includes(value as (typeof STATUS_VALUES)[number])\n );\n}\n\n// Vocabulary types\ntype ServiceHandlerFunction = (\n input?: Record<string, unknown> | string,\n) => Promise<unknown>;\n\ninterface ServiceHandlerFunctionWithMetadata extends ServiceHandlerFunction {\n alias?: string;\n description?: string;\n input?: Record<string, InputFieldDefinition>;\n}\n\ninterface InputFieldDefinition {\n default?: unknown;\n description?: string;\n required?: boolean;\n type: unknown;\n}\n\ninterface LambdaServiceHandlerOptions {\n chaos?: string;\n name?: string;\n secrets?: string[];\n setup?: ((...args: unknown[]) => void | Promise<void>)[];\n teardown?: ((...args: unknown[]) => void | Promise<void>)[];\n throw?: boolean;\n unavailable?: boolean;\n validate?: ((...args: unknown[]) => unknown | Promise<unknown>)[];\n}\n\ninterface LambdaServiceHandlerConfig extends LambdaServiceHandlerOptions {\n handler: ServiceHandlerFunction;\n}\n\n// Handler function type - must match what lambdaHandler returns\ntype HandlerFunction = (...args: unknown[]) => unknown;\n\n/**\n * Mock implementation of lambdaServiceHandler\n * Mirrors the real implementation: wraps a service handler for Lambda with getMessages processing\n */\nexport const lambdaServiceHandler = createMockFunction<\n (\n handlerOrConfig: ServiceHandlerFunction | LambdaServiceHandlerConfig,\n options?: LambdaServiceHandlerOptions,\n ) => HandlerFunction\n>((handlerOrConfig, options = {}) => {\n // Normalize arguments\n let handler: ServiceHandlerFunction;\n let opts: LambdaServiceHandlerOptions;\n\n if (typeof handlerOrConfig === \"function\") {\n handler = handlerOrConfig;\n opts = options;\n } else {\n const { handler: configHandler, ...configOpts } = handlerOrConfig;\n handler = configHandler;\n opts = configOpts;\n }\n\n // Use handler.alias as the name for logging (can be overridden via options.name)\n const name = opts.name ?? (handler as { alias?: string }).alias;\n\n // Create the inner Lambda handler logic\n const innerHandler = async (event: unknown): Promise<unknown> => {\n // Extract messages from SQS/SNS event wrapper\n const messages = getMessages(event);\n\n // Process each message through the service handler\n const results: unknown[] = [];\n for (const message of messages) {\n const result = await handler(message as Record<string, unknown>);\n results.push(result);\n }\n\n // Return single result if only one message, otherwise return array\n if (results.length === 1) {\n return results[0];\n }\n return results;\n };\n\n // Wrap with lambdaHandler for lifecycle management\n return lambdaHandler(innerHandler, {\n chaos: opts.chaos,\n name,\n secrets: opts.secrets,\n setup: opts.setup,\n teardown: opts.teardown,\n throw: opts.throw,\n unavailable: opts.unavailable,\n validate: opts.validate,\n });\n});\n\n// LLM adapter types\ninterface LlmTool {\n call: (args?: Record<string, unknown>) => Promise<unknown> | unknown;\n description: string;\n message?:\n | string\n | ((\n args?: Record<string, unknown>,\n context?: { name: string },\n ) => Promise<string> | string);\n name: string;\n parameters: Record<string, unknown>;\n type: \"function\" | string;\n}\n\ninterface CreateLlmToolConfig {\n description?: string;\n exclude?: string[];\n handler: ServiceHandlerFunctionWithMetadata;\n message?: string | ((args?: Record<string, unknown>) => string);\n name?: string;\n}\n\ninterface CreateLlmToolResult {\n tool: LlmTool;\n}\n\n/**\n * Mock implementation of createLlmTool\n * Creates an LLM tool from a vocabulary service handler\n */\nexport const createLlmTool = createMockFunction<\n (config: CreateLlmToolConfig) => CreateLlmToolResult\n>((config) => {\n const { description, handler, message, name } = config;\n\n const toolName = name ?? handler.alias ?? \"tool\";\n const toolDescription = description ?? handler.description ?? \"\";\n\n const tool: LlmTool = {\n call: async (args?: Record<string, unknown>): Promise<unknown> => {\n return handler(args);\n },\n description: toolDescription,\n name: toolName,\n parameters: {\n properties: {},\n required: [],\n type: \"object\",\n },\n type: \"function\",\n };\n\n if (message !== undefined) {\n tool.message = message;\n }\n\n return { tool };\n});\n\n/**\n * Mock implementation of inputToJsonSchema\n * Converts vocabulary input definitions to JSON Schema\n */\nexport const inputToJsonSchema = createMockFunction<\n (\n input?: Record<string, InputFieldDefinition>,\n options?: { exclude?: string[] },\n ) => Record<string, unknown>\n>(() => ({\n properties: {},\n required: [],\n type: \"object\",\n}));\n\n// MCP adapter types\ninterface McpToolResponse {\n content: Array<{ text: string; type: \"text\" }>;\n}\n\ninterface McpServer {\n tool: (\n name: string,\n description: string,\n schema: Record<string, unknown>,\n handler: (args: Record<string, unknown>) => Promise<McpToolResponse>,\n ) => void;\n}\n\ninterface RegisterMcpToolConfig {\n description?: string;\n handler: ServiceHandlerFunctionWithMetadata;\n name?: string;\n server: McpServer;\n}\n\ninterface RegisterMcpToolResult {\n name: string;\n}\n\n/**\n * Mock implementation of registerMcpTool\n * Registers a vocabulary service handler as an MCP tool\n */\nexport const registerMcpTool = createMockFunction<\n (config: RegisterMcpToolConfig) => RegisterMcpToolResult\n>((config) => {\n const { description, handler, name, server } = config;\n\n const toolName = name ?? handler.alias ?? \"tool\";\n const toolDescription = description ?? handler.description ?? \"\";\n\n server.tool(\n toolName,\n toolDescription,\n {},\n async (args: Record<string, unknown>): Promise<McpToolResponse> => {\n const result = await handler(args);\n return {\n content: [\n {\n text: result === undefined || result === null ? \"\" : String(result),\n type: \"text\" as const,\n },\n ],\n };\n },\n );\n\n return { name: toolName };\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\";\nimport * as vocabulary from \"./vocabulary\";\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\";\nexport * from \"./vocabulary\";\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 // Vocabulary module\n ...vocabulary,\n};\n\nexport default mock;\n"],"names":["TAG","kit","HTTP","original","BadRequestError","UnhandledError","originalCreateLogger","__filename","__dirname","textract"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import * as original from "@jaypie/dynamodb";
2
- import type { ArchiveEntityParams, BaseQueryOptions, DeleteEntityParams, DynamoClientConfig, FabricEntity, GetEntityParams, ParentReference, PutEntityParams, QueryByAliasParams, QueryByClassParams, QueryByOuParams, QueryByTypeParams, QueryByXidParams, QueryResult, UpdateEntityParams } from "@jaypie/dynamodb";
1
+ import type { BaseQueryOptions, DynamoClientConfig, FabricEntity, ParentReference, QueryResult } from "@jaypie/dynamodb";
3
2
  export declare const APEX = "@";
4
3
  export declare const ARCHIVED_SUFFIX = "#archived";
5
4
  export declare const DELETED_SUFFIX = "#deleted";
@@ -45,37 +44,91 @@ export declare const isInitialized: ((...args: any[]) => any) & {
45
44
  export declare const resetClient: ((...args: any[]) => any) & {
46
45
  mock: any;
47
46
  };
48
- export declare const getEntity: (<T extends FabricEntity = original.FabricEntity>(params: GetEntityParams) => Promise<T | null>) & {
47
+ export declare const getEntity: ((params: {
48
+ id: string;
49
+ model: string;
50
+ }) => Promise<FabricEntity | null>) & {
49
51
  mock: any;
50
52
  };
51
- export declare const putEntity: (<T extends FabricEntity>(params: PutEntityParams<T>) => Promise<T>) & {
53
+ export declare const putEntity: ((params: {
54
+ entity: FabricEntity;
55
+ }) => Promise<FabricEntity>) & {
52
56
  mock: any;
53
57
  };
54
- export declare const updateEntity: (<T extends FabricEntity>(params: UpdateEntityParams<T>) => Promise<T>) & {
58
+ export declare const updateEntity: ((params: {
59
+ entity: FabricEntity;
60
+ }) => Promise<FabricEntity>) & {
55
61
  mock: any;
56
62
  };
57
- export declare const deleteEntity: ((params: DeleteEntityParams) => Promise<boolean>) & {
63
+ export declare const deleteEntity: ((params: {
64
+ id: string;
65
+ model: string;
66
+ }) => Promise<boolean>) & {
58
67
  mock: any;
59
68
  };
60
- export declare const archiveEntity: ((params: ArchiveEntityParams) => Promise<boolean>) & {
69
+ export declare const archiveEntity: ((params: {
70
+ id: string;
71
+ model: string;
72
+ }) => Promise<boolean>) & {
61
73
  mock: any;
62
74
  };
63
- export declare const destroyEntity: ((params: DeleteEntityParams) => Promise<boolean>) & {
75
+ export declare const destroyEntity: ((params: {
76
+ id: string;
77
+ model: string;
78
+ }) => Promise<boolean>) & {
64
79
  mock: any;
65
80
  };
66
- export declare const queryByOu: (<T extends FabricEntity = original.FabricEntity>(params: QueryByOuParams) => Promise<QueryResult<T>>) & {
81
+ export declare const queryByOu: ((params: {
82
+ model: string;
83
+ ou: string;
84
+ archived?: boolean;
85
+ ascending?: boolean;
86
+ deleted?: boolean;
87
+ limit?: number;
88
+ startKey?: Record<string, unknown>;
89
+ }) => Promise<QueryResult<FabricEntity>>) & {
67
90
  mock: any;
68
91
  };
69
- export declare const queryByAlias: (<T extends FabricEntity = original.FabricEntity>(params: QueryByAliasParams) => Promise<T | null>) & {
92
+ export declare const queryByAlias: ((params: {
93
+ alias: string;
94
+ archived?: boolean;
95
+ deleted?: boolean;
96
+ model: string;
97
+ ou: string;
98
+ }) => Promise<FabricEntity | null>) & {
70
99
  mock: any;
71
100
  };
72
- export declare const queryByClass: (<T extends FabricEntity = original.FabricEntity>(params: QueryByClassParams) => Promise<QueryResult<T>>) & {
101
+ export declare const queryByClass: ((params: {
102
+ archived?: boolean;
103
+ ascending?: boolean;
104
+ deleted?: boolean;
105
+ limit?: number;
106
+ model: string;
107
+ ou: string;
108
+ recordClass: string;
109
+ startKey?: Record<string, unknown>;
110
+ }) => Promise<QueryResult<FabricEntity>>) & {
73
111
  mock: any;
74
112
  };
75
- export declare const queryByType: (<T extends FabricEntity = original.FabricEntity>(params: QueryByTypeParams) => Promise<QueryResult<T>>) & {
113
+ export declare const queryByType: ((params: {
114
+ archived?: boolean;
115
+ ascending?: boolean;
116
+ deleted?: boolean;
117
+ limit?: number;
118
+ model: string;
119
+ ou: string;
120
+ startKey?: Record<string, unknown>;
121
+ type: string;
122
+ }) => Promise<QueryResult<FabricEntity>>) & {
76
123
  mock: any;
77
124
  };
78
- export declare const queryByXid: (<T extends FabricEntity = original.FabricEntity>(params: QueryByXidParams) => Promise<T | null>) & {
125
+ export declare const queryByXid: ((params: {
126
+ archived?: boolean;
127
+ deleted?: boolean;
128
+ model: string;
129
+ ou: string;
130
+ xid: string;
131
+ }) => Promise<FabricEntity | null>) & {
79
132
  mock: any;
80
133
  };
81
134
  export type { BaseQueryOptions, FabricEntity, ParentReference, QueryResult };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/testkit",
3
- "version": "1.2.7",
3
+ "version": "1.2.9",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/finlaysonstudio/jaypie.git"