@pikku/inspector 0.11.2 → 0.12.0

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 (182) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/OPTIMIZATION-PLAN.md +195 -0
  3. package/dist/add/add-ai-agent.d.ts +2 -0
  4. package/dist/add/add-ai-agent.js +314 -0
  5. package/dist/add/add-channel.js +69 -61
  6. package/dist/add/add-cli.js +36 -18
  7. package/dist/add/add-file-with-factory.js +2 -0
  8. package/dist/add/add-functions.js +250 -75
  9. package/dist/add/add-http-route.d.ts +19 -10
  10. package/dist/add/add-http-route.js +152 -66
  11. package/dist/add/add-http-routes.d.ts +5 -0
  12. package/dist/add/add-http-routes.js +159 -0
  13. package/dist/add/add-keyed-wiring.d.ts +12 -0
  14. package/dist/add/add-keyed-wiring.js +97 -0
  15. package/dist/add/add-mcp-prompt.js +14 -9
  16. package/dist/add/add-mcp-resource.js +14 -9
  17. package/dist/add/add-middleware.d.ts +1 -4
  18. package/dist/add/add-middleware.js +364 -79
  19. package/dist/add/add-permission.d.ts +1 -1
  20. package/dist/add/add-permission.js +152 -40
  21. package/dist/add/add-queue-worker.js +18 -12
  22. package/dist/add/add-rpc-invocations.js +14 -0
  23. package/dist/add/add-schedule.js +11 -5
  24. package/dist/add/add-secret.d.ts +3 -0
  25. package/dist/add/add-secret.js +82 -0
  26. package/dist/add/add-trigger.d.ts +2 -0
  27. package/dist/add/add-trigger.js +87 -0
  28. package/dist/add/add-variable.d.ts +1 -0
  29. package/dist/add/add-variable.js +8 -0
  30. package/dist/add/add-workflow-graph.d.ts +3 -2
  31. package/dist/add/add-workflow-graph.js +143 -406
  32. package/dist/add/add-workflow.js +6 -4
  33. package/dist/error-codes.d.ts +14 -1
  34. package/dist/error-codes.js +19 -1
  35. package/dist/index.d.ts +9 -8
  36. package/dist/index.js +5 -4
  37. package/dist/inspector.d.ts +1 -1
  38. package/dist/inspector.js +91 -14
  39. package/dist/schema-generator.d.ts +1 -0
  40. package/dist/schema-generator.js +1 -0
  41. package/dist/types-map.js +10 -1
  42. package/dist/types.d.ts +163 -39
  43. package/dist/utils/compute-required-schemas.d.ts +4 -0
  44. package/dist/utils/compute-required-schemas.js +41 -0
  45. package/dist/utils/contract-hashes.d.ts +35 -0
  46. package/dist/utils/contract-hashes.js +202 -0
  47. package/dist/utils/custom-types-generator.d.ts +9 -0
  48. package/dist/utils/custom-types-generator.js +71 -0
  49. package/dist/utils/detect-schema-vendor.d.ts +22 -0
  50. package/dist/utils/detect-schema-vendor.js +76 -0
  51. package/dist/utils/ensure-function-metadata.d.ts +5 -2
  52. package/dist/utils/ensure-function-metadata.js +220 -6
  53. package/dist/utils/extract-function-name.d.ts +5 -16
  54. package/dist/utils/extract-function-name.js +86 -291
  55. package/dist/utils/extract-services.d.ts +2 -1
  56. package/dist/utils/extract-services.js +25 -1
  57. package/dist/utils/filter-inspector-state.js +107 -23
  58. package/dist/utils/get-property-value.d.ts +6 -1
  59. package/dist/utils/get-property-value.js +28 -3
  60. package/dist/utils/hash.d.ts +2 -0
  61. package/dist/utils/hash.js +23 -0
  62. package/dist/utils/middleware.d.ts +7 -30
  63. package/dist/utils/middleware.js +80 -66
  64. package/dist/utils/permissions.d.ts +2 -2
  65. package/dist/utils/permissions.js +10 -10
  66. package/dist/utils/post-process.d.ts +9 -10
  67. package/dist/utils/post-process.js +231 -24
  68. package/dist/utils/resolve-external-package.d.ts +12 -0
  69. package/dist/utils/resolve-external-package.js +34 -0
  70. package/dist/utils/resolve-function-types.d.ts +6 -0
  71. package/dist/utils/resolve-function-types.js +29 -0
  72. package/dist/utils/resolve-identifier.d.ts +10 -0
  73. package/dist/utils/resolve-identifier.js +36 -0
  74. package/dist/utils/resolve-versions.d.ts +2 -0
  75. package/dist/utils/resolve-versions.js +78 -0
  76. package/dist/utils/schema-generator.d.ts +9 -0
  77. package/dist/utils/schema-generator.js +209 -0
  78. package/dist/utils/serialize-inspector-state.d.ts +59 -22
  79. package/dist/utils/serialize-inspector-state.js +92 -20
  80. package/dist/utils/serialize-mcp-json.d.ts +2 -0
  81. package/dist/utils/serialize-mcp-json.js +99 -0
  82. package/dist/utils/serialize-middleware-groups-meta.d.ts +12 -0
  83. package/dist/utils/serialize-middleware-groups-meta.js +28 -0
  84. package/dist/utils/serialize-openapi-json.d.ts +85 -0
  85. package/dist/utils/serialize-openapi-json.js +151 -0
  86. package/dist/utils/serialize-permissions-groups-meta.d.ts +6 -0
  87. package/dist/utils/serialize-permissions-groups-meta.js +31 -0
  88. package/dist/utils/workflow/dsl/deserialize-dsl-workflow.js +34 -102
  89. package/dist/utils/workflow/dsl/extract-dsl-workflow.js +23 -4
  90. package/dist/utils/workflow/graph/convert-dsl-to-graph.js +12 -10
  91. package/dist/utils/workflow/graph/finalize-workflow-wires.d.ts +3 -0
  92. package/dist/utils/workflow/graph/finalize-workflow-wires.js +276 -0
  93. package/dist/utils/workflow/graph/finalize-workflows.d.ts +2 -0
  94. package/dist/utils/workflow/graph/finalize-workflows.js +75 -0
  95. package/dist/utils/workflow/graph/index.d.ts +2 -0
  96. package/dist/utils/workflow/graph/index.js +2 -0
  97. package/dist/utils/workflow/graph/serialize-workflow-graph.d.ts +0 -8
  98. package/dist/utils/workflow/graph/serialize-workflow-graph.js +1 -3
  99. package/dist/utils/workflow/graph/workflow-graph.types.d.ts +53 -79
  100. package/dist/utils/workflow/graph/workflow-graph.types.js +1 -1
  101. package/dist/visit.js +11 -6
  102. package/package.json +14 -4
  103. package/src/add/add-ai-agent.ts +468 -0
  104. package/src/add/add-channel.ts +82 -79
  105. package/src/add/add-cli.ts +49 -20
  106. package/src/add/add-file-with-factory.ts +2 -0
  107. package/src/add/add-functions.ts +330 -86
  108. package/src/add/add-http-route.ts +245 -88
  109. package/src/add/add-http-routes.ts +228 -0
  110. package/src/add/add-keyed-wiring.ts +151 -0
  111. package/src/add/add-mcp-prompt.ts +26 -15
  112. package/src/add/add-mcp-resource.ts +27 -15
  113. package/src/add/add-middleware.ts +482 -80
  114. package/src/add/add-permission.ts +199 -40
  115. package/src/add/add-queue-worker.ts +24 -19
  116. package/src/add/add-rpc-invocations.ts +17 -0
  117. package/src/add/add-schedule.ts +16 -11
  118. package/src/add/add-secret.ts +140 -0
  119. package/src/add/add-trigger.ts +154 -0
  120. package/src/add/add-variable.ts +9 -0
  121. package/src/add/add-workflow-graph.ts +180 -522
  122. package/src/add/add-workflow.ts +5 -4
  123. package/src/error-codes.ts +24 -1
  124. package/src/index.ts +22 -13
  125. package/src/inspector.ts +129 -17
  126. package/src/schema-generator.ts +1 -0
  127. package/src/types-map.ts +12 -1
  128. package/src/types.ts +175 -58
  129. package/src/utils/compute-required-schemas.ts +49 -0
  130. package/src/utils/contract-hashes.test.ts +528 -0
  131. package/src/utils/contract-hashes.ts +290 -0
  132. package/src/utils/custom-types-generator.ts +88 -0
  133. package/src/utils/detect-schema-vendor.ts +90 -0
  134. package/src/utils/ensure-function-metadata.ts +324 -7
  135. package/src/utils/extract-function-name.ts +101 -351
  136. package/src/utils/extract-services.ts +35 -2
  137. package/src/utils/filter-inspector-state.test.ts +34 -20
  138. package/src/utils/filter-inspector-state.ts +140 -31
  139. package/src/utils/get-property-value.ts +42 -4
  140. package/src/utils/hash.ts +26 -0
  141. package/src/utils/middleware.test.ts +204 -0
  142. package/src/utils/middleware.ts +129 -67
  143. package/src/utils/permissions.test.ts +35 -12
  144. package/src/utils/permissions.ts +10 -10
  145. package/src/utils/post-process.ts +283 -43
  146. package/src/utils/resolve-external-package.ts +42 -0
  147. package/src/utils/resolve-function-types.ts +42 -0
  148. package/src/utils/resolve-identifier.ts +46 -0
  149. package/src/utils/resolve-versions.test.ts +249 -0
  150. package/src/utils/resolve-versions.ts +105 -0
  151. package/src/utils/schema-generator.ts +329 -0
  152. package/src/utils/serialize-inspector-state.ts +163 -40
  153. package/src/utils/serialize-mcp-json.ts +145 -0
  154. package/src/utils/serialize-middleware-groups-meta.ts +33 -0
  155. package/src/utils/serialize-openapi-json.ts +277 -0
  156. package/src/utils/serialize-permissions-groups-meta.ts +35 -0
  157. package/src/utils/test-data/inspector-state.json +69 -66
  158. package/src/utils/workflow/dsl/deserialize-dsl-workflow.ts +43 -119
  159. package/src/utils/workflow/dsl/extract-dsl-workflow.ts +24 -4
  160. package/src/utils/workflow/graph/convert-dsl-to-graph.ts +17 -10
  161. package/src/utils/workflow/graph/finalize-workflow-wires.ts +310 -0
  162. package/src/utils/workflow/graph/finalize-workflows.ts +100 -0
  163. package/src/utils/workflow/graph/index.ts +5 -0
  164. package/src/utils/workflow/graph/serialize-workflow-graph.ts +1 -8
  165. package/src/utils/workflow/graph/workflow-graph.types.ts +29 -78
  166. package/src/visit.ts +12 -6
  167. package/tsconfig.tsbuildinfo +1 -1
  168. package/dist/add/add-forge-credential.d.ts +0 -8
  169. package/dist/add/add-forge-credential.js +0 -77
  170. package/dist/add/add-forge-node.d.ts +0 -7
  171. package/dist/add/add-forge-node.js +0 -77
  172. package/dist/add/add-mcp-tool.d.ts +0 -2
  173. package/dist/add/add-mcp-tool.js +0 -81
  174. package/dist/utils/extract-service-metadata.d.ts +0 -19
  175. package/dist/utils/extract-service-metadata.js +0 -244
  176. package/dist/utils/write-service-metadata.d.ts +0 -13
  177. package/dist/utils/write-service-metadata.js +0 -37
  178. package/src/add/add-forge-credential.ts +0 -119
  179. package/src/add/add-forge-node.ts +0 -132
  180. package/src/add/add-mcp-tool.ts +0 -141
  181. package/src/utils/extract-service-metadata.ts +0 -353
  182. package/src/utils/write-service-metadata.ts +0 -51
