@api-client/core 0.19.0 → 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 (121) hide show
  1. package/build/src/decorators/observed.d.ts.map +1 -1
  2. package/build/src/decorators/observed.js +49 -8
  3. package/build/src/decorators/observed.js.map +1 -1
  4. package/build/src/mocking/ModelingMock.d.ts +2 -0
  5. package/build/src/mocking/ModelingMock.d.ts.map +1 -1
  6. package/build/src/mocking/ModelingMock.js +2 -0
  7. package/build/src/mocking/ModelingMock.js.map +1 -1
  8. package/build/src/mocking/lib/Ai.d.ts +11 -0
  9. package/build/src/mocking/lib/Ai.d.ts.map +1 -0
  10. package/build/src/mocking/lib/Ai.js +53 -0
  11. package/build/src/mocking/lib/Ai.js.map +1 -0
  12. package/build/src/modeling/ai/DataDomainDelta.d.ts +146 -0
  13. package/build/src/modeling/ai/DataDomainDelta.d.ts.map +1 -0
  14. package/build/src/modeling/ai/DataDomainDelta.js +729 -0
  15. package/build/src/modeling/ai/DataDomainDelta.js.map +1 -0
  16. package/build/src/modeling/ai/DomainSerialization.d.ts +20 -0
  17. package/build/src/modeling/ai/DomainSerialization.d.ts.map +1 -0
  18. package/build/src/modeling/ai/DomainSerialization.js +185 -0
  19. package/build/src/modeling/ai/DomainSerialization.js.map +1 -0
  20. package/build/src/modeling/ai/domain_response_schema.d.ts +806 -0
  21. package/build/src/modeling/ai/domain_response_schema.d.ts.map +1 -0
  22. package/build/src/modeling/ai/domain_response_schema.js +289 -0
  23. package/build/src/modeling/ai/domain_response_schema.js.map +1 -0
  24. package/build/src/modeling/ai/domain_tools.d.ts +68 -0
  25. package/build/src/modeling/ai/domain_tools.d.ts.map +1 -0
  26. package/build/src/modeling/ai/domain_tools.js +71 -0
  27. package/build/src/modeling/ai/domain_tools.js.map +1 -0
  28. package/build/src/modeling/ai/index.d.ts +10 -0
  29. package/build/src/modeling/ai/index.d.ts.map +1 -0
  30. package/build/src/modeling/ai/index.js +9 -0
  31. package/build/src/modeling/ai/index.js.map +1 -0
  32. package/build/src/modeling/ai/message_parser.d.ts +23 -0
  33. package/build/src/modeling/ai/message_parser.d.ts.map +1 -0
  34. package/build/src/modeling/ai/message_parser.js +93 -0
  35. package/build/src/modeling/ai/message_parser.js.map +1 -0
  36. package/build/src/modeling/ai/prompts/domain_system.d.ts +6 -0
  37. package/build/src/modeling/ai/prompts/domain_system.d.ts.map +1 -0
  38. package/build/src/modeling/ai/prompts/domain_system.js +80 -0
  39. package/build/src/modeling/ai/prompts/domain_system.js.map +1 -0
  40. package/build/src/modeling/ai/tools/DataDomain.tools.d.ts +25 -0
  41. package/build/src/modeling/ai/tools/DataDomain.tools.d.ts.map +1 -0
  42. package/build/src/modeling/ai/tools/DataDomain.tools.js +334 -0
  43. package/build/src/modeling/ai/tools/DataDomain.tools.js.map +1 -0
  44. package/build/src/modeling/ai/tools/Semantic.tools.d.ts +48 -0
  45. package/build/src/modeling/ai/tools/Semantic.tools.d.ts.map +1 -0
  46. package/build/src/modeling/ai/tools/Semantic.tools.js +36 -0
  47. package/build/src/modeling/ai/tools/Semantic.tools.js.map +1 -0
  48. package/build/src/modeling/ai/tools/config.d.ts +13 -0
  49. package/build/src/modeling/ai/tools/config.d.ts.map +1 -0
  50. package/build/src/modeling/ai/tools/config.js +2 -0
  51. package/build/src/modeling/ai/tools/config.js.map +1 -0
  52. package/build/src/modeling/ai/types.d.ts +302 -0
  53. package/build/src/modeling/ai/types.d.ts.map +1 -0
  54. package/build/src/modeling/ai/types.js +40 -0
  55. package/build/src/modeling/ai/types.js.map +1 -0
  56. package/build/src/models/AiMessage.d.ts +185 -0
  57. package/build/src/models/AiMessage.d.ts.map +1 -0
  58. package/build/src/models/AiMessage.js +203 -0
  59. package/build/src/models/AiMessage.js.map +1 -0
  60. package/build/src/models/AiSession.d.ts +80 -0
  61. package/build/src/models/AiSession.d.ts.map +1 -0
  62. package/build/src/models/AiSession.js +102 -0
  63. package/build/src/models/AiSession.js.map +1 -0
  64. package/build/src/models/kinds.d.ts +2 -0
  65. package/build/src/models/kinds.d.ts.map +1 -1
  66. package/build/src/models/kinds.js +2 -0
  67. package/build/src/models/kinds.js.map +1 -1
  68. package/build/src/sdk/AiSdk.d.ts +93 -0
  69. package/build/src/sdk/AiSdk.d.ts.map +1 -0
  70. package/build/src/sdk/AiSdk.js +348 -0
  71. package/build/src/sdk/AiSdk.js.map +1 -0
  72. package/build/src/sdk/RouteBuilder.d.ts +7 -0
  73. package/build/src/sdk/RouteBuilder.d.ts.map +1 -1
  74. package/build/src/sdk/RouteBuilder.js +18 -0
  75. package/build/src/sdk/RouteBuilder.js.map +1 -1
  76. package/build/src/sdk/Sdk.d.ts +2 -0
  77. package/build/src/sdk/Sdk.d.ts.map +1 -1
  78. package/build/src/sdk/Sdk.js +2 -0
  79. package/build/src/sdk/Sdk.js.map +1 -1
  80. package/build/src/sdk/SdkBase.d.ts +4 -0
  81. package/build/src/sdk/SdkBase.d.ts.map +1 -1
  82. package/build/src/sdk/SdkBase.js.map +1 -1
  83. package/build/src/sdk/SdkMock.d.ts +15 -0
  84. package/build/src/sdk/SdkMock.d.ts.map +1 -1
  85. package/build/src/sdk/SdkMock.js +118 -0
  86. package/build/src/sdk/SdkMock.js.map +1 -1
  87. package/build/tsconfig.tsbuildinfo +1 -1
  88. package/package.json +3 -3
  89. package/src/decorators/observed.ts +51 -9
  90. package/src/mocking/ModelingMock.ts +2 -0
  91. package/src/mocking/lib/Ai.ts +71 -0
  92. package/src/modeling/ai/DataDomainDelta.ts +798 -0
  93. package/src/modeling/ai/DomainSerialization.ts +199 -0
  94. package/src/modeling/ai/domain_response_schema.ts +301 -0
  95. package/src/modeling/ai/domain_tools.ts +76 -0
  96. package/src/modeling/ai/message_parser.ts +101 -0
  97. package/src/modeling/ai/prompts/domain_system.ts +79 -0
  98. package/src/modeling/ai/readme.md +8 -0
  99. package/src/modeling/ai/tools/DataDomain.tools.ts +365 -0
  100. package/src/modeling/ai/tools/Semantic.tools.ts +38 -0
  101. package/src/modeling/ai/tools/config.ts +13 -0
  102. package/src/modeling/ai/tools/readme.md +3 -0
  103. package/src/modeling/ai/types.ts +306 -0
  104. package/src/models/AiMessage.ts +335 -0
  105. package/src/models/AiSession.ts +160 -0
  106. package/src/models/kinds.ts +2 -0
  107. package/src/sdk/AiSdk.ts +395 -0
  108. package/src/sdk/RouteBuilder.ts +27 -0
  109. package/src/sdk/Sdk.ts +3 -0
  110. package/src/sdk/SdkBase.ts +4 -0
  111. package/src/sdk/SdkMock.ts +185 -0
  112. package/tests/unit/decorators/observed_recursive.spec.ts +39 -0
  113. package/tests/unit/mocking/current/Ai.spec.ts +109 -0
  114. package/tests/unit/modeling/ai/DataDomainDelta.spec.ts +419 -0
  115. package/tests/unit/modeling/ai/DomainAiTools.spec.ts +29 -0
  116. package/tests/unit/modeling/ai/DomainSerialization.spec.ts +143 -0
  117. package/tests/unit/modeling/ai/message_parser.spec.ts +157 -0
  118. package/tests/unit/modeling/ai/tools/DataDomain.tools.spec.ts +64 -0
  119. package/tests/unit/modeling/ai/tools/Semantic.tools.spec.ts +55 -0
  120. package/tests/unit/models/AiMessage.spec.ts +216 -0
  121. package/tests/unit/models/AiSession.spec.ts +147 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@api-client/core",
