@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,537 @@
1
+ "use strict";
2
+ /**
3
+ * BSB Virtual Client Generator
4
+ *
5
+ * Generates TypeScript virtual client files from exported schema JSON files.
6
+ * These client files provide typed wrappers around the event bus, enabling
7
+ * type-safe cross-plugin communication without direct source imports.
8
+ *
9
+ * Schema sources:
10
+ * 1. Local build: lib/schemas/*.json (from this project's export-schemas)
11
+ * 2. Remote install: src/.bsb/schemas/*.json (from bsb client install)
12
+ *
13
+ * Output:
14
+ * Writes TypeScript files to src/.bsb/clients/{plugin-name}.ts
15
+ *
16
+ * Generated clients use bsb.* builders to define BSBType schemas (same as
17
+ * real plugins), then export inferred TypeScript types from those schemas.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.generateClientTypes = main;
21
+ const fs = require("fs");
22
+ const path = require("path");
23
+ /**
24
+ * Convert JSON Schema to a bsb.* builder call string.
25
+ * Reconstructs the BSBType builder expression from exported JSON Schema.
26
+ */
27
+ function jsonSchemaToBsbCode(schema) {
28
+ // Handle enum
29
+ if (schema.enum) {
30
+ const values = schema.enum.map((v) => JSON.stringify(v)).join(', ');
31
+ const desc = schema.description ? `, ${JSON.stringify(schema.description)}` : '';
32
+ return `bsb.enum([${values}]${desc})`;
33
+ }
34
+ // Handle oneOf (union types / void)
35
+ if (schema.oneOf && Array.isArray(schema.oneOf)) {
36
+ if (schema.oneOf.length === 0) {
37
+ // void or unknown
38
+ if (schema.description === 'void') {
39
+ return 'bsb.void()';
40
+ }
41
+ return `bsb.unknown(${schema.description ? JSON.stringify(schema.description) : ''})`;
42
+ }
43
+ const types = schema.oneOf.map((s) => jsonSchemaToBsbCode(s)).join(', ');
44
+ const desc = schema.description ? `, ${JSON.stringify(schema.description)}` : '';
45
+ return `bsb.union([${types}]${desc})`;
46
+ }
47
+ // Handle array type (can be string or string[])
48
+ const types = Array.isArray(schema.type) ? schema.type : [schema.type];
49
+ const type = types[0];
50
+ switch (type) {
51
+ case 'string': {
52
+ // Check format for specialized types
53
+ if (schema.format === 'uuid') {
54
+ return `bsb.uuid(${schema.description ? JSON.stringify(schema.description) : ''})`;
55
+ }
56
+ if (schema.format === 'datetime') {
57
+ return `bsb.datetime(${schema.description ? JSON.stringify(schema.description) : ''})`;
58
+ }
59
+ if (schema.format === 'email') {
60
+ return `bsb.email(${schema.description ? JSON.stringify(schema.description) : ''})`;
61
+ }
62
+ if (schema.format === 'uri' || schema.format === 'url') {
63
+ return `bsb.uri(${schema.description ? JSON.stringify(schema.description) : ''})`;
64
+ }
65
+ // Generic string
66
+ const opts = [];
67
+ if (schema.minLength !== undefined)
68
+ opts.push(`min: ${schema.minLength}`);
69
+ if (schema.maxLength !== undefined)
70
+ opts.push(`max: ${schema.maxLength}`);
71
+ if (schema.pattern)
72
+ opts.push(`pattern: ${JSON.stringify(schema.pattern)}`);
73
+ if (schema.description)
74
+ opts.push(`description: ${JSON.stringify(schema.description)}`);
75
+ if (opts.length === 0)
76
+ return 'bsb.string()';
77
+ return `bsb.string({ ${opts.join(', ')} })`;
78
+ }
79
+ case 'number':
80
+ case 'integer': {
81
+ const format = schema.format;
82
+ const opts = [];
83
+ if (schema.description)
84
+ opts.push(`description: ${JSON.stringify(schema.description)}`);
85
+ const optsStr = opts.length > 0 ? `{ ${opts.join(', ')} }` : '';
86
+ if (format === 'int32')
87
+ return `bsb.int32(${optsStr ? optsStr : ''})`;
88
+ if (format === 'int64')
89
+ return `bsb.int64(${optsStr ? optsStr : ''})`;
90
+ if (format === 'float')
91
+ return `bsb.float(${optsStr ? optsStr : ''})`;
92
+ // Default: number (double)
93
+ return `bsb.number(${optsStr ? optsStr : ''})`;
94
+ }
95
+ case 'boolean':
96
+ return `bsb.boolean(${schema.description ? JSON.stringify(schema.description) : ''})`;
97
+ case 'array': {
98
+ const itemsCode = schema.items ? jsonSchemaToBsbCode(schema.items) : 'bsb.unknown()';
99
+ const opts = [];
100
+ if (schema.minItems !== undefined)
101
+ opts.push(`min: ${schema.minItems}`);
102
+ if (schema.maxItems !== undefined)
103
+ opts.push(`max: ${schema.maxItems}`);
104
+ if (schema.description)
105
+ opts.push(`description: ${JSON.stringify(schema.description)}`);
106
+ if (opts.length === 0)
107
+ return `bsb.array(${itemsCode})`;
108
+ return `bsb.array(${itemsCode}, { ${opts.join(', ')} })`;
109
+ }
110
+ case 'object': {
111
+ if (!schema.properties || Object.keys(schema.properties).length === 0) {
112
+ return `bsb.object({}, ${schema.description ? JSON.stringify(schema.description) : "''"})`;
113
+ }
114
+ const required = schema.required || [];
115
+ const propLines = [];
116
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
117
+ const propCode = jsonSchemaToBsbCode(propSchema);
118
+ const isOptional = !required.includes(key);
119
+ if (isOptional) {
120
+ propLines.push(` ${key}: optional(${propCode})`);
121
+ }
122
+ else {
123
+ propLines.push(` ${key}: ${propCode}`);
124
+ }
125
+ }
126
+ const desc = schema.description ? `, ${JSON.stringify(schema.description)}` : '';
127
+ return `bsb.object({\n${propLines.join(',\n')}\n }${desc})`;
128
+ }
129
+ default:
130
+ return 'bsb.unknown()';
131
+ }
132
+ }
133
+ /**
134
+ * Convert event name to camelCase method name.
135
+ * e.g., 'todo.create' → 'todoCreate', 'todo-created' → 'todoCreated'
136
+ */
137
+ function eventNameToMethodName(eventName) {
138
+ return eventName
139
+ .replace(/[.-](\w)/g, (_, c) => c.toUpperCase());
140
+ }
141
+ /**
142
+ * Convert plugin key/ID to PascalCase client class name.
143
+ * Strip 'service-' prefix, remove non-alphanumeric chars, PascalCase, append 'Client'.
144
+ * e.g., 'service-todo' → 'TodoClient', 'bsb-registry' → 'BsbRegistryClient'
145
+ */
146
+ function pluginNameToClassName(pluginId) {
147
+ let name = pluginId;
148
+ if (name.startsWith('service-')) {
149
+ name = name.substring('service-'.length);
150
+ }
151
+ const pascal = name
152
+ .replace(/[^a-zA-Z0-9-]/g, '')
153
+ .split('-')
154
+ .filter(part => part.length > 0)
155
+ .map(part => part.charAt(0).toUpperCase() + part.slice(1))
156
+ .join('');
157
+ return pascal + 'Client';
158
+ }
159
+ /**
160
+ * Generate a const name from event name and role.
161
+ * e.g., 'todo.create' + 'Input' → '_todoCreateInput'
162
+ */
163
+ function eventNameToConstName(eventName, suffix) {
164
+ const camel = eventNameToMethodName(eventName);
165
+ return '_' + camel + suffix;
166
+ }
167
+ /**
168
+ * Flip mapping for client method generation.
169
+ * Service's onReturnableEvents → client emits returnable events, etc.
170
+ */
171
+ const FLIP_MAP = {
172
+ 'emitEvents': 'onEvents',
173
+ 'onEvents': 'emitEvents',
174
+ 'emitReturnableEvents': 'onReturnableEvents',
175
+ 'onReturnableEvents': 'emitReturnableEvents',
176
+ 'emitBroadcast': 'onBroadcast',
177
+ 'onBroadcast': 'emitBroadcast',
178
+ };
179
+ /**
180
+ * Generate virtual client TypeScript file from exported schema.
181
+ * @param pluginId The plugin key/ID (from schema filename), used for class naming
182
+ */
183
+ function generateVirtualClient(schemaExport, importBase, pluginId) {
184
+ const lines = [];
185
+ const className = pluginNameToClassName(pluginId);
186
+ // File header
187
+ lines.push(`/**`);
188
+ lines.push(` * Auto-generated BSB virtual client for ${schemaExport.pluginName}`);
189
+ lines.push(` * DO NOT EDIT - Regenerated on every build`);
190
+ lines.push(` * @version ${schemaExport.version}`);
191
+ lines.push(` */`);
192
+ // Import paths differ between @bsb/base (external) and self-build (relative)
193
+ if (importBase === '@bsb/base') {
194
+ lines.push(`import { ServiceClient, BSBService, bsb, optional } from "@bsb/base";`);
195
+ lines.push(`import { createReturnableEvent, createFireAndForgetEvent, createBroadcastEvent, createEventSchemas } from "@bsb/base";`);
196
+ lines.push(`import type { Observable, BSBServiceClientDefinition, EventInputType, EventOutputType } from "@bsb/base";`);
197
+ }
198
+ else {
199
+ // Self-build: src/.bsb/clients/ → ../../index for the main barrel
200
+ lines.push(`import { ServiceClient, BSBService, bsb, optional } from "../../index";`);
201
+ lines.push(`import { createReturnableEvent, createFireAndForgetEvent, createBroadcastEvent, createEventSchemas } from "../../interfaces/schema-events";`);
202
+ lines.push(`import type { Observable, BSBServiceClientDefinition, EventInputType, EventOutputType } from "../../index";`);
203
+ }
204
+ lines.push('');
205
+ // Group events by category
206
+ const categorizedEvents = {
207
+ emitEvents: [],
208
+ onEvents: [],
209
+ emitReturnableEvents: [],
210
+ onReturnableEvents: [],
211
+ emitBroadcast: [],
212
+ onBroadcast: [],
213
+ };
214
+ for (const [eventName, eventDef] of Object.entries(schemaExport.events)) {
215
+ const def = eventDef;
216
+ if (categorizedEvents[def.category]) {
217
+ categorizedEvents[def.category].push({ name: eventName, def });
218
+ }
219
+ }
220
+ // --- Generate BSBType schema consts for each event's input/output ---
221
+ const constsDone = new Set();
222
+ for (const events of Object.values(categorizedEvents)) {
223
+ for (const { name, def } of events) {
224
+ // Input const
225
+ const inputConst = eventNameToConstName(name, 'Schema');
226
+ if (!constsDone.has(inputConst)) {
227
+ const bsbCode = jsonSchemaToBsbCode(def.inputSchema);
228
+ lines.push(`const ${inputConst} = ${bsbCode};`);
229
+ constsDone.add(inputConst);
230
+ }
231
+ // Output const (only for returnable events)
232
+ if (def.type === 'returnable' && def.outputSchema) {
233
+ const outputConst = eventNameToConstName(name, 'OutputSchema');
234
+ if (!constsDone.has(outputConst)) {
235
+ const bsbCode = jsonSchemaToBsbCode(def.outputSchema);
236
+ lines.push(`const ${outputConst} = ${bsbCode};`);
237
+ constsDone.add(outputConst);
238
+ }
239
+ }
240
+ }
241
+ }
242
+ if (constsDone.size > 0) {
243
+ lines.push('');
244
+ }
245
+ // --- Generate Event Schemas using createEventSchemas ---
246
+ lines.push(`// --- Event Schemas (typed, follows ServiceClientEventSchemas flip) ---`);
247
+ lines.push(`const _EventSchemas = createEventSchemas({`);
248
+ for (const [category, events] of Object.entries(categorizedEvents)) {
249
+ if (events.length === 0)
250
+ continue;
251
+ lines.push(` ${category}: {`);
252
+ for (const { name, def } of events) {
253
+ const inputConst = eventNameToConstName(name, 'Schema');
254
+ const desc = def.description ? JSON.stringify(def.description) : undefined;
255
+ if (def.type === 'returnable') {
256
+ const outputConst = eventNameToConstName(name, 'OutputSchema');
257
+ const descArg = desc ? `, ${desc}` : '';
258
+ const timeoutArg = def.defaultTimeout !== undefined ? `, ${def.defaultTimeout}` : '';
259
+ // If we have timeout but no desc, we need desc placeholder
260
+ if (def.defaultTimeout !== undefined && !desc) {
261
+ lines.push(` '${name}': createReturnableEvent(${inputConst}, ${outputConst}, undefined, ${def.defaultTimeout}),`);
262
+ }
263
+ else {
264
+ lines.push(` '${name}': createReturnableEvent(${inputConst}, ${outputConst}${descArg}${timeoutArg}),`);
265
+ }
266
+ }
267
+ else if (def.type === 'broadcast') {
268
+ const descArg = desc ? `, ${desc}` : '';
269
+ lines.push(` '${name}': createBroadcastEvent(${inputConst}${descArg}),`);
270
+ }
271
+ else {
272
+ const descArg = desc ? `, ${desc}` : '';
273
+ lines.push(` '${name}': createFireAndForgetEvent(${inputConst}${descArg}),`);
274
+ }
275
+ }
276
+ lines.push(` },`);
277
+ }
278
+ lines.push(`});`);
279
+ lines.push('');
280
+ // --- Export inferred types ---
281
+ lines.push(`// --- Exported Types (inferred from BSBType schemas) ---`);
282
+ const typesDone = new Set();
283
+ for (const events of Object.values(categorizedEvents)) {
284
+ for (const { name, def } of events) {
285
+ const camel = eventNameToMethodName(name);
286
+ const typeName = camel.charAt(0).toUpperCase() + camel.slice(1);
287
+ // Input type
288
+ const inputTypeName = typeName + 'Input';
289
+ if (!typesDone.has(inputTypeName)) {
290
+ const inputConst = eventNameToConstName(name, 'Schema');
291
+ lines.push(`export type ${inputTypeName} = EventInputType<{ input: typeof ${inputConst} }>;`);
292
+ typesDone.add(inputTypeName);
293
+ }
294
+ // Output type (returnable only)
295
+ if (def.type === 'returnable' && def.outputSchema) {
296
+ const outputTypeName = typeName + 'Output';
297
+ if (!typesDone.has(outputTypeName)) {
298
+ const outputConst = eventNameToConstName(name, 'OutputSchema');
299
+ lines.push(`export type ${outputTypeName} = EventOutputType<{ output: typeof ${outputConst} }>;`);
300
+ typesDone.add(outputTypeName);
301
+ }
302
+ }
303
+ }
304
+ }
305
+ lines.push('');
306
+ // --- Internal Plugin Reference ---
307
+ lines.push(`// --- Internal: Plugin reference for ServiceClient wiring ---`);
308
+ lines.push(`const _PLUGIN_CLIENT: BSBServiceClientDefinition = {`);
309
+ lines.push(` name: "${pluginId}",`);
310
+ lines.push(`};`);
311
+ lines.push('');
312
+ lines.push(`class _PluginRef {`);
313
+ lines.push(` static PLUGIN_CLIENT = _PLUGIN_CLIENT;`);
314
+ lines.push(`}`);
315
+ lines.push('');
316
+ // --- Exported Client Class ---
317
+ lines.push(`// --- Exported Client ---`);
318
+ lines.push(`export default class ${className} extends ServiceClient<any, typeof _EventSchemas, typeof _PluginRef> {`);
319
+ lines.push(` constructor(context: BSBService) {`);
320
+ lines.push(` super(_PluginRef, context);`);
321
+ lines.push(` }`);
322
+ // Generate methods for each event (flip categories for client perspective)
323
+ for (const [category, events] of Object.entries(categorizedEvents)) {
324
+ if (events.length === 0)
325
+ continue;
326
+ const clientCategory = FLIP_MAP[category];
327
+ if (!clientCategory)
328
+ continue;
329
+ for (const { name, def } of events) {
330
+ const methodName = eventNameToMethodName(name);
331
+ const camel = eventNameToMethodName(name);
332
+ const typeName = camel.charAt(0).toUpperCase() + camel.slice(1);
333
+ const inputTypeName = typeName + 'Input';
334
+ const description = def.description || name;
335
+ lines.push('');
336
+ switch (clientCategory) {
337
+ case 'emitEvents': {
338
+ lines.push(` /** ${description} */`);
339
+ lines.push(` async ${methodName}(obs: Observable, input: ${inputTypeName}): Promise<void> {`);
340
+ lines.push(` await this.events.emitEvent("${name}", obs, input);`);
341
+ lines.push(` }`);
342
+ break;
343
+ }
344
+ case 'emitReturnableEvents': {
345
+ const outputTypeName = typeName + 'Output';
346
+ const timeout = def.defaultTimeout ?? 5;
347
+ lines.push(` /** ${description} (default timeout: ${timeout}s) */`);
348
+ lines.push(` async ${methodName}(obs: Observable, input: ${inputTypeName}, timeout: number = ${timeout}): Promise<${outputTypeName}> {`);
349
+ lines.push(` return this.events.emitEventAndReturn("${name}", obs, input, timeout);`);
350
+ lines.push(` }`);
351
+ break;
352
+ }
353
+ case 'emitBroadcast': {
354
+ const emitMethodName = 'emit' + methodName.charAt(0).toUpperCase() + methodName.slice(1);
355
+ lines.push(` /** ${description} */`);
356
+ lines.push(` async ${emitMethodName}(obs: Observable, input: ${inputTypeName}): Promise<void> {`);
357
+ lines.push(` await this.events.emitBroadcast("${name}", obs, input);`);
358
+ lines.push(` }`);
359
+ break;
360
+ }
361
+ case 'onEvents': {
362
+ const onMethodName = 'on' + methodName.charAt(0).toUpperCase() + methodName.slice(1);
363
+ lines.push(` /** ${description} */`);
364
+ lines.push(` async ${onMethodName}(obs: Observable, handler: (handlerObs: Observable, input: ${inputTypeName}) => Promise<void>): Promise<void> {`);
365
+ lines.push(` await this.events.onEvent("${name}", obs, handler);`);
366
+ lines.push(` }`);
367
+ break;
368
+ }
369
+ case 'onReturnableEvents': {
370
+ const outputTypeName = typeName + 'Output';
371
+ const onMethodName = 'on' + methodName.charAt(0).toUpperCase() + methodName.slice(1);
372
+ lines.push(` /** ${description} */`);
373
+ lines.push(` async ${onMethodName}(obs: Observable, handler: (handlerObs: Observable, input: ${inputTypeName}) => Promise<${outputTypeName}>): Promise<void> {`);
374
+ lines.push(` await this.events.onReturnableEvent("${name}", obs, handler);`);
375
+ lines.push(` }`);
376
+ break;
377
+ }
378
+ case 'onBroadcast': {
379
+ const onMethodName = 'on' + methodName.charAt(0).toUpperCase() + methodName.slice(1);
380
+ lines.push(` /** ${description} */`);
381
+ lines.push(` async ${onMethodName}(obs: Observable, handler: (handlerObs: Observable, input: ${inputTypeName}) => Promise<void>): Promise<void> {`);
382
+ lines.push(` await this.events.onBroadcast("${name}", obs, handler);`);
383
+ lines.push(` }`);
384
+ break;
385
+ }
386
+ }
387
+ }
388
+ }
389
+ lines.push(`}`);
390
+ lines.push(`export { ${className} };`);
391
+ lines.push('');
392
+ return lines.join('\n');
393
+ }
394
+ /**
395
+ * Process schema files from a directory and generate virtual clients.
396
+ */
397
+ function processSchemaDirectory(schemasDir, clientsDir, importBase, skipPlugins) {
398
+ let generated = 0;
399
+ let errors = 0;
400
+ if (!fs.existsSync(schemasDir)) {
401
+ return { generated, errors };
402
+ }
403
+ const schemaFiles = fs.readdirSync(schemasDir)
404
+ .filter(file => file.endsWith('.json') && !file.endsWith('.plugin.json'));
405
+ for (const schemaFile of schemaFiles) {
406
+ try {
407
+ const pluginId = path.basename(schemaFile, '.json');
408
+ // Skip if already processed from a higher-priority source
409
+ if (skipPlugins && skipPlugins.has(pluginId)) {
410
+ continue;
411
+ }
412
+ const schemaPath = path.join(schemasDir, schemaFile);
413
+ const schemaContent = fs.readFileSync(schemaPath, 'utf-8');
414
+ const schemaExport = JSON.parse(schemaContent);
415
+ // Skip schemas with no events
416
+ if (!schemaExport.events || Object.keys(schemaExport.events).length === 0) {
417
+ continue;
418
+ }
419
+ // Generate virtual client (use pluginId from filename, not pluginName from schema)
420
+ const clientCode = generateVirtualClient(schemaExport, importBase, pluginId);
421
+ // Write to file
422
+ const outputPath = path.join(clientsDir, `${pluginId}.ts`);
423
+ fs.writeFileSync(outputPath, clientCode, 'utf-8');
424
+ // eslint-disable-next-line no-console
425
+ console.log(` Generated virtual client for ${pluginId} (v${schemaExport.version})`);
426
+ generated++;
427
+ }
428
+ catch (error) {
429
+ errors++;
430
+ // eslint-disable-next-line no-console
431
+ console.error(` Error generating client for ${schemaFile}: ${error instanceof Error ? error.message : String(error)}`);
432
+ }
433
+ }
434
+ return { generated, errors };
435
+ }
436
+ /**
437
+ * Ensure the project's .gitignore contains the src/.bsb/ entry.
438
+ * Automatically adds it if missing, so generated virtual clients
439
+ * are never accidentally committed.
440
+ */
441
+ function ensureGitignore(projectRoot) {
442
+ const gitignorePath = path.join(projectRoot, '.gitignore');
443
+ const bsbDir = path.join(projectRoot, 'src', '.bsb');
444
+ let relativeBsbDir = path.relative(projectRoot, bsbDir).replace(/\\/g, '/');
445
+ if (!relativeBsbDir.endsWith('/')) {
446
+ relativeBsbDir += '/';
447
+ }
448
+ try {
449
+ if (fs.existsSync(gitignorePath)) {
450
+ const content = fs.readFileSync(gitignorePath, 'utf-8');
451
+ const lines = content.split(/\r?\n/);
452
+ const alreadyIgnored = lines.some(line => {
453
+ const trimmed = line.trim();
454
+ return trimmed === relativeBsbDir ||
455
+ trimmed === relativeBsbDir.replace(/\/$/, '') ||
456
+ trimmed === '.bsb/' ||
457
+ trimmed === '.bsb' ||
458
+ trimmed === 'src/.bsb/' ||
459
+ trimmed === 'src/.bsb';
460
+ });
461
+ if (!alreadyIgnored) {
462
+ const newline = content.endsWith('\n') ? '' : '\n';
463
+ fs.writeFileSync(gitignorePath, content + newline + relativeBsbDir + '\n', 'utf-8');
464
+ // eslint-disable-next-line no-console
465
+ console.log(` Added '${relativeBsbDir}' to .gitignore`);
466
+ }
467
+ }
468
+ else {
469
+ fs.writeFileSync(gitignorePath, relativeBsbDir + '\n', 'utf-8');
470
+ // eslint-disable-next-line no-console
471
+ console.log(` Created .gitignore with '${relativeBsbDir}'`);
472
+ }
473
+ }
474
+ catch {
475
+ // Non-fatal: don't fail the build if we can't update .gitignore
476
+ }
477
+ }
478
+ /**
479
+ * Main generation function.
480
+ */
481
+ async function main() {
482
+ const projectRoot = process.cwd();
483
+ // Detect if we're in @bsb/base itself or a plugin project
484
+ const packageJsonPath = path.join(projectRoot, 'package.json');
485
+ let importBase = '@bsb/base';
486
+ if (fs.existsSync(packageJsonPath)) {
487
+ try {
488
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
489
+ if (pkg.name === '@bsb/base') {
490
+ importBase = '../../base';
491
+ }
492
+ }
493
+ catch {
494
+ // ignore parse errors
495
+ }
496
+ }
497
+ // Create output directory
498
+ const clientsDir = path.join(projectRoot, 'src', '.bsb', 'clients');
499
+ if (!fs.existsSync(clientsDir)) {
500
+ fs.mkdirSync(clientsDir, { recursive: true });
501
+ }
502
+ // Ensure .gitignore covers the generated directory
503
+ ensureGitignore(projectRoot);
504
+ let totalGenerated = 0;
505
+ let totalErrors = 0;
506
+ // Schema source: src/.bsb/schemas/*.json
507
+ // These are extracted from TS source pre-compilation, or installed via `bsb client install`
508
+ const bsbSchemasDir = path.join(projectRoot, 'src', '.bsb', 'schemas');
509
+ if (fs.existsSync(bsbSchemasDir)) {
510
+ // eslint-disable-next-line no-console
511
+ console.log('Processing schemas...');
512
+ const { generated, errors } = processSchemaDirectory(bsbSchemasDir, clientsDir, importBase);
513
+ totalGenerated += generated;
514
+ totalErrors += errors;
515
+ }
516
+ if (totalGenerated === 0 && totalErrors === 0) {
517
+ // eslint-disable-next-line no-console
518
+ console.log('No schema files found to generate clients from.');
519
+ return;
520
+ }
521
+ // eslint-disable-next-line no-console
522
+ console.log(`\nClient generation complete: ${totalGenerated} generated, ${totalErrors} errors`);
523
+ // eslint-disable-next-line no-console
524
+ console.log(`Clients written to: ${clientsDir}`);
525
+ if (totalErrors > 0) {
526
+ process.exit(1);
527
+ }
528
+ }
529
+ // Run if called directly
530
+ if (require.main === module) {
531
+ main().catch(error => {
532
+ // eslint-disable-next-line no-console
533
+ console.error('Fatal error during client generation:', error);
534
+ process.exit(1);
535
+ });
536
+ }
537
+ //# sourceMappingURL=generate-client-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-client-types.js","sourceRoot":"","sources":["../../src/scripts/generate-client-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * BSB Plugin Metadata Generation Script
3
+ *
4
+ * Discovers publishable core plugins and generates plugin metadata JSON files.
5
+ *
6
+ * Usage:
7
+ * npm run generate-plugin-json
8
+ *
9
+ * Output:
10
+ * - lib/schemas/{plugin-name}.plugin.json
11
+ * - bsb-plugin.json (registry-facing root manifest)
12
+ */
13
+ /**
14
+ * Main generation function.
15
+ */
16
+ declare function main(): Promise<void>;
17
+ export { main as generatePluginMetadata };