@api-client/core 0.19.1 → 0.19.2

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.
Files changed (117) hide show
  1. package/build/src/mocking/ModelingMock.d.ts +2 -0
  2. package/build/src/mocking/ModelingMock.d.ts.map +1 -1
  3. package/build/src/mocking/ModelingMock.js +2 -0
  4. package/build/src/mocking/ModelingMock.js.map +1 -1
  5. package/build/src/mocking/lib/Ai.d.ts +11 -0
  6. package/build/src/mocking/lib/Ai.d.ts.map +1 -0
  7. package/build/src/mocking/lib/Ai.js +53 -0
  8. package/build/src/mocking/lib/Ai.js.map +1 -0
  9. package/build/src/modeling/ai/DataDomainDelta.d.ts +146 -0
  10. package/build/src/modeling/ai/DataDomainDelta.d.ts.map +1 -0
  11. package/build/src/modeling/ai/DataDomainDelta.js +729 -0
  12. package/build/src/modeling/ai/DataDomainDelta.js.map +1 -0
  13. package/build/src/modeling/ai/DomainSerialization.d.ts +20 -0
  14. package/build/src/modeling/ai/DomainSerialization.d.ts.map +1 -0
  15. package/build/src/modeling/ai/DomainSerialization.js +185 -0
  16. package/build/src/modeling/ai/DomainSerialization.js.map +1 -0
  17. package/build/src/modeling/ai/domain_response_schema.d.ts +806 -0
  18. package/build/src/modeling/ai/domain_response_schema.d.ts.map +1 -0
  19. package/build/src/modeling/ai/domain_response_schema.js +289 -0
  20. package/build/src/modeling/ai/domain_response_schema.js.map +1 -0
  21. package/build/src/modeling/ai/domain_tools.d.ts +68 -0
  22. package/build/src/modeling/ai/domain_tools.d.ts.map +1 -0
  23. package/build/src/modeling/ai/domain_tools.js +71 -0
  24. package/build/src/modeling/ai/domain_tools.js.map +1 -0
  25. package/build/src/modeling/ai/index.d.ts +10 -0
  26. package/build/src/modeling/ai/index.d.ts.map +1 -0
  27. package/build/src/modeling/ai/index.js +9 -0
  28. package/build/src/modeling/ai/index.js.map +1 -0
  29. package/build/src/modeling/ai/message_parser.d.ts +23 -0
  30. package/build/src/modeling/ai/message_parser.d.ts.map +1 -0
  31. package/build/src/modeling/ai/message_parser.js +93 -0
  32. package/build/src/modeling/ai/message_parser.js.map +1 -0
  33. package/build/src/modeling/ai/prompts/domain_system.d.ts +6 -0
  34. package/build/src/modeling/ai/prompts/domain_system.d.ts.map +1 -0
  35. package/build/src/modeling/ai/prompts/domain_system.js +80 -0
  36. package/build/src/modeling/ai/prompts/domain_system.js.map +1 -0
  37. package/build/src/modeling/ai/tools/DataDomain.tools.d.ts +25 -0
  38. package/build/src/modeling/ai/tools/DataDomain.tools.d.ts.map +1 -0
  39. package/build/src/modeling/ai/tools/DataDomain.tools.js +334 -0
  40. package/build/src/modeling/ai/tools/DataDomain.tools.js.map +1 -0
  41. package/build/src/modeling/ai/tools/Semantic.tools.d.ts +48 -0
  42. package/build/src/modeling/ai/tools/Semantic.tools.d.ts.map +1 -0
  43. package/build/src/modeling/ai/tools/Semantic.tools.js +36 -0
  44. package/build/src/modeling/ai/tools/Semantic.tools.js.map +1 -0
  45. package/build/src/modeling/ai/tools/config.d.ts +13 -0
  46. package/build/src/modeling/ai/tools/config.d.ts.map +1 -0
  47. package/build/src/modeling/ai/tools/config.js +2 -0
  48. package/build/src/modeling/ai/tools/config.js.map +1 -0
  49. package/build/src/modeling/ai/types.d.ts +302 -0
  50. package/build/src/modeling/ai/types.d.ts.map +1 -0
  51. package/build/src/modeling/ai/types.js +40 -0
  52. package/build/src/modeling/ai/types.js.map +1 -0
  53. package/build/src/models/AiMessage.d.ts +185 -0
  54. package/build/src/models/AiMessage.d.ts.map +1 -0
  55. package/build/src/models/AiMessage.js +203 -0
  56. package/build/src/models/AiMessage.js.map +1 -0
  57. package/build/src/models/AiSession.d.ts +80 -0
  58. package/build/src/models/AiSession.d.ts.map +1 -0
  59. package/build/src/models/AiSession.js +102 -0
  60. package/build/src/models/AiSession.js.map +1 -0
  61. package/build/src/models/kinds.d.ts +2 -0
  62. package/build/src/models/kinds.d.ts.map +1 -1
  63. package/build/src/models/kinds.js +2 -0
  64. package/build/src/models/kinds.js.map +1 -1
  65. package/build/src/sdk/AiSdk.d.ts +93 -0
  66. package/build/src/sdk/AiSdk.d.ts.map +1 -0
  67. package/build/src/sdk/AiSdk.js +348 -0
  68. package/build/src/sdk/AiSdk.js.map +1 -0
  69. package/build/src/sdk/RouteBuilder.d.ts +7 -0
  70. package/build/src/sdk/RouteBuilder.d.ts.map +1 -1
  71. package/build/src/sdk/RouteBuilder.js +18 -0
  72. package/build/src/sdk/RouteBuilder.js.map +1 -1
  73. package/build/src/sdk/Sdk.d.ts +2 -0
  74. package/build/src/sdk/Sdk.d.ts.map +1 -1
  75. package/build/src/sdk/Sdk.js +2 -0
  76. package/build/src/sdk/Sdk.js.map +1 -1
  77. package/build/src/sdk/SdkBase.d.ts +4 -0
  78. package/build/src/sdk/SdkBase.d.ts.map +1 -1
  79. package/build/src/sdk/SdkBase.js.map +1 -1
  80. package/build/src/sdk/SdkMock.d.ts +15 -0
  81. package/build/src/sdk/SdkMock.d.ts.map +1 -1
  82. package/build/src/sdk/SdkMock.js +118 -0
  83. package/build/src/sdk/SdkMock.js.map +1 -1
  84. package/build/tsconfig.tsbuildinfo +1 -1
  85. package/data/models/example-generator-api.json +22 -22
  86. package/package.json +3 -3
  87. package/src/mocking/ModelingMock.ts +2 -0
  88. package/src/mocking/lib/Ai.ts +71 -0
  89. package/src/modeling/ai/DataDomainDelta.ts +798 -0
  90. package/src/modeling/ai/DomainSerialization.ts +199 -0
  91. package/src/modeling/ai/domain_response_schema.ts +301 -0
  92. package/src/modeling/ai/domain_tools.ts +76 -0
  93. package/src/modeling/ai/message_parser.ts +101 -0
  94. package/src/modeling/ai/prompts/domain_system.ts +79 -0
  95. package/src/modeling/ai/readme.md +8 -0
  96. package/src/modeling/ai/tools/DataDomain.tools.ts +365 -0
  97. package/src/modeling/ai/tools/Semantic.tools.ts +38 -0
  98. package/src/modeling/ai/tools/config.ts +13 -0
  99. package/src/modeling/ai/tools/readme.md +3 -0
  100. package/src/modeling/ai/types.ts +306 -0
  101. package/src/models/AiMessage.ts +335 -0
  102. package/src/models/AiSession.ts +160 -0
  103. package/src/models/kinds.ts +2 -0
  104. package/src/sdk/AiSdk.ts +395 -0
  105. package/src/sdk/RouteBuilder.ts +27 -0
  106. package/src/sdk/Sdk.ts +3 -0
  107. package/src/sdk/SdkBase.ts +4 -0
  108. package/src/sdk/SdkMock.ts +185 -0
  109. package/tests/unit/mocking/current/Ai.spec.ts +109 -0
  110. package/tests/unit/modeling/ai/DataDomainDelta.spec.ts +419 -0
  111. package/tests/unit/modeling/ai/DomainAiTools.spec.ts +29 -0
  112. package/tests/unit/modeling/ai/DomainSerialization.spec.ts +143 -0
  113. package/tests/unit/modeling/ai/message_parser.spec.ts +157 -0
  114. package/tests/unit/modeling/ai/tools/DataDomain.tools.spec.ts +64 -0
  115. package/tests/unit/modeling/ai/tools/Semantic.tools.spec.ts +55 -0
  116. package/tests/unit/models/AiMessage.spec.ts +216 -0
  117. package/tests/unit/models/AiSession.spec.ts +147 -0