package/src/types.ts CHANGED
@@ -2,14 +2,28 @@ import * as ts from 'typescript'
2
2
  import { ChannelsMeta } from '@pikku/core/channel'
3
3
  import { HTTPWiringsMeta } from '@pikku/core/http'
4
4
  import { ScheduledTasksMeta } from '@pikku/core/scheduler'
5
+ import { TriggerMeta, TriggerSourceMeta } from '@pikku/core/trigger'
5
6
  import { QueueWorkersMeta } from '@pikku/core/queue'
6
7
  import { WorkflowsMeta } from '@pikku/core/workflow'
7
8
  import { MCPResourceMeta, MCPToolMeta, MCPPromptMeta } from '@pikku/core/mcp'
9
+ import { AIAgentMeta } from '@pikku/core/ai-agent'
8
10
  import { CLIMeta } from '@pikku/core/cli'
9
- import { ForgeNodesMeta, ForgeCredentialsMeta } from '@pikku/core/forge-node'
11
+ import { NodesMeta } from '@pikku/core/node'
12
+ import { SecretDefinitions } from '@pikku/core/secret'
13
+ import { VariableDefinitions } from '@pikku/core/variable'
10
14
  import { TypesMap } from './types-map.js'
11
- import { FunctionsMeta, FunctionServicesMeta } from '@pikku/core'
15
+ import {
16
+ FunctionsMeta,
17
+ FunctionServicesMeta,
18
+ FunctionWiresMeta,
19
+ JSONValue,
20
+ } from '@pikku/core'
21
+ import type { OpenAPISpecInfo } from './utils/serialize-openapi-json.js'
12
22
  import { ErrorCode } from './error-codes.js'