3
3
  "description": "The API Client's core client library. Works in NodeJS and in a ES enabled browser.",
4
- "version": "0.19.0",
4
+ "version": "0.19.2",
5
5
  "license": "Apache-2.0",
6
6
  "exports": {
7
7
  "./browser.js": {
@@ -119,7 +119,7 @@
119
119
  "@types/chai-as-promised": "^8.0.2",
120
120
  "@types/cors": "^2.8.12",
121
121
  "@types/express-ntlm": "^2.3.3",
122
- "@types/jsdom": "^27.0.0",
122
+ "@types/jsdom": "^28.0.0",
123
123
  "@types/json-schema": "^7.0.15",
124
124
  "@types/mocha": "^10.0.10",
125
125
  "@types/node": "^25.0.6",
@@ -129,7 +129,7 @@
129
129
  "@web/test-runner": "^0.20.0",
130
130
  "@web/test-runner-playwright": "^0.11.0",
131
131
  "amf-client-js": "^5.10.0-0",
132
- "c8": "^10.1.3",
132
+ "c8": "^11.0.0",
133
133
  "chai-as-promised": "^8.0.2",
134
134
  "conventional-changelog": "^7.1.0",
135
135
  "conventional-changelog-conventionalcommits": "^9.1.0",
@@ -32,6 +32,41 @@ export interface ObserveConfig {
32
32
  deep?: boolean
33
33
  }
34
34
 
35
+ function cleanProxies(obj: any, seen: WeakSet<object> = new WeakSet<object>()): any {
36
+ if (typeof obj !== 'object' || obj === null) {
37
+ return obj
38
+ }
39
+ if (seen.has(obj)) {
40
+ return obj
41
+ }
42
+ seen.add(obj)
43
+
44
+ if (Array.isArray(obj)) {
45
+ for (let i = 0; i < obj.length; i++) {
46
+ let item = obj[i]
47
+ while (item && typeof item === 'object' && item[rawSymbol]) {
48
+ item = item[rawSymbol]
49
+ }
50
+ if (item && typeof item === 'object') {
51
+ cleanProxies(item, seen)
52
+ }
53
+ obj[i] = item
54
+ }
55
+ } else {
56
+ for (const key of Object.keys(obj)) {
57
+ let item = obj[key]
58
+ while (item && typeof item === 'object' && item[rawSymbol]) {
59
+ item = item[rawSymbol]
60
+ }
61
+ if (item && typeof item === 'object') {
62
+ cleanProxies(item, seen)
63
+ }
64
+ obj[key] = item
65
+ }
66
+ }
67
+ return obj
68
+ }
69
+
35
70
  /**
36
71
  * Reads the raw value of the object, that is, not proxied object.
37
72
  * @param source The source object that contains the object
@@ -39,21 +74,28 @@ export interface ObserveConfig {
39
74
  * @returns The not proxied object or undefined
40
75
  */
41
76
  export function toRaw<T extends object = object>(source: object, target: T): T | undefined {
77
+ let mapped: any
42
78
  if (target && (target as any)[rawSymbol]) {
43
79
  let raw = (target as any)[rawSymbol]
44
80
  while (raw && (raw as any)[rawSymbol]) {
45
81
  raw = (raw as any)[rawSymbol]
46
82
  }
47
- return raw as T
48
- }
49
- const proxies = Reflect.get(source, proxySymbol) as Map<object, object>
50
- if (!proxies) {
51
- return undefined
52
- }
53
- for (const [key, value] of proxies.entries()) {
54
- if (value === target) {
55
- return key as T
83
+ mapped = raw
84
+ } else {
85
+ const proxies = Reflect.get(source, proxySymbol) as Map<object, object>
86
+ if (!proxies) {
87
+ return undefined
56
88
  }
89
+ for (const [key, value] of proxies.entries()) {
90
+ if (value === target) {
91
+ mapped = key
92
+ break
93
+ }
94
+ }
95
+ }
96
+
97
+ if (mapped) {
98
+ return cleanProxies(mapped) as T
57
99
  }
58
100
  }
59
101
 
@@ -8,6 +8,7 @@ import { Trash } from './lib/Trash.js'
8
8
  import { Patch } from './lib/Patch.js'
9
9
  import { DataCatalog } from './lib/DataCatalog.js'
10
10
  import { Permission } from './lib/Permission.js'
11
+ import { Ai } from './lib/Ai.js'
11
12
 
12
13
  export class ModelingMock {
13
14
  faker: Faker = faker
@@ -20,4 +21,5 @@ export class ModelingMock {
20
21
  patch = new Patch()
21
22
  dataCatalog = new DataCatalog()
22
23
  permission = new Permission()
24
+ ai = new Ai()
23
25
  }
@@ -0,0 +1,71 @@
1
+ import { faker, type Faker } from '@faker-js/faker'
2
+ import { nanoid } from '../../nanoid.js'
3
+ import type { AiSessionSchema, AiSessionApp } from '../../models/AiSession.js'
4
+ import type {
5
+ AiMessageSchema,
6
+ AiMessageRole,
7
+ AiMessageState,
8
+ AiMessageSchemaBase,
9
+ AiModelMessageSchema,
10
+ } from '../../models/AiMessage.js'
11
+ import { AiSessionKind, AiMessageKind } from '../../models/kinds.js'
12
+
13
+ export class Ai {
14
+ faker: Faker = faker
15
+
16
+ session(app: AiSessionApp = 'general', init: Partial<AiSessionSchema> = {}): AiSessionSchema {
17
+ return {
18
+ kind: AiSessionKind,
19
+ key: init.key ?? nanoid(),
20
+ app: init.app ?? app,
21
+ title: init.title ?? this.faker.lorem.words({ min: 2, max: 4 }),
22
+ pinned: init.pinned ?? this.faker.datatype.boolean(),
23
+ userRenamed: init.userRenamed ?? this.faker.datatype.boolean(),
24
+ createdAt: init.createdAt ?? this.faker.date.recent().getTime(),
25
+ updatedAt: init.updatedAt ?? this.faker.date.recent().getTime(),
26
+ }
27
+ }
28
+
29
+ sessions(app: AiSessionApp = 'general', count = 5): AiSessionSchema[] {
30
+ return Array.from({ length: count }, () => this.session(app))
31
+ }
32
+
33
+ message(role: AiMessageRole = 'user', init: Partial<AiMessageSchema> = {}): AiMessageSchema {
34
+ const isUser = role === 'user'
35
+
36
+ const baseMessage: AiMessageSchemaBase = {
37
+ kind: AiMessageKind,
38
+ key: init.key ?? nanoid(),
39
+ session: init.session ?? nanoid(),
40
+ createdAt: init.createdAt ?? this.faker.date.recent().getTime(),
41
+ updatedAt: init.updatedAt ?? this.faker.date.recent().getTime(),
42
+ text: init.text ?? this.faker.lorem.paragraph(),
43
+ role: 'user',
44
+ } as const
45
+
46
+ if (isUser) {
47
+ return {
48
+ ...baseMessage,
49
+ state: 'complete',
50
+ ...init,
51
+ } as AiMessageSchema
52
+ }
53
+
54
+ return {
55
+ ...baseMessage,
56
+ role: 'model',
57
+ state:
58
+ init.state ??
59
+ this.faker.helpers.arrayElement(['loading', 'complete', 'error', 'terminated'] as AiMessageState[]),
60
+ applied: (init as AiModelMessageSchema).applied ?? this.faker.datatype.boolean(),
61
+ thoughts: (init as AiModelMessageSchema).thoughts ?? this.faker.lorem.sentences(),
62
+ ...init,
63
+ } as AiMessageSchema
64
+ }
65
+
66
+ messages(count = 5, session?: string): AiMessageSchema[] {
67
+ return Array.from({ length: count }, () =>
68
+ this.message(this.faker.helpers.arrayElement(['user', 'model']), session ? { session } : {})
69
+ )
70
+ }
71
+ }