@bsb/base 9.0.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/LICENSE +665 -0
  2. package/LICENSE.commercial +32 -0
  3. package/README.md +263 -0
  4. package/bsb-plugin.json +62 -0
  5. package/lib/base/BSBConfig.d.ts +130 -0
  6. package/lib/base/BSBConfig.js +95 -0
  7. package/lib/base/BSBConfig.js.map +1 -0
  8. package/lib/base/BSBEvents.d.ts +207 -0
  9. package/lib/base/BSBEvents.js +101 -0
  10. package/lib/base/BSBEvents.js.map +1 -0
  11. package/lib/base/BSBObservable.d.ts +178 -0
  12. package/lib/base/BSBObservable.js +91 -0
  13. package/lib/base/BSBObservable.js.map +1 -0
  14. package/lib/base/BSBService.d.ts +277 -0
  15. package/lib/base/BSBService.js +366 -0
  16. package/lib/base/BSBService.js.map +1 -0
  17. package/lib/base/BSBServiceClient.d.ts +135 -0
  18. package/lib/base/BSBServiceClient.js +130 -0
  19. package/lib/base/BSBServiceClient.js.map +1 -0
  20. package/lib/base/EventValidator.d.ts +137 -0
  21. package/lib/base/EventValidator.js +210 -0
  22. package/lib/base/EventValidator.js.map +1 -0
  23. package/lib/base/ObservableBackend.d.ts +281 -0
  24. package/lib/base/ObservableBackend.js +515 -0
  25. package/lib/base/ObservableBackend.js.map +1 -0
  26. package/lib/base/PluginConfig.d.ts +196 -0
  27. package/lib/base/PluginConfig.js +96 -0
  28. package/lib/base/PluginConfig.js.map +1 -0
  29. package/lib/base/PluginEvents.d.ts +140 -0
  30. package/lib/base/PluginEvents.js +268 -0
  31. package/lib/base/PluginEvents.js.map +1 -0
  32. package/lib/base/PluginObservable.d.ts +196 -0
  33. package/lib/base/PluginObservable.js +250 -0
  34. package/lib/base/PluginObservable.js.map +1 -0
  35. package/lib/base/ResourceContext.d.ts +70 -0
  36. package/lib/base/ResourceContext.js +54 -0
  37. package/lib/base/ResourceContext.js.map +1 -0
  38. package/lib/base/base.d.ts +264 -0
  39. package/lib/base/base.js +182 -0
  40. package/lib/base/base.js.map +1 -0
  41. package/lib/base/errorMessages.d.ts +56 -0
  42. package/lib/base/errorMessages.js +70 -0
  43. package/lib/base/errorMessages.js.map +1 -0
  44. package/lib/base/factory.d.ts +58 -0
  45. package/lib/base/factory.js +167 -0
  46. package/lib/base/factory.js.map +1 -0
  47. package/lib/base/functions.d.ts +117 -0
  48. package/lib/base/functions.js +152 -0
  49. package/lib/base/functions.js.map +1 -0
  50. package/lib/base/index.d.ts +44 -0
  51. package/lib/base/index.js +64 -0
  52. package/lib/base/index.js.map +1 -0
  53. package/lib/base/logFormatter.d.ts +50 -0
  54. package/lib/base/logFormatter.js +105 -0
  55. package/lib/base/logFormatter.js.map +1 -0
  56. package/lib/base/tools.d.ts +316 -0
  57. package/lib/base/tools.js +666 -0
  58. package/lib/base/tools.js.map +1 -0
  59. package/lib/cli.d.ts +28 -0
  60. package/lib/cli.js +254 -0
  61. package/lib/cli.js.map +1 -0
  62. package/lib/dev.d.ts +27 -0
  63. package/lib/dev.js +200 -0
  64. package/lib/dev.js.map +1 -0
  65. package/lib/index.d.ts +32 -0
  66. package/lib/index.js +49 -0
  67. package/lib/index.js.map +1 -0
  68. package/lib/interfaces/events.d.ts +67 -0
  69. package/lib/interfaces/events.js +44 -0
  70. package/lib/interfaces/events.js.map +1 -0
  71. package/lib/interfaces/index.d.ts +38 -0
  72. package/lib/interfaces/index.js +59 -0
  73. package/lib/interfaces/index.js.map +1 -0
  74. package/lib/interfaces/logging.d.ts +106 -0
  75. package/lib/interfaces/logging.js +39 -0
  76. package/lib/interfaces/logging.js.map +1 -0
  77. package/lib/interfaces/metrics.d.ts +365 -0
  78. package/lib/interfaces/metrics.js +46 -0
  79. package/lib/interfaces/metrics.js.map +1 -0
  80. package/lib/interfaces/observable-types.d.ts +63 -0
  81. package/lib/interfaces/observable-types.js +49 -0
  82. package/lib/interfaces/observable-types.js.map +1 -0
  83. package/lib/interfaces/observable.d.ts +297 -0
  84. package/lib/interfaces/observable.js +29 -0
  85. package/lib/interfaces/observable.js.map +1 -0
  86. package/lib/interfaces/options.d.ts +164 -0
  87. package/lib/interfaces/options.js +56 -0
  88. package/lib/interfaces/options.js.map +1 -0
  89. package/lib/interfaces/plugins.d.ts +143 -0
  90. package/lib/interfaces/plugins.js +45 -0
  91. package/lib/interfaces/plugins.js.map +1 -0
  92. package/lib/interfaces/result.d.ts +129 -0
  93. package/lib/interfaces/result.js +162 -0
  94. package/lib/interfaces/result.js.map +1 -0
  95. package/lib/interfaces/schema-events.d.ts +378 -0
  96. package/lib/interfaces/schema-events.js +247 -0
  97. package/lib/interfaces/schema-events.js.map +1 -0
  98. package/lib/interfaces/schema-types.d.ts +407 -0
  99. package/lib/interfaces/schema-types.js +581 -0
  100. package/lib/interfaces/schema-types.js.map +1 -0
  101. package/lib/interfaces/service.d.ts +48 -0
  102. package/lib/interfaces/service.js +29 -0
  103. package/lib/interfaces/service.js.map +1 -0
  104. package/lib/interfaces/tools.d.ts +65 -0
  105. package/lib/interfaces/tools.js +50 -0
  106. package/lib/interfaces/tools.js.map +1 -0
  107. package/lib/plugins/config-default/index.d.ts +59 -0
  108. package/lib/plugins/config-default/index.js +197 -0
  109. package/lib/plugins/config-default/index.js.map +1 -0
  110. package/lib/plugins/config-default/interfaces.d.ts +92 -0
  111. package/lib/plugins/config-default/interfaces.js +36 -0
  112. package/lib/plugins/config-default/interfaces.js.map +1 -0
  113. package/lib/plugins/events-default/events/broadcast.d.ts +36 -0
  114. package/lib/plugins/events-default/events/broadcast.js +85 -0
  115. package/lib/plugins/events-default/events/broadcast.js.map +1 -0
  116. package/lib/plugins/events-default/events/emit.d.ts +38 -0
  117. package/lib/plugins/events-default/events/emit.js +104 -0
  118. package/lib/plugins/events-default/events/emit.js.map +1 -0
  119. package/lib/plugins/events-default/events/emitAndReturn.d.ts +36 -0
  120. package/lib/plugins/events-default/events/emitAndReturn.js +100 -0
  121. package/lib/plugins/events-default/events/emitAndReturn.js.map +1 -0
  122. package/lib/plugins/events-default/events/emitStreamAndReceiveStream.d.ts +38 -0
  123. package/lib/plugins/events-default/events/emitStreamAndReceiveStream.js +134 -0
  124. package/lib/plugins/events-default/events/emitStreamAndReceiveStream.js.map +1 -0
  125. package/lib/plugins/events-default/events/index.d.ts +30 -0
  126. package/lib/plugins/events-default/events/index.js +38 -0
  127. package/lib/plugins/events-default/events/index.js.map +1 -0
  128. package/lib/plugins/events-default/index.d.ts +57 -0
  129. package/lib/plugins/events-default/index.js +86 -0
  130. package/lib/plugins/events-default/index.js.map +1 -0
  131. package/lib/plugins/observable-default/index.d.ts +43 -0
  132. package/lib/plugins/observable-default/index.js +151 -0
  133. package/lib/plugins/observable-default/index.js.map +1 -0
  134. package/lib/schemas/config-default.json +34 -0
  135. package/lib/schemas/config-default.plugin.json +36 -0
  136. package/lib/schemas/events-default.json +18 -0
  137. package/lib/schemas/events-default.plugin.json +17 -0
  138. package/lib/schemas/observable-default.json +33 -0
  139. package/lib/schemas/observable-default.plugin.json +24 -0
  140. package/lib/scripts/bsb-client-cli.d.ts +21 -0
  141. package/lib/scripts/bsb-client-cli.js +701 -0
  142. package/lib/scripts/bsb-client-cli.js.map +1 -0
  143. package/lib/scripts/bsb-plugin-cli.d.ts +15 -0
  144. package/lib/scripts/bsb-plugin-cli.js +547 -0
  145. package/lib/scripts/bsb-plugin-cli.js.map +1 -0
  146. package/lib/scripts/export-schemas.d.ts +17 -0
  147. package/lib/scripts/export-schemas.js +205 -0
  148. package/lib/scripts/export-schemas.js.map +1 -0
  149. package/lib/scripts/extract-schemas-from-source.d.ts +23 -0
  150. package/lib/scripts/extract-schemas-from-source.js +604 -0
  151. package/lib/scripts/extract-schemas-from-source.js.map +1 -0
  152. package/lib/scripts/generate-client-types.d.ts +22 -0
  153. package/lib/scripts/generate-client-types.js +537 -0
  154. package/lib/scripts/generate-client-types.js.map +1 -0
  155. package/lib/scripts/generate-plugin-json.d.ts +17 -0
  156. package/lib/scripts/generate-plugin-json.js +219 -0
  157. package/lib/scripts/generate-plugin-json.js.map +1 -0
  158. package/lib/serviceBase/config.d.ts +83 -0
  159. package/lib/serviceBase/config.js +236 -0
  160. package/lib/serviceBase/config.js.map +1 -0
  161. package/lib/serviceBase/events.d.ts +91 -0
  162. package/lib/serviceBase/events.js +519 -0
  163. package/lib/serviceBase/events.js.map +1 -0
  164. package/lib/serviceBase/index.d.ts +33 -0
  165. package/lib/serviceBase/index.js +50 -0
  166. package/lib/serviceBase/index.js.map +1 -0
  167. package/lib/serviceBase/observable.d.ts +249 -0
  168. package/lib/serviceBase/observable.js +551 -0
  169. package/lib/serviceBase/observable.js.map +1 -0
  170. package/lib/serviceBase/plugins.d.ts +48 -0
  171. package/lib/serviceBase/plugins.js +184 -0
  172. package/lib/serviceBase/plugins.js.map +1 -0
  173. package/lib/serviceBase/serviceBase.d.ts +228 -0
  174. package/lib/serviceBase/serviceBase.js +420 -0
  175. package/lib/serviceBase/serviceBase.js.map +1 -0
  176. package/lib/serviceBase/services.d.ts +63 -0
  177. package/lib/serviceBase/services.js +346 -0
  178. package/lib/serviceBase/services.js.map +1 -0
  179. package/lib/tests.d.ts +27 -0
  180. package/lib/tests.js +44 -0
  181. package/lib/tests.js.map +1 -0
  182. package/package.json +91 -0
