@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.
- package/LICENSE +665 -0
- package/LICENSE.commercial +32 -0
- package/README.md +263 -0
- package/bsb-plugin.json +62 -0
- package/lib/base/BSBConfig.d.ts +130 -0
- package/lib/base/BSBConfig.js +95 -0
- package/lib/base/BSBConfig.js.map +1 -0
- package/lib/base/BSBEvents.d.ts +207 -0
- package/lib/base/BSBEvents.js +101 -0
- package/lib/base/BSBEvents.js.map +1 -0
- package/lib/base/BSBObservable.d.ts +178 -0
- package/lib/base/BSBObservable.js +91 -0
- package/lib/base/BSBObservable.js.map +1 -0
- package/lib/base/BSBService.d.ts +277 -0
- package/lib/base/BSBService.js +366 -0
- package/lib/base/BSBService.js.map +1 -0
- package/lib/base/BSBServiceClient.d.ts +135 -0
- package/lib/base/BSBServiceClient.js +130 -0
- package/lib/base/BSBServiceClient.js.map +1 -0
- package/lib/base/EventValidator.d.ts +137 -0
- package/lib/base/EventValidator.js +210 -0
- package/lib/base/EventValidator.js.map +1 -0
- package/lib/base/ObservableBackend.d.ts +281 -0
- package/lib/base/ObservableBackend.js +515 -0
- package/lib/base/ObservableBackend.js.map +1 -0
- package/lib/base/PluginConfig.d.ts +196 -0
- package/lib/base/PluginConfig.js +96 -0
- package/lib/base/PluginConfig.js.map +1 -0
- package/lib/base/PluginEvents.d.ts +140 -0
- package/lib/base/PluginEvents.js +268 -0
- package/lib/base/PluginEvents.js.map +1 -0
- package/lib/base/PluginObservable.d.ts +196 -0
- package/lib/base/PluginObservable.js +250 -0
- package/lib/base/PluginObservable.js.map +1 -0
- package/lib/base/ResourceContext.d.ts +70 -0
- package/lib/base/ResourceContext.js +54 -0
- package/lib/base/ResourceContext.js.map +1 -0
- package/lib/base/base.d.ts +264 -0
- package/lib/base/base.js +182 -0
- package/lib/base/base.js.map +1 -0
- package/lib/base/errorMessages.d.ts +56 -0
- package/lib/base/errorMessages.js +70 -0
- package/lib/base/errorMessages.js.map +1 -0
- package/lib/base/factory.d.ts +58 -0
- package/lib/base/factory.js +167 -0
- package/lib/base/factory.js.map +1 -0
- package/lib/base/functions.d.ts +117 -0
- package/lib/base/functions.js +152 -0
- package/lib/base/functions.js.map +1 -0
- package/lib/base/index.d.ts +44 -0
- package/lib/base/index.js +64 -0
- package/lib/base/index.js.map +1 -0
- package/lib/base/logFormatter.d.ts +50 -0
- package/lib/base/logFormatter.js +105 -0
- package/lib/base/logFormatter.js.map +1 -0
- package/lib/base/tools.d.ts +316 -0
- package/lib/base/tools.js +666 -0
- package/lib/base/tools.js.map +1 -0
- package/lib/cli.d.ts +28 -0
- package/lib/cli.js +254 -0
- package/lib/cli.js.map +1 -0
- package/lib/dev.d.ts +27 -0
- package/lib/dev.js +200 -0
- package/lib/dev.js.map +1 -0
- package/lib/index.d.ts +32 -0
- package/lib/index.js +49 -0
- package/lib/index.js.map +1 -0
- package/lib/interfaces/events.d.ts +67 -0
- package/lib/interfaces/events.js +44 -0
- package/lib/interfaces/events.js.map +1 -0
- package/lib/interfaces/index.d.ts +38 -0
- package/lib/interfaces/index.js +59 -0
- package/lib/interfaces/index.js.map +1 -0
- package/lib/interfaces/logging.d.ts +106 -0
- package/lib/interfaces/logging.js +39 -0
- package/lib/interfaces/logging.js.map +1 -0
- package/lib/interfaces/metrics.d.ts +365 -0
- package/lib/interfaces/metrics.js +46 -0
- package/lib/interfaces/metrics.js.map +1 -0
- package/lib/interfaces/observable-types.d.ts +63 -0
- package/lib/interfaces/observable-types.js +49 -0
- package/lib/interfaces/observable-types.js.map +1 -0
- package/lib/interfaces/observable.d.ts +297 -0
- package/lib/interfaces/observable.js +29 -0
- package/lib/interfaces/observable.js.map +1 -0
- package/lib/interfaces/options.d.ts +164 -0
- package/lib/interfaces/options.js +56 -0
- package/lib/interfaces/options.js.map +1 -0
- package/lib/interfaces/plugins.d.ts +143 -0
- package/lib/interfaces/plugins.js +45 -0
- package/lib/interfaces/plugins.js.map +1 -0
- package/lib/interfaces/result.d.ts +129 -0
- package/lib/interfaces/result.js +162 -0
- package/lib/interfaces/result.js.map +1 -0
- package/lib/interfaces/schema-events.d.ts +378 -0
- package/lib/interfaces/schema-events.js +247 -0
- package/lib/interfaces/schema-events.js.map +1 -0
- package/lib/interfaces/schema-types.d.ts +407 -0
- package/lib/interfaces/schema-types.js +581 -0
- package/lib/interfaces/schema-types.js.map +1 -0
- package/lib/interfaces/service.d.ts +48 -0
- package/lib/interfaces/service.js +29 -0
- package/lib/interfaces/service.js.map +1 -0
- package/lib/interfaces/tools.d.ts +65 -0
- package/lib/interfaces/tools.js +50 -0
- package/lib/interfaces/tools.js.map +1 -0
- package/lib/plugins/config-default/index.d.ts +59 -0
- package/lib/plugins/config-default/index.js +197 -0
- package/lib/plugins/config-default/index.js.map +1 -0
- package/lib/plugins/config-default/interfaces.d.ts +92 -0
- package/lib/plugins/config-default/interfaces.js +36 -0
- package/lib/plugins/config-default/interfaces.js.map +1 -0
- package/lib/plugins/events-default/events/broadcast.d.ts +36 -0
- package/lib/plugins/events-default/events/broadcast.js +85 -0
- package/lib/plugins/events-default/events/broadcast.js.map +1 -0
- package/lib/plugins/events-default/events/emit.d.ts +38 -0
- package/lib/plugins/events-default/events/emit.js +104 -0
- package/lib/plugins/events-default/events/emit.js.map +1 -0
- package/lib/plugins/events-default/events/emitAndReturn.d.ts +36 -0
- package/lib/plugins/events-default/events/emitAndReturn.js +100 -0
- package/lib/plugins/events-default/events/emitAndReturn.js.map +1 -0
- package/lib/plugins/events-default/events/emitStreamAndReceiveStream.d.ts +38 -0
- package/lib/plugins/events-default/events/emitStreamAndReceiveStream.js +134 -0
- package/lib/plugins/events-default/events/emitStreamAndReceiveStream.js.map +1 -0
- package/lib/plugins/events-default/events/index.d.ts +30 -0
- package/lib/plugins/events-default/events/index.js +38 -0
- package/lib/plugins/events-default/events/index.js.map +1 -0
- package/lib/plugins/events-default/index.d.ts +57 -0
- package/lib/plugins/events-default/index.js +86 -0
- package/lib/plugins/events-default/index.js.map +1 -0
- package/lib/plugins/observable-default/index.d.ts +43 -0
- package/lib/plugins/observable-default/index.js +151 -0
- package/lib/plugins/observable-default/index.js.map +1 -0
- package/lib/schemas/config-default.json +34 -0
- package/lib/schemas/config-default.plugin.json +36 -0
- package/lib/schemas/events-default.json +18 -0
- package/lib/schemas/events-default.plugin.json +17 -0
- package/lib/schemas/observable-default.json +33 -0
- package/lib/schemas/observable-default.plugin.json +24 -0
- package/lib/scripts/bsb-client-cli.d.ts +21 -0
- package/lib/scripts/bsb-client-cli.js +701 -0
- package/lib/scripts/bsb-client-cli.js.map +1 -0
- package/lib/scripts/bsb-plugin-cli.d.ts +15 -0
- package/lib/scripts/bsb-plugin-cli.js +547 -0
- package/lib/scripts/bsb-plugin-cli.js.map +1 -0
- package/lib/scripts/export-schemas.d.ts +17 -0
- package/lib/scripts/export-schemas.js +205 -0
- package/lib/scripts/export-schemas.js.map +1 -0
- package/lib/scripts/extract-schemas-from-source.d.ts +23 -0
- package/lib/scripts/extract-schemas-from-source.js +604 -0
- package/lib/scripts/extract-schemas-from-source.js.map +1 -0
- package/lib/scripts/generate-client-types.d.ts +22 -0
- package/lib/scripts/generate-client-types.js +537 -0
- package/lib/scripts/generate-client-types.js.map +1 -0
- package/lib/scripts/generate-plugin-json.d.ts +17 -0
- package/lib/scripts/generate-plugin-json.js +219 -0
- package/lib/scripts/generate-plugin-json.js.map +1 -0
- package/lib/serviceBase/config.d.ts +83 -0
- package/lib/serviceBase/config.js +236 -0
- package/lib/serviceBase/config.js.map +1 -0
- package/lib/serviceBase/events.d.ts +91 -0
- package/lib/serviceBase/events.js +519 -0
- package/lib/serviceBase/events.js.map +1 -0
- package/lib/serviceBase/index.d.ts +33 -0
- package/lib/serviceBase/index.js +50 -0
- package/lib/serviceBase/index.js.map +1 -0
- package/lib/serviceBase/observable.d.ts +249 -0
- package/lib/serviceBase/observable.js +551 -0
- package/lib/serviceBase/observable.js.map +1 -0
- package/lib/serviceBase/plugins.d.ts +48 -0
- package/lib/serviceBase/plugins.js +184 -0
- package/lib/serviceBase/plugins.js.map +1 -0
- package/lib/serviceBase/serviceBase.d.ts +228 -0
- package/lib/serviceBase/serviceBase.js +420 -0
- package/lib/serviceBase/serviceBase.js.map +1 -0
- package/lib/serviceBase/services.d.ts +63 -0
- package/lib/serviceBase/services.js +346 -0
- package/lib/serviceBase/services.js.map +1 -0
- package/lib/tests.d.ts +27 -0
- package/lib/tests.js +44 -0
- package/lib/tests.js.map +1 -0
- 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 {};
|