23
+ import type {
24
+ VersionManifest,
25
+ VersionValidateError,
26
+ } from './utils/contract-hashes.js'
13
27
  import type { SerializedWorkflowGraphs } from './utils/workflow/graph/workflow-graph.types.js'
14
28
 
15
29
  export type PathToNameAndType = Map<
@@ -31,7 +45,8 @@ export interface MiddlewareGroupMeta {
31
45
  sourceFile: string
32
46
  position: number
33
47
  services: FunctionServicesMeta
34
- middlewareCount: number
48
+ count: number
49
+ instanceIds: string[]
35
50
  isFactory: boolean // true if wrapped in () => add...()
36
51
  }
37
52
 
@@ -40,7 +55,8 @@ export interface PermissionGroupMeta {
40
55
  sourceFile: string
41
56
  position: number
42
57
  services: FunctionServicesMeta
43
- permissionCount: number
58
+ count: number
59
+ instanceIds: string[]
44
60
  isFactory: boolean // true if wrapped in () => add...()
45
61
  }
46
62
 
@@ -59,11 +75,18 @@ export interface InspectorHTTPState {
59
75
  }
60
76
 
61
77
  /**
62
- * Zod schema reference for deferred conversion to JSON Schema at build time
78
+ * Schema vendor types for Standard Schema compliant validators
63
79
  */