@@ -0,0 +1,407 @@
1
+ /**
2
+ * BSB (Better-Service-Base) is an event-bus based microservice framework.
3
+ * Copyright (C) 2016 - 2025 BetterCorp (PTY) Ltd
4
+ *
5
+ * This program is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU Affero General Public License as published
7
+ * by the Free Software Foundation, either version 3 of the License, or
8
+ * (at your option) any later version.
9
+ *
10
+ * Alternatively, you may obtain a commercial license for this program.
11
+ * The commercial license allows you to use the Program in a closed-source manner,
12
+ * including the right to create derivative works that are not subject to the terms
13
+ * of the AGPL.
14
+ *
15
+ * To obtain a commercial license, please contact the copyright holders at
16
+ * https://www.bettercorp.dev. The terms and conditions of the commercial license
17
+ * will be provided upon request.
18
+ *
19
+ * This program is distributed in the hope that it will be useful,
20
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
+ * GNU Affero General Public License for more details.
23
+ *
24
+ * You should have received a copy of the GNU Affero General Public License
25
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
26
+ */
27
+ import { z } from 'zod';
28
+ /**
29
+ * Base interface for all BSB types.
30
+ * These are pure data structures that can be serialized to JSON and
31
+ * shared across different programming languages.
32
+ */
33
+ export interface BSBTypeBase {
34
+ /** Type discriminator for JSON serialization */
35
+ _bsb: string;
36
+ /** Human-readable description for documentation */
37
+ description?: string;
38
+ /** Whether this field is optional */
39
+ optional?: boolean;
40
+ /** Whether this field can be null */
41
+ nullable?: boolean;
42
+ }
43
+ /**
44
+ * String type with optional validation constraints.
45
+ */
46
+ export interface BSBStringType extends BSBTypeBase {
47
+ _bsb: 'string';
48
+ minLength?: number;
49
+ maxLength?: number;
50
+ pattern?: string;
51
+ format?: 'uuid' | 'datetime' | 'email' | 'uri' | 'url';
52
+ }
53
+ /**
54
+ * Numeric type with optional range constraints.
55
+ */
56
+ export interface BSBNumberType extends BSBTypeBase {
57
+ _bsb: 'number';
58
+ numberType: 'int32' | 'int64' | 'float' | 'double';
59
+ min?: number;
60
+ max?: number;
61
+ }
62
+ /**
63
+ * Boolean type.
64
+ */
65
+ export interface BSBBooleanType extends BSBTypeBase {
66
+ _bsb: 'boolean';
67
+ }
68
+ /**
69
+ * Bytes type for binary data (byte arrays).
70
+ * Maps to Uint8Array in JavaScript, byte[] in C#/Java/Go, bytes in Python.
71
+ */
72
+ export interface BSBBytesType extends BSBTypeBase {
73
+ _bsb: 'bytes';
74
+ }
75
+ /**
76
+ * Array type with element type and optional size constraints.
77
+ */
78
+ export interface BSBArrayType extends BSBTypeBase {
79
+ _bsb: 'array';
80
+ items: BSBType;
81
+ minItems?: number;
82
+ maxItems?: number;
83
+ }
84
+ /**
85
+ * Object type with named properties.
86
+ */
87
+ export interface BSBObjectType extends BSBTypeBase {
88
+ _bsb: 'object';
89
+ properties: Record<string, BSBType>;
90
+ required: string[];
91
+ }
92
+ /**
93
+ * Enum type with fixed string values.
94
+ */
95
+ export interface BSBEnumType extends BSBTypeBase {
96
+ _bsb: 'enum';
97
+ values: string[];
98
+ }
99
+ /**
100
+ * Union type representing one of multiple possible types.
101
+ */
102
+ export interface BSBUnionType extends BSBTypeBase {
103
+ _bsb: 'union';
104
+ types: BSBType[];
105
+ }
106
+ /**
107
+ * Union of all BSB type interfaces.
108
+ */
109
+ export type BSBType = BSBStringType | BSBNumberType | BSBBooleanType | BSBBytesType | BSBArrayType | BSBObjectType | BSBEnumType | BSBUnionType;
110
+ /**
111
+ * BSB type builder providing a fluent API for creating cross-language type definitions.
112
+ *
113
+ * @example
114
+ * ```typescript
115
+ * import { bsb, optional } from '@bsb/base';
116
+ *
117
+ * const UserSchema = bsb.object({
118
+ * id: bsb.uuid('User unique identifier'),
119
+ * name: bsb.string({ min: 1, max: 100, description: 'User full name' }),
120
+ * email: bsb.string({ description: 'User email address' }),
121
+ * age: optional(bsb.int32({ min: 0, max: 150, description: 'User age' })),
122
+ * });
123
+ * ```
124
+ */
125
+ export declare const bsb: {
126
+ /**
127
+ * Create a string type with optional constraints.
128
+ */
129
+ string(options?: {
130
+ min?: number;
131
+ max?: number;
132
+ pattern?: string;
133
+ description?: string;
134
+ }): BSBStringType;
135
+ /**
136
+ * Create a UUID string type (RFC 4122).
137
+ *
138
+ * Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
139
+ *
140
+ * Language mappings:
141
+ * - JavaScript/TypeScript: string
142
+ * - C#: Guid
143
+ * - Go: uuid.UUID
144
+ * - Java: UUID
145
+ */
146
+ uuid(description?: string): BSBStringType;
147
+ /**
148
+ * Create an ISO 8601 datetime string type.
149
+ *
150
+ * Format: 2024-01-01T12:00:00Z
151
+ *
152
+ * Language mappings:
153
+ * - JavaScript/TypeScript: Date | string
154
+ * - C#: DateTime
155
+ * - Go: time.Time
156
+ * - Java: Instant
157
+ */
158
+ datetime(description?: string): BSBStringType;
159
+ /**
160
+ * Create an email address string type.
161
+ */
162
+ email(description?: string): BSBStringType;
163
+ /**
164
+ * Create a URI string type.
165
+ */
166
+ uri(description?: string): BSBStringType;
167
+ /**
168
+ * Create a URL string type.
169
+ */
170
+ url(description?: string): BSBStringType;
171
+ /**
172
+ * Create a 32-bit signed integer type.
173
+ *
174
+ * Range: -2,147,483,648 to 2,147,483,647
175
+ *
176
+ * Language mappings:
177
+ * - JavaScript/TypeScript: number
178
+ * - C#: int
179
+ * - Go: int32
180
+ * - Java: int
181
+ */
182
+ int32(options?: {
183
+ min?: number;
184
+ max?: number;
185
+ description?: string;
186
+ }): BSBNumberType;
187
+ /**
188
+ * Create a 64-bit signed integer type.
189
+ *
190
+ * Range: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
191
+ *
192
+ * Note: JavaScript can only safely represent integers up to 2^53.
193
+ *
194
+ * Language mappings:
195
+ * - JavaScript/TypeScript: number
196
+ * - C#: long
197
+ * - Go: int64
198
+ * - Java: long
199
+ */
200
+ int64(options?: {
201
+ min?: number;
202
+ max?: number;
203
+ description?: string;
204
+ }): BSBNumberType;
205
+ /**
206
+ * Create a 32-bit floating point number type.
207
+ *
208
+ * Language mappings:
209
+ * - JavaScript/TypeScript: number
210
+ * - C#: float
211
+ * - Go: float32
212
+ * - Java: float
213
+ */
214
+ float(options?: {
215
+ min?: number;
216
+ max?: number;
217
+ description?: string;
218
+ }): BSBNumberType;
219
+ /**
220
+ * Create a 64-bit floating point number type.
221
+ *
222
+ * Language mappings:
223
+ * - JavaScript/TypeScript: number
224
+ * - C#: double
225
+ * - Go: float64
226
+ * - Java: double
227
+ */
228
+ double(options?: {
229
+ min?: number;
230
+ max?: number;
231
+ description?: string;
232
+ }): BSBNumberType;
233
+ /**
234
+ * Create a boolean type.
235
+ *
236
+ * Language mappings:
237
+ * - JavaScript/TypeScript: boolean
238
+ * - C#: bool
239
+ * - Go: bool
240
+ * - Java: boolean
241
+ */
242
+ boolean(description?: string): BSBBooleanType;
243
+ /**
244
+ * Create a bytes type for binary data.
245
+ * Maps to:
246
+ * - JavaScript/TypeScript: Uint8Array or Buffer
247
+ * - C#: byte[]
248
+ * - Go: []byte
249
+ * - Java: byte[]
250
+ * - Python: bytes
251
+ */
252
+ bytes(description?: string): BSBBytesType;
253
+ /**
254
+ * Create an array type with element type and optional size constraints.
255
+ *
256
+ * @example
257
+ * ```typescript
258
+ * const TagsSchema = bsb.array(
259
+ * bsb.string({ max: 50 }),
260
+ * { min: 1, max: 10, description: 'List of tags' }
261
+ * );
262
+ * ```
263
+ */
264
+ array(items: BSBType, options?: {
265
+ min?: number;
266
+ max?: number;
267
+ description?: string;
268
+ }): BSBArrayType;
269
+ /**
270
+ * Create an object type with named properties.
271
+ *
272
+ * Required fields are automatically determined based on the optional flag.
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * const UserSchema = bsb.object({
277
+ * id: bsb.uuid('User ID'),
278
+ * name: bsb.string({ min: 1, max: 100, description: 'Full name' }),
279
+ * email: optional(bsb.email('Email address')),
280
+ * }, 'User object');
281
+ * ```
282
+ */
283
+ object<const T>(properties: T, description?: string): {
284
+ _bsb: "object";
285
+ properties: T;
286
+ required: string[];
287
+ description?: string;
288
+ optional?: boolean;
289
+ nullable?: boolean;
290
+ };
291
+ /**
292
+ * Create an enum type with fixed string values.
293
+ *
294
+ * @example
295
+ * ```typescript
296
+ * const StatusSchema = bsb.enum(
297
+ * ['pending', 'in-progress', 'completed', 'failed'],
298
+ * 'Task status'
299
+ * );
300
+ * ```
301
+ */
302
+ enum(values: readonly string[], description?: string): BSBEnumType;
303
+ /**
304
+ * Create a union type representing one of multiple possible types.
305
+ *
306
+ * @example
307
+ * ```typescript
308
+ * const IdSchema = bsb.union([
309
+ * bsb.uuid('UUID identifier'),
310
+ * bsb.int32({ description: 'Numeric identifier' }),
311
+ * ], 'Flexible identifier');
312
+ * ```
313
+ */
314
+ union(types: BSBType[], description?: string): BSBUnionType;
315
+ /**
316
+ * Create a generic number type (defaults to double for floating point).
317
+ * This is a convenience wrapper for double().
318
+ */
319
+ number(options?: {
320
+ min?: number;
321
+ max?: number;
322
+ description?: string;
323
+ }): BSBNumberType;
324
+ /**
325
+ * Create a void type for functions that don't return a value.
326
+ */
327
+ void(): BSBType;
328
+ /**
329
+ * Create an unknown type for dynamic/any data.
330
+ */
331
+ unknown(description?: string): BSBType;
332
+ /**
333
+ * Create a record/map type with string keys and a value type.
334
+ */
335
+ record<K extends BSBType, V extends BSBType>(keyType: K, valueType: V, description?: string): BSBType;
336
+ };
337
+ /**
338
+ * Mark a type as optional.
339
+ * Optional fields are not required in object schemas.
340
+ *
341
+ * @example
342
+ * ```typescript
343
+ * const UserSchema = bsb.object({
344
+ * name: bsb.string(), // Required
345
+ * bio: optional(bsb.string()), // Optional
346
+ * });
347
+ * ```
348
+ */
349
+ export declare function optional<T extends BSBType>(type: T): T & {
350
+ optional: true;
351
+ };
352
+ /**
353
+ * Mark a type as nullable.
354
+ * Nullable fields can have null values in addition to their defined type.
355
+ *
356
+ * @example
357
+ * ```typescript
358
+ * const UserSchema = bsb.object({
359
+ * lastLogin: nullable(bsb.datetime('Last login time')),
360
+ * });
361
+ * ```
362
+ */
363
+ export declare function nullable<T extends BSBType>(type: T): T;
364
+ type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...0[]];
365
+ /**
366
+ * Infer TypeScript type from BSB type definition with recursion depth limiting.
367
+ * Provides compile-time type safety when using BSB schemas.
368
+ * Limits recursion to prevent "excessively deep" errors.
369
+ *
370
+ * @example
371
+ * ```typescript
372
+ * const UserSchema = bsb.object({
373
+ * id: bsb.uuid(),
374
+ * name: bsb.string(),
375
+ * age: optional(bsb.int32()),
376
+ * });
377
+ *
378
+ * type User = InferBSBType<typeof UserSchema>;
379
+ * // Results in: { id: string; name: string; age?: number }
380
+ * ```
381
+ */
382
+ export type InferBSBType<T, Depth extends number = 10> = [
383
+ T
384
+ ] extends [never] ? never : Depth extends 0 ? any : T extends BSBStringType ? string : T extends BSBNumberType ? number : T extends BSBBooleanType ? boolean : T extends BSBBytesType ? Uint8Array : T extends BSBArrayType ? InferBSBType<T['items'], Prev[Depth]>[] : T extends {
385
+ _bsb: 'object';
386
+ properties: infer Props;
387
+ } ? ({
388
+ [K in keyof Props as Props[K] extends {
389
+ optional: true;
390
+ } ? never : K]: Props[K] extends BSBType ? InferBSBType<Props[K], Prev[Depth]> : never;
391
+ } & {
392
+ [K in keyof Props as Props[K] extends {
393
+ optional: true;
394
+ } ? K : never]?: Props[K] extends BSBType ? InferBSBType<Props[K], Prev[Depth]> : never;
395
+ }) : T extends BSBEnumType ? T['values'][number] : T extends BSBUnionType ? InferBSBType<T['types'][number], Prev[Depth]> : never;
396
+ /**
397
+ * Convert BSB type to JSON Schema format.
398
+ * Used for schema export and client code generation.
399
+ */
400
+ export declare function bsbToJsonSchema(type: BSBType): any;
401
+ /**
402
+ * Convert BSB type to Zod schema for runtime validation.
403
+ * This is only used in Node.js plugins for runtime validation.
404
+ * Other languages will have their own validation implementations.
405
+ */
406
+ export declare function bsbToZod(type: BSBType): z.ZodTypeAny;
407
+ export {};