@@ -25,6 +25,8 @@ import type { DataCatalogVersionSchema } from '../models/DataCatalogVersion.js'
25
25
  import { DataDomain, type DataDomainSchema } from '../modeling/DataDomain.js'
26
26
  import type { ForeignDomainDependency } from '../modeling/types.js'
27
27
  import { nanoid } from '../nanoid.js'
28
+ import type { AiSessionSchema, AiSessionApp } from '../models/AiSession.js'
29
+ import type { AiMessageSchema } from '../models/AiMessage.js'
28
30
 
29
31
  export interface MockResult {
30
32
  /**
@@ -770,6 +772,189 @@ export class SdkMock {
770
772
  },
771
773
  }
772
774
 
775
+ ai = {
776
+ sessions: {
777
+ list: async (init?: MockListResult, options?: InterceptOptions): Promise<void> => {
778
+ const { mock } = this
779
+ const respond = this.createDefaultResponse(
780
+ 200,
781
+ { 'content-type': 'application/json' },
782
+ () => {
783
+ const obj: ContextListResult<AiSessionSchema> = {
784
+ items: this.gen.ai.sessions('general', init?.size ?? 5),
785
+ cursor: this.createCursorOption(init),
786
+ }
787
+ return JSON.stringify(obj)
788
+ },
789
+ init
790
+ )
791
+ await mock.add(
792
+ {
793
+ match: {
794
+ uri: RouteBuilder.aiSessions(':oid', ':app' as AiSessionApp),
795
+ methods: ['GET'],
796
+ },
797
+ respond,
798
+ },
799
+ options
800
+ )
801
+ },
802
+ create: async (init?: MockResult, options?: InterceptOptions): Promise<void> => {
803
+ const { mock } = this
804
+ const respond = this.createDefaultResponse(
805
+ 201,
806
+ { 'content-type': 'application/json' },
807
+ () => JSON.stringify(this.gen.ai.session()),
808
+ init
809
+ )
810
+ await mock.add(
811
+ {
812
+ match: {
813
+ uri: RouteBuilder.aiSessions(':oid', ':app' as AiSessionApp),
814
+ methods: ['POST'],
815
+ },
816
+ respond,
817
+ },
818
+ options
819
+ )
820
+ },
821
+ read: async (init?: MockResult, options?: InterceptOptions): Promise<void> => {
822
+ const { mock } = this
823
+ const respond = this.createDefaultResponse(
824
+ 200,
825
+ { 'content-type': 'application/json' },
826
+ () => JSON.stringify(this.gen.ai.session()),
827
+ init
828
+ )
829
+ await mock.add(
830
+ {
831
+ match: {
832
+ uri: RouteBuilder.aiSession(':oid', ':app' as AiSessionApp, ':sid'),
833
+ methods: ['GET'],
834
+ },
835
+ respond,
836
+ },
837
+ options
838
+ )
839
+ },
840
+ update: async (init?: MockResult, options?: InterceptOptions): Promise<void> => {
841
+ const { mock } = this
842
+ const respond = this.createDefaultResponse(
843
+ 200,
844
+ { 'content-type': 'application/json' },
845
+ () => JSON.stringify(this.gen.ai.session()),
846
+ init
847
+ )
848
+ await mock.add(
849
+ {
850
+ match: {
851
+ uri: RouteBuilder.aiSession(':oid', ':app' as AiSessionApp, ':sid'),
852
+ methods: ['PUT'],
853
+ },
854
+ respond,
855
+ },
856
+ options
857
+ )
858
+ },
859
+ delete: async (init?: MockResult, options?: InterceptOptions): Promise<void> => {
860
+ const { mock } = this
861
+ const respond = this.createDefaultResponse(204, undefined, undefined, init)
862
+ await mock.add(
863
+ {
864
+ match: {
865
+ uri: RouteBuilder.aiSession(':oid', ':app' as AiSessionApp, ':sid'),
866
+ methods: ['DELETE'],
867
+ },
868
+ respond,
869
+ },
870
+ options
871
+ )
872
+ },
873
+ },
874
+
875
+ messages: {
876
+ list: async (init?: MockListResult, options?: InterceptOptions): Promise<void> => {
877
+ const { mock } = this
878
+ const respond = this.createDefaultResponse(
879
+ 200,
880
+ { 'content-type': 'application/json' },
881
+ () => {
882
+ const obj: ContextListResult<AiMessageSchema> = {
883
+ items: this.gen.ai.messages(init?.size ?? 5),
884
+ cursor: this.createCursorOption(init),
885
+ }
886
+ return JSON.stringify(obj)
887
+ },
888
+ init
889
+ )
890
+ await mock.add(
891
+ {
892
+ match: {
893
+ uri: RouteBuilder.aiMessages(':oid', ':sid'),
894
+ methods: ['GET'],
895
+ },
896
+ respond,
897
+ },
898
+ options
899
+ )
900
+ },
901
+ update: async (init?: MockResult, options?: InterceptOptions): Promise<void> => {
902
+ const { mock } = this
903
+ const respond = this.createDefaultResponse(
904
+ 200,
905
+ { 'content-type': 'application/json' },
906
+ () => JSON.stringify(this.gen.ai.message()),
907
+ init
908
+ )
909
+ await mock.add(
910
+ {
911
+ match: {
912
+ uri: RouteBuilder.aiMessage(':oid', ':sid', ':mid'),
913
+ methods: ['PUT'],
914
+ },
915
+ respond,
916
+ },
917
+ options
918
+ )
919
+ },
920
+ delete: async (init?: MockResult, options?: InterceptOptions): Promise<void> => {
921
+ const { mock } = this
922
+ const respond = this.createDefaultResponse(204, undefined, undefined, init)
923
+ await mock.add(
924
+ {
925
+ match: {
926
+ uri: RouteBuilder.aiMessage(':oid', ':sid', ':mid'),
927
+ methods: ['DELETE'],
928
+ },
929
+ respond,
930
+ },
931
+ options
932
+ )
933
+ },
934
+ },
935
+
936
+ modifyDomain: async (init?: MockResult, options?: InterceptOptions): Promise<void> => {
937
+ const { mock } = this
938
+ // Return a basic JSON response simulating the stream end state for simplicity if not overriding.
939
+ const respond = this.createDefaultResponse(
940
+ 200,
941
+ { 'content-type': 'text/event-stream' },
942
+ () => 'event: done\ndata: {}\n\n',
943
+ init
944
+ )
945
+ await mock.add(
946
+ {
947
+ match: {
948
+ uri: RouteBuilder.aiModifyDomain(':oid', ':fid') as string,
949
+ methods: ['POST'],
950
+ },
951
+ respond,
952
+ },
953
+ options
954
+ )
955
+ },
956
+ }
957
+
773
958
  /**
774
959
  * User API mocks.
775
960
  */
@@ -0,0 +1,109 @@
1
+ import { test } from '@japa/runner'
2
+ import { Ai } from '../../../../src/mocking/lib/Ai.js'
3
+ import { AiSessionKind, AiMessageKind } from '../../../../src/models/kinds.js'
4
+ import type { AiSessionSchema } from '../../../../src/models/AiSession.js'
5
+ import type { AiMessageSchema } from '../../../../src/models/AiMessage.js'
6
+
7
+ test.group('Ai Mock Generator', (group) => {
8
+ let aiMock: Ai
9
+
10
+ group.each.setup(() => {
11
+ aiMock = new Ai()
12
+ })
13
+
14
+ test('session() returns a valid AiSession object', ({ assert }) => {
15
+ const result = aiMock.session()
16
+ assert.typeOf(result, 'object')
17
+ assert.equal(result.kind, AiSessionKind)
18
+ assert.equal(result.app, 'general')
19
+ assert.property(result, 'key')
20
+ assert.property(result, 'title')
21
+ assert.property(result, 'pinned')
22
+ assert.property(result, 'userRenamed')
23
+ assert.property(result, 'createdAt')
24
+ assert.property(result, 'updatedAt')
25
+ })
26
+
27
+ test('session(app, init) allows overriding properties', ({ assert }) => {
28
+ const init: Partial<AiSessionSchema> = {
29
+ title: 'Custom Title',
30
+ pinned: true,
31
+ app: 'domain',
32
+ }
33
+ const result = aiMock.session('domain', init)
34
+ assert.equal(result.app, 'domain')
35
+ assert.equal(result.title, 'Custom Title')
36
+ assert.isTrue(result.pinned)
37
+ })
38
+
39
+ test('sessions() returns a list defined by default size', ({ assert }) => {
40
+ const result = aiMock.sessions()
41
+ assert.isArray(result)
42
+ assert.lengthOf(result, 5)
43
+ result.forEach((item) => {
44
+ assert.equal(item.app, 'general')
45
+ })
46
+ })
47
+
48
+ test('sessions(app, size) overrides settings', ({ assert }) => {
49
+ const result = aiMock.sessions('api', 3)
50
+ assert.lengthOf(result, 3)
51
+ result.forEach((item) => {
52
+ assert.equal(item.app, 'api')
53
+ })
54
+ })
55
+
56
+ test("message('user') returns a valid AiUserMessage object", ({ assert }) => {
57
+ const result = aiMock.message('user')
58
+ assert.typeOf(result, 'object')
59
+ assert.equal(result.kind, AiMessageKind)
60
+ assert.equal(result.role, 'user')
61
+ assert.property(result, 'key')
62
+ assert.property(result, 'session')
63
+ assert.property(result, 'text')
64
+ assert.equal(result.state, 'complete')
65
+ assert.property(result, 'createdAt')
66
+ assert.property(result, 'updatedAt')
67
+ })
68
+
69
+ test("message('model') returns a valid AiModelMessage object", ({ assert }) => {
70
+ const result = aiMock.message('model')
71
+ assert.typeOf(result, 'object')
72
+ assert.equal(result.kind, AiMessageKind)
73
+ assert.equal(result.role, 'model')
74
+ assert.property(result, 'key')
75
+ assert.property(result, 'session')
76
+ assert.property(result, 'text')
77
+ assert.property(result, 'state')
78
+ assert.property(result, 'applied')
79
+ assert.property(result, 'thoughts')
80
+ })
81
+
82
+ test('message(role, init) allows overriding properties', ({ assert }) => {
83
+ const init: Partial<AiMessageSchema> = {
84
+ text: 'Custom Text',
85
+ session: 'session-123',
86
+ }
87
+ const result = aiMock.message('user', init)
88
+ assert.equal(result.text, 'Custom Text')
89
+ assert.equal(result.session, 'session-123')
90
+ })
91
+
92
+ test('messages() returns a list of mixed messages', ({ assert }) => {
93
+ const result = aiMock.messages(5)
94
+ assert.isArray(result)
95
+ assert.lengthOf(result, 5)
96
+ result.forEach((item) => {
97
+ assert.include(['user', 'model'], item.role)
98
+ })
99
+ })
100
+
101
+ test('messages(size, session) groups messages by session', ({ assert }) => {
102
+ const sessionId = 'test-session-id'
103
+ const result = aiMock.messages(3, sessionId)
104
+ assert.lengthOf(result, 3)
105
+ result.forEach((item) => {
106
+ assert.equal(item.session, sessionId)
107
+ })
108
+ })
109
+ })