64
- export interface ZodSchemaRef {
80
+ export type SchemaVendor = 'zod' | 'valibot' | 'arktype' | 'effect' | 'unknown'
81
+
82
+ /**
83
+ * Schema reference for deferred conversion to JSON Schema at build time.
84
+ * Supports Standard Schema compliant validators (Zod, Valibot, ArkType, Effect Schema).
85
+ */
86
+ export interface SchemaRef {
65
87
  variableName: string
66
88
  sourceFile: string
89
+ vendor?: SchemaVendor
67
90
  }
68
91
 
69
92
  export interface InspectorFunctionState {
@@ -77,41 +100,64 @@ export interface InspectorChannelState {
77
100
  files: Set<string>
78
101
  }
79
102
 
103
+ export interface InspectorMiddlewareDefinition {
104
+ services: FunctionServicesMeta
105
+ wires?: FunctionWiresMeta
106
+ sourceFile: string
107
+ position: number
108
+ exportedName: string | null
109
+ factory?: boolean
110
+ name?: string
111
+ description?: string
112
+ package?: string
113
+ }
114
+
115
+ export interface InspectorMiddlewareInstance {
116
+ definitionId: string
117
+ sourceFile: string
118
+ position: number
119
+ isFactoryCall: boolean
120
+ }
121
+
80
122
  export interface InspectorMiddlewareState {
81
- // Individual middleware function metadata
82
- meta: Record<
83
- string,
84
- {
85
- services: FunctionServicesMeta
86
- sourceFile: string
87
- position: number
88
- exportedName: string | null
89
- factory?: boolean // true if wrapped with pikkuMiddlewareFactory
90
- name?: string // optional name from pikkuMiddleware({ name: '...' })
91
- description?: string // optional description from pikkuMiddleware({ description: '...' })
92
- }
93
- >
94
- // Tag-based middleware calls tracking - tag -> group metadata
95
- // e.g., export const adminMiddleware = () => addMiddleware('admin', [...])
123
+ definitions: Record<string, InspectorMiddlewareDefinition>
124
+ instances: Record<string, InspectorMiddlewareInstance>
125
+ tagMiddleware: Map<string, MiddlewareGroupMeta>
126
+ }
127
+
128
+ export interface InspectorChannelMiddlewareState {
129
+ definitions: Record<string, InspectorMiddlewareDefinition>
130
+ instances: Record<string, InspectorMiddlewareInstance>
96
131
  tagMiddleware: Map<string, MiddlewareGroupMeta>
97
132
  }
98
133
 
134
+ export interface InspectorAIMiddlewareState {
135
+ definitions: Record<string, InspectorMiddlewareDefinition>
136
+ }
137
+
138
+ export interface InspectorPermissionDefinition {
139
+ services: FunctionServicesMeta
140
+ wires?: FunctionWiresMeta
141
+ sourceFile: string
142
+ position: number
143
+ exportedName: string | null
144
+ factory?: boolean
145
+ name?: string
146
+ description?: string
147
+ package?: string
148
+ requiresData?: boolean
149
+ }
150
+
151
+ export interface InspectorPermissionInstance {
152
+ definitionId: string
153
+ sourceFile: string
154
+ position: number
155
+ isFactoryCall: boolean
156
+ }
157
+
99
158
  export interface InspectorPermissionState {
100
- // Individual permission function metadata
101
- meta: Record<
102
- string,
103
- {
104
- services: FunctionServicesMeta
105
- sourceFile: string
106
- position: number
107
- exportedName: string | null
108
- factory?: boolean // true if wrapped with pikkuPermissionFactory
109
- name?: string // optional name from pikkuPermission({ name: '...' })
110
- description?: string // optional description from pikkuPermission({ description: '...' })
111
- }
112
- >
113
- // Tag-based permission calls tracking - tag -> group metadata
114
- // e.g., export const adminPermissions = () => addPermission('admin', [...])
159
+ definitions: Record<string, InspectorPermissionDefinition>
160
+ instances: Record<string, InspectorPermissionInstance>
115
161
  tagPermissions: Map<string, PermissionGroupMeta>
116
162
  }
117
163
 
@@ -124,16 +170,48 @@ export type InspectorFilters = {
124
170
  httpMethods?: string[] // HTTP methods: "GET", "POST", "DELETE", etc.
125
171
  }
126
172
 
173
+ export type ExternalPackageConfig = {
174
+ package: string
175
+ rpcEndpoint?: string
176
+ secretOverrides?: Record<string, string>
177
+ forceInclude?: boolean
178
+ }
179
+
180
+ export type ModelConfigEntry =
181
+ | string
182
+ | { model: string; temperature?: number; maxSteps?: number }
183
+
184
+ export type InspectorModelConfig = {
185
+ models?: Record<string, ModelConfigEntry>
186
+ agentDefaults?: { temperature?: number; maxSteps?: number }
187
+ agentOverrides?: Record<
188
+ string,
189
+ { model?: string; temperature?: number; maxSteps?: number }
190
+ >
191
+ }
192
+
127
193
  export type InspectorOptions = Partial<{
128
194
  setupOnly: boolean
129
- /** Project root directory - used to filter out external package files */
130
195
  rootDir: string
196
+ isExternalPackage: boolean
131
197
  types: Partial<{
132
198
  configFileType: string
133
199
  userSessionType: string
134
200
  singletonServicesFactoryType: string
135
201
  wireServicesFactoryType: string
136
202
  }>
203
+ externalPackages: Record<string, ExternalPackageConfig>
204
+ schemaConfig: {
205
+ tsconfig: string
206
+ schemasFromTypes?: string[]
207
+ schema?: { additionalProperties?: boolean }
208
+ }
209
+ openAPI: {
210
+ additionalInfo: OpenAPISpecInfo
211
+ }
212
+ tags: string[]
213
+ manifest: VersionManifest
214
+ modelConfig: InspectorModelConfig
137
215
  }>
138
216
 
139
217
  export interface InspectorLogger {
@@ -197,6 +275,13 @@ export interface InspectorFilesAndMethods {
197
275
  }
198
276
  }
199
277
 
278
+ export interface InspectorDiagnostic {
279
+ code: string
280
+ message: string
281
+ sourceFile: string
282
+ position: number
283
+ }
284
+
200
285
  export interface InspectorState {
201
286
  rootDir: string // Root directory inferred from source files
202
287
  singletonServicesTypeImportMap: PathToNameAndType
@@ -210,10 +295,16 @@ export interface InspectorState {
210
295
  filesAndMethods: InspectorFilesAndMethods
211
296
  filesAndMethodsErrors: Map<string, PathToNameAndType>
212
297
  typesLookup: Map<string, ts.Type[]> // Lookup for types by name (e.g., function input types, Config type)
213
- zodLookup: Map<string, ZodSchemaRef> // Lookup for Zod schemas by name for deferred JSON Schema conversion
298
+ schemaLookup: Map<string, SchemaRef> // Lookup for schemas by name for deferred JSON Schema conversion (supports Standard Schema vendors)
299
+ schemas: Record<string, JSONValue>
214
300
  http: InspectorHTTPState
215
301
  functions: InspectorFunctionState
216
302
  channels: InspectorChannelState
303
+ triggers: {
304
+ meta: TriggerMeta
305
+ sourceMeta: TriggerSourceMeta
306
+ files: Set<string>
307
+ }
217
308
  scheduledTasks: {
218
309
  meta: ScheduledTasksMeta
219
310
  files: Set<string>
@@ -227,6 +318,7 @@ export interface InspectorState {
227
318
  files: Map<string, { path: string; exportedName: string }>
228
319
  graphMeta: SerializedWorkflowGraphs
229
320
  graphFiles: Map<string, { path: string; exportedName: string }>
321
+ invokedWorkflows: Set<string>
230
322
  }
231
323
  rpc: {
232
324
  internalMeta: Record<string, string>
@@ -242,36 +334,61 @@ export interface InspectorState {
242
334
  promptsMeta: MCPPromptMeta
243
335
  files: Set<string>
244
336
  }
337
+ agents: {
338
+ agentsMeta: AIAgentMeta
339
+ files: Map<string, { path: string; exportedName: string }>
340
+ }
245
341
  cli: {
246
342
  meta: CLIMeta
247
343
  files: Set<string>
248
344
  }
249
- forgeNodes: {
250
- meta: ForgeNodesMeta
345
+ nodes: {
346
+ meta: NodesMeta
251
347
  files: Set<string>
252
348
  }
253
- forgeCredentials: {
254
- meta: ForgeCredentialsMeta
349
+ secrets: {
350
+ definitions: SecretDefinitions
255
351
  files: Set<string>
256
352
  }
353
+ variables: {
354
+ definitions: VariableDefinitions
355
+ files: Set<string>
356
+ }
357
+ manifest: {
358
+ initial: VersionManifest | null
359
+ current: VersionManifest | null
360
+ errors: VersionValidateError[]
361
+ }
257
362
  middleware: InspectorMiddlewareState
363
+ channelMiddleware: InspectorChannelMiddlewareState
364
+ aiMiddleware: InspectorAIMiddlewareState
258
365
  permissions: InspectorPermissionState
259
366
  serviceAggregation: {
260
- requiredServices: Set<string> // All services needed across the app
261
- usedFunctions: Set<string> // Function names actually wired/exposed
262
- usedMiddleware: Set<string> // Middleware names used by wired functions
263
- usedPermissions: Set<string> // Permission names used by wired functions
264
- allSingletonServices: string[] // All services available in SingletonServices type
265
- allWireServices: string[] // All services available in Services type (excluding SingletonServices)
367
+ requiredServices: Set<string>
368
+ usedFunctions: Set<string>
369
+ usedMiddleware: Set<string>
370
+ usedPermissions: Set<string>
371
+ allSingletonServices: string[]
372
+ allWireServices: string[]
266
373
  }
267
- serviceMetadata: Array<{
268
- name: string
269
- summary: string
270
- description: string
271
- package: string
272
- path: string
273
- version: string
274
- interface: string
275
- expandedProperties: Record<string, string>
276
- }>
374
+ resolvedIOTypes: Record<string, { inputType: string; outputType: string }>
375
+ middlewareGroupsMeta: {
376
+ definitions: Record<string, InspectorMiddlewareDefinition>
377
+ instances: Record<string, InspectorMiddlewareInstance>
378
+ httpGroups: Record<string, MiddlewareGroupMeta>
379
+ tagGroups: Record<string, MiddlewareGroupMeta>
380
+ channelMiddleware: {
381
+ definitions: Record<string, InspectorMiddlewareDefinition>
382
+ instances: Record<string, InspectorMiddlewareInstance>
383
+ tagGroups: Record<string, MiddlewareGroupMeta>
384
+ }
385
+ }
386
+ permissionsGroupsMeta: {
387
+ definitions: Record<string, InspectorPermissionDefinition>
388
+ httpGroups: Record<string, PermissionGroupMeta>
389
+ tagGroups: Record<string, PermissionGroupMeta>
390
+ }
391
+ requiredSchemas: Set<string>
392
+ openAPISpec: Record<string, any> | null
393
+ diagnostics: InspectorDiagnostic[]
277
394
  }
@@ -0,0 +1,49 @@
1
+ import type { FunctionsMeta } from '@pikku/core'
2
+ import type { TypesMap } from '../types-map.js'
3
+ import type { SchemaRef } from '../types.js'
4
+
5
+ const PRIMITIVE_TYPES = new Set([
6
+ 'boolean',
7
+ 'string',
8
+ 'number',
9
+ 'null',
10
+ 'undefined',
11
+ 'void',
12
+ 'any',
13
+ 'unknown',
14
+ 'never',
15
+ ])
16
+
17
+ export function computeRequiredSchemas(
18
+ functionsMeta: FunctionsMeta,
19
+ typesMap: TypesMap,
20
+ additionalTypes?: string[],
21
+ schemaLookup?: Map<string, SchemaRef>
22
+ ): Set<string> {
23
+ return new Set<string>([
24
+ ...Object.values(functionsMeta)
25
+ .map(({ inputs, outputs }) => {
26
+ const types: (string | undefined)[] = []
27
+ if (inputs?.[0]) {
28
+ try {
29
+ types.push(typesMap.getUniqueName(inputs[0]))
30
+ } catch {
31
+ types.push(inputs[0])
32
+ }
33
+ }
34
+ if (outputs?.[0]) {
35
+ try {
36
+ types.push(typesMap.getUniqueName(outputs[0]))
37
+ } catch {
38
+ types.push(outputs[0])
39
+ }
40
+ }
41
+ return types
42
+ })
43
+ .flat()
44
+ .filter((s): s is string => !!s && !PRIMITIVE_TYPES.has(s)),
45
+ ...typesMap.customTypes.keys(),
46
+ ...(additionalTypes || []),
47
+ ...(schemaLookup ? Array.from(schemaLookup.keys()) : []),
48
+ ])
49
+ }