@polytric/openws-sdkgen 0.0.4 → 0.0.6

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 (30) hide show
  1. package/README.md +2 -2
  2. package/dist/main.cjs +53 -5
  3. package/dist/main.js +53 -5
  4. package/dist/plans/dotnet.cjs +3 -3
  5. package/dist/plans/dotnet.d.cts +2 -143
  6. package/dist/plans/dotnet.d.ts +2 -143
  7. package/dist/plans/dotnet.js +2 -2
  8. package/dist/plans/typescript.cjs +569 -0
  9. package/dist/plans/typescript.d.cts +6 -0
  10. package/dist/plans/typescript.d.ts +6 -0
  11. package/dist/plans/typescript.js +532 -0
  12. package/dist/templates/dotnet/HostRole.cs.ejs +23 -8
  13. package/dist/templates/dotnet/Model.cs.ejs +1 -1
  14. package/dist/templates/dotnet/RemoteRole.cs.ejs +7 -2
  15. package/dist/templates/dotnet/UserHostRole.cs.ejs +26 -4
  16. package/dist/templates/typescript/package.json.ejs +41 -0
  17. package/dist/templates/typescript/src/core/index.ts.ejs +6 -0
  18. package/dist/templates/typescript/src/core/models/index.ts.ejs +3 -0
  19. package/dist/templates/typescript/src/core/models/model.ts.ejs +41 -0
  20. package/dist/templates/typescript/src/core/network.ts.ejs +517 -0
  21. package/dist/templates/typescript/src/core/roles/index.ts.ejs +3 -0
  22. package/dist/templates/typescript/src/core/roles/role.ts.ejs +104 -0
  23. package/dist/templates/typescript/src/index.ts.ejs +4 -0
  24. package/dist/templates/typescript/src/sdk/index.ts.ejs +3 -0
  25. package/dist/templates/typescript/src/sdk/role.ts.ejs +372 -0
  26. package/dist/templates/typescript/tsconfig.json.ejs +14 -0
  27. package/dist/templates/typescript/tsup.config.ts.ejs +10 -0
  28. package/dist/types-BdZPs123.d.cts +115 -0
  29. package/dist/types-BdZPs123.d.ts +115 -0
  30. package/package.json +13 -4
@@ -0,0 +1,569 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/plans/typescript.ts
31
+ var typescript_exports = {};
32
+ __export(typescript_exports, {
33
+ default: () => createPlan
34
+ });
35
+ module.exports = __toCommonJS(typescript_exports);
36
+
37
+ // ../../node_modules/.pnpm/tsup@8.5.1_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js
38
+ var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
39
+ var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
40
+
41
+ // src/plans/typescript.ts
42
+ var import_node_path = __toESM(require("path"), 1);
43
+ var import_node_url = require("url");
44
+ var __dirname = import_node_path.default.dirname((0, import_node_url.fileURLToPath)(importMetaUrl));
45
+ var TEMPLATE_DIR = import_node_path.default.join(__dirname, "../templates/typescript");
46
+ var SRC_TEMPLATE_DIR = import_node_path.default.join(TEMPLATE_DIR, "src");
47
+ var CORE_TEMPLATE_DIR = import_node_path.default.join(SRC_TEMPLATE_DIR, "core");
48
+ var ROLES_TEMPLATE_DIR = import_node_path.default.join(CORE_TEMPLATE_DIR, "roles");
49
+ var MODELS_TEMPLATE_DIR = import_node_path.default.join(CORE_TEMPLATE_DIR, "models");
50
+ var SDK_TEMPLATE_DIR = import_node_path.default.join(SRC_TEMPLATE_DIR, "sdk");
51
+ function pascalCase(str) {
52
+ return str.charAt(0).toUpperCase() + str.slice(1);
53
+ }
54
+ function camelCase(str) {
55
+ return str.charAt(0).toLowerCase() + str.slice(1);
56
+ }
57
+ function kebabCase(str) {
58
+ return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[^a-zA-Z0-9]+/g, "-").replace(/^-|-$/g, "").toLowerCase();
59
+ }
60
+ function createPlan(ctx) {
61
+ const { ir, request, spec } = ctx;
62
+ if (!ir) throw new Error("ir is required");
63
+ if (!request) throw new Error("request is required");
64
+ if (!spec) throw new Error("spec is required");
65
+ const language = Object.keys(request.target)[0];
66
+ const isTypeScript = language === "typescript";
67
+ const extension = isTypeScript ? "ts" : "js";
68
+ const packageName = `@${kebabCase(ir.package.project)}/${kebabCase(ir.package.service)}-openws-sdk`;
69
+ const plan = [
70
+ {
71
+ name: `${language} package manifest`,
72
+ command: "render",
73
+ getData: () => ({
74
+ isTypeScript,
75
+ packageName,
76
+ description: ir.package.description,
77
+ version: ir.package.version ?? "0.0.0",
78
+ extension
79
+ }),
80
+ template: import_node_path.default.join(TEMPLATE_DIR, "package.json.ejs"),
81
+ output: import_node_path.default.join(request.outputPath, "package.json")
82
+ }
83
+ ];
84
+ if (isTypeScript) {
85
+ plan.push(
86
+ {
87
+ name: `${language} tsconfig`,
88
+ command: "render",
89
+ getData: () => ({}),
90
+ template: import_node_path.default.join(TEMPLATE_DIR, "tsconfig.json.ejs"),
91
+ output: import_node_path.default.join(request.outputPath, "tsconfig.json")
92
+ },
93
+ {
94
+ name: `${language} tsup config`,
95
+ command: "render",
96
+ getData: () => ({}),
97
+ template: import_node_path.default.join(TEMPLATE_DIR, "tsup.config.ts.ejs"),
98
+ output: import_node_path.default.join(request.outputPath, "tsup.config.ts")
99
+ }
100
+ );
101
+ }
102
+ const networkExports = [];
103
+ for (const [networkName, networkSpec] of Object.entries(spec.networks)) {
104
+ const networkFileName = kebabCase(networkName);
105
+ const networkOutputPath = import_node_path.default.join(request.outputPath, "src", networkFileName);
106
+ const sdkOutputPath = import_node_path.default.join(request.outputPath, "src", "sdk");
107
+ const allRoles = Object.values(networkSpec.roles).map(toRoleInfo);
108
+ const rolesByName = new Map(allRoles.map((role) => [role.roleName, role]));
109
+ const hostRoles = allRoles;
110
+ const modelScopes = buildModelScopes(buildSpecModels(networkSpec));
111
+ networkExports.push({
112
+ exportName: camelCase(networkName),
113
+ fileName: networkFileName
114
+ });
115
+ plan.push({
116
+ name: `${language} network ${networkName}`,
117
+ command: "render",
118
+ getData: () => ({
119
+ isTypeScript,
120
+ networkName,
121
+ networkClassName: `${pascalCase(networkName)}Network`,
122
+ description: networkSpec.description,
123
+ version: networkSpec.version,
124
+ hostRoles,
125
+ allRoles,
126
+ extension
127
+ }),
128
+ template: import_node_path.default.join(CORE_TEMPLATE_DIR, "network.ts.ejs"),
129
+ output: import_node_path.default.join(networkOutputPath, `network.${extension}`)
130
+ });
131
+ plan.push({
132
+ name: `${language} network exports ${networkName}`,
133
+ command: "render",
134
+ getData: () => ({
135
+ isTypeScript,
136
+ extension,
137
+ modelScopes
138
+ }),
139
+ template: import_node_path.default.join(CORE_TEMPLATE_DIR, "index.ts.ejs"),
140
+ output: import_node_path.default.join(networkOutputPath, `index.${extension}`)
141
+ });
142
+ const roleMessagesByName = /* @__PURE__ */ new Map();
143
+ for (const role of allRoles) {
144
+ const roleSpec = networkSpec.roles[role.roleName];
145
+ const messages = Object.entries(roleSpec.messages).map(
146
+ ([messageName, messageSpec]) => toMessageInfo(messageName, messageSpec, rolesByName)
147
+ );
148
+ roleMessagesByName.set(role.roleName, messages);
149
+ }
150
+ const rolesWithMessages = allRoles.map((role) => ({
151
+ ...role,
152
+ messages: roleMessagesByName.get(role.roleName) ?? []
153
+ }));
154
+ for (const role of rolesWithMessages) {
155
+ plan.push({
156
+ name: `${language} core role ${role.className}`,
157
+ command: "render",
158
+ getData: () => ({
159
+ isTypeScript,
160
+ extension,
161
+ peerRoles: allRoles.filter((peerRole) => peerRole.roleName !== role.roleName),
162
+ ...role
163
+ }),
164
+ template: import_node_path.default.join(ROLES_TEMPLATE_DIR, "role.ts.ejs"),
165
+ output: import_node_path.default.join(networkOutputPath, "roles", `${role.fileName}.${extension}`)
166
+ });
167
+ }
168
+ plan.push({
169
+ name: `${language} core role exports ${networkName}`,
170
+ command: "render",
171
+ getData: () => ({
172
+ isTypeScript,
173
+ extension,
174
+ roles: allRoles
175
+ }),
176
+ template: import_node_path.default.join(ROLES_TEMPLATE_DIR, "index.ts.ejs"),
177
+ output: import_node_path.default.join(networkOutputPath, "roles", `index.${extension}`)
178
+ });
179
+ for (const modelScope of modelScopes) {
180
+ plan.push({
181
+ name: `${language} model exports ${modelScope.scopeName}`,
182
+ command: "render",
183
+ getData: () => ({
184
+ isTypeScript,
185
+ extension,
186
+ ...modelScope
187
+ }),
188
+ template: import_node_path.default.join(MODELS_TEMPLATE_DIR, "index.ts.ejs"),
189
+ output: import_node_path.default.join(
190
+ networkOutputPath,
191
+ "models",
192
+ modelScope.fileName,
193
+ `index.${extension}`
194
+ )
195
+ });
196
+ for (const model of modelScope.models) {
197
+ plan.push({
198
+ name: `${language} model ${model.className}`,
199
+ command: "render",
200
+ getData: () => ({
201
+ isTypeScript,
202
+ ...model
203
+ }),
204
+ template: import_node_path.default.join(MODELS_TEMPLATE_DIR, "model.ts.ejs"),
205
+ output: import_node_path.default.join(
206
+ networkOutputPath,
207
+ "models",
208
+ modelScope.fileName,
209
+ `${model.fileName}.${extension}`
210
+ )
211
+ });
212
+ }
213
+ }
214
+ for (const hostRole of hostRoles) {
215
+ const remoteRoles = getPeerRoles(networkSpec, rolesByName, hostRole.roleName).map(
216
+ (remoteRole) => ({
217
+ ...remoteRole,
218
+ scopedApiName: `${hostRole.className}${remoteRole.className}Api`,
219
+ allowedMethodNames: getAllowedMessageMethodNames(
220
+ networkSpec,
221
+ remoteRole.roleName,
222
+ hostRole.roleName
223
+ )
224
+ })
225
+ );
226
+ const roleSpec = networkSpec.roles[hostRole.roleName];
227
+ const roleHandlers = Object.entries(roleSpec.messages).map(
228
+ ([messageName, messageSpec]) => toHandlerInfo(
229
+ messageName,
230
+ messageSpec,
231
+ rolesByName,
232
+ hostRole.roleName,
233
+ allRoles
234
+ )
235
+ );
236
+ plan.push({
237
+ name: `${language} sdk role ${hostRole.className}`,
238
+ command: "render",
239
+ getData: () => ({
240
+ isTypeScript,
241
+ extension,
242
+ handlers: roleHandlers,
243
+ networkName,
244
+ networkDescription: networkSpec.description,
245
+ networkVersion: networkSpec.version,
246
+ remoteRoles,
247
+ ...hostRole
248
+ }),
249
+ template: import_node_path.default.join(SDK_TEMPLATE_DIR, "role.ts.ejs"),
250
+ output: import_node_path.default.join(sdkOutputPath, `${hostRole.fileName}.${extension}`)
251
+ });
252
+ }
253
+ plan.push({
254
+ name: `${language} sdk exports ${networkName}`,
255
+ command: "render",
256
+ getData: () => ({
257
+ isTypeScript,
258
+ extension,
259
+ roles: hostRoles
260
+ }),
261
+ template: import_node_path.default.join(SDK_TEMPLATE_DIR, "index.ts.ejs"),
262
+ output: import_node_path.default.join(sdkOutputPath, `index.${extension}`)
263
+ });
264
+ }
265
+ plan.push({
266
+ name: `${language} package exports`,
267
+ command: "render",
268
+ getData: () => ({
269
+ isTypeScript,
270
+ extension,
271
+ networkExports
272
+ }),
273
+ template: import_node_path.default.join(SRC_TEMPLATE_DIR, "index.ts.ejs"),
274
+ output: import_node_path.default.join(request.outputPath, "src", `index.${extension}`)
275
+ });
276
+ return {
277
+ ...ctx,
278
+ plan
279
+ };
280
+ }
281
+ function buildModelScopes(models) {
282
+ const scopes = /* @__PURE__ */ new Map();
283
+ const objectModels = models.filter((model) => model.type === "object");
284
+ for (const model of objectModels) {
285
+ const scopeName = model.scopeName;
286
+ const scope = scopes.get(scopeName) ?? {
287
+ scopeName,
288
+ className: pascalCase(scopeName),
289
+ varName: camelCase(scopeName),
290
+ fileName: kebabCase(scopeName),
291
+ models: []
292
+ };
293
+ scope.models.push({
294
+ scopeName,
295
+ className: pascalCase(model.modelName),
296
+ fileName: kebabCase(model.modelName),
297
+ schema: buildModelSchema(model, objectModels),
298
+ properties: (model.properties ?? []).map((property) => ({
299
+ name: property.modelName,
300
+ optional: !property.required,
301
+ typeName: mapType(property)
302
+ })),
303
+ imports: buildModelImports(model)
304
+ });
305
+ scopes.set(scopeName, scope);
306
+ }
307
+ return [...scopes.values()];
308
+ }
309
+ function toRoleInfo(role) {
310
+ const className = pascalCase(role.name);
311
+ const fileName = kebabCase(role.name);
312
+ return {
313
+ roleName: role.name,
314
+ className,
315
+ roleClassName: className,
316
+ hostRoleClassName: `${className}Host`,
317
+ apiName: `${className}Api`,
318
+ varName: camelCase(role.name),
319
+ apiVarName: `${camelCase(role.name)}Api`,
320
+ fileName,
321
+ roleFileName: `${fileName}-role`,
322
+ description: role.description || "",
323
+ endpoints: role.endpoints || []
324
+ };
325
+ }
326
+ function getMessageFromRoles(message, rolesByName, currentRoleName, allRoles) {
327
+ const fromRoleNames = getMessageFromRoleNames(
328
+ message,
329
+ currentRoleName,
330
+ allRoles.map((role) => role.roleName)
331
+ );
332
+ return fromRoleNames.map((roleName) => rolesByName.get(roleName)).filter((role) => Boolean(role));
333
+ }
334
+ function getExplicitMessageFromRoles(message, rolesByName) {
335
+ if (!message.from) return void 0;
336
+ return message.from.map((roleName) => rolesByName.get(roleName)).filter((role) => Boolean(role));
337
+ }
338
+ function getPeerRoles(network, rolesByName, hostRoleName) {
339
+ const peers = /* @__PURE__ */ new Set();
340
+ const hostRole = network.roles[hostRoleName];
341
+ const allRoleNames = Object.keys(network.roles);
342
+ for (const message of Object.values(hostRole.messages)) {
343
+ for (const roleName of getMessageFromRoleNames(message, hostRoleName, allRoleNames)) {
344
+ peers.add(roleName);
345
+ }
346
+ }
347
+ for (const [roleName, role] of Object.entries(network.roles)) {
348
+ if (roleName === hostRoleName) continue;
349
+ for (const message of Object.values(role.messages)) {
350
+ if (getMessageFromRoleNames(message, roleName, allRoleNames).includes(hostRoleName)) {
351
+ peers.add(roleName);
352
+ }
353
+ }
354
+ }
355
+ return [...peers].map((roleName) => rolesByName.get(roleName)).filter((role) => Boolean(role));
356
+ }
357
+ function getMessageFromRoleNames(message, targetRoleName, allRoleNames) {
358
+ return message.from ?? allRoleNames.filter((roleName) => roleName !== targetRoleName);
359
+ }
360
+ function getAllowedMessageMethodNames(network, targetRoleName, fromRoleName) {
361
+ const targetRole = network.roles[targetRoleName];
362
+ const allRoleNames = Object.keys(network.roles);
363
+ return Object.entries(targetRole.messages).filter(
364
+ ([, message]) => getMessageFromRoleNames(message, targetRoleName, allRoleNames).includes(fromRoleName)
365
+ ).map(([messageName]) => camelCase(messageName));
366
+ }
367
+ function buildSpecModels(network) {
368
+ const models = [];
369
+ for (const role of Object.values(network.roles)) {
370
+ for (const [messageName, message] of Object.entries(role.messages)) {
371
+ models.push(...buildIrModels(role.name, `${messageName}Payload`, message.payload));
372
+ }
373
+ }
374
+ return models;
375
+ }
376
+ function buildIrModels(scopeName, modelName, schema) {
377
+ const type = schema.type;
378
+ const model = {
379
+ type,
380
+ scopeName,
381
+ modelName,
382
+ description: schema.description
383
+ };
384
+ switch (type) {
385
+ case "string":
386
+ case "number":
387
+ case "integer":
388
+ case "boolean":
389
+ case "null":
390
+ return [];
391
+ case "array": {
392
+ const items = schema.items;
393
+ if (!items) return [];
394
+ return buildIrModels(scopeName, modelName, items);
395
+ }
396
+ case "object": {
397
+ const properties = [];
398
+ model.properties = properties;
399
+ const models = [];
400
+ const schemaProperties = schema.properties;
401
+ if (!schemaProperties) return [model];
402
+ for (const [subName, subSchema] of Object.entries(schemaProperties)) {
403
+ const subModels = buildIrModels(scopeName, subName, subSchema);
404
+ const mainModel = subModels.find((m) => m.modelName === subName) ?? subSchema;
405
+ const property = {
406
+ type: mainModel.type,
407
+ description: mainModel.description,
408
+ scopeName: mainModel.scopeName ?? scopeName,
409
+ modelName: mainModel.modelName ?? subName,
410
+ required: schema.required?.includes(subName)
411
+ };
412
+ const itemsSource = mainModel.properties?.[0]?.items ?? mainModel.items;
413
+ if (itemsSource) {
414
+ property.items = {
415
+ type: itemsSource.type,
416
+ description: itemsSource.description,
417
+ scopeName: itemsSource?.scopeName ?? scopeName,
418
+ modelName: itemsSource?.modelName ?? subName
419
+ };
420
+ }
421
+ properties.push(property);
422
+ models.push(...subModels);
423
+ }
424
+ return [model, ...models];
425
+ }
426
+ default:
427
+ return [];
428
+ }
429
+ }
430
+ function buildModelImports(model) {
431
+ const imports = /* @__PURE__ */ new Map();
432
+ const addImport = (modelName) => {
433
+ if (!modelName || modelName === model.modelName) return;
434
+ const className = pascalCase(modelName);
435
+ imports.set(className, {
436
+ className,
437
+ fileName: kebabCase(modelName)
438
+ });
439
+ };
440
+ for (const property of model.properties ?? []) {
441
+ if (property.type === "object") {
442
+ addImport(property.modelName);
443
+ }
444
+ if (property.type === "array" && property.items?.type === "object") {
445
+ addImport(property.items.modelName);
446
+ }
447
+ }
448
+ return [...imports.values()];
449
+ }
450
+ function buildModelSchema(model, models, seen = /* @__PURE__ */ new Set()) {
451
+ const key = `${model.scopeName}:${model.modelName}`;
452
+ if (seen.has(key)) return { type: "object" };
453
+ const nextSeen = new Set(seen);
454
+ nextSeen.add(key);
455
+ const properties = {};
456
+ const required = [];
457
+ for (const property of model.properties ?? []) {
458
+ properties[property.modelName] = buildPropertySchema(property, models, nextSeen);
459
+ if (property.required) required.push(property.modelName);
460
+ }
461
+ const schema = {
462
+ $schema: "http://json-schema.org/draft-07/schema#",
463
+ type: "object",
464
+ properties,
465
+ additionalProperties: false
466
+ };
467
+ if (model.description) schema.description = model.description;
468
+ if (required.length > 0) schema.required = required;
469
+ return schema;
470
+ }
471
+ function buildNestedObjectSchema(model, models, seen) {
472
+ const { $schema: _schema, ...schema } = buildModelSchema(model, models, seen);
473
+ return schema;
474
+ }
475
+ function buildPropertySchema(property, models, seen) {
476
+ const schema = buildSchemaForType(
477
+ property.type,
478
+ property.scopeName,
479
+ property.modelName,
480
+ models,
481
+ seen
482
+ );
483
+ if (property.description) schema.description = property.description;
484
+ if (property.type === "array" && property.items) {
485
+ schema.items = buildSchemaForType(
486
+ property.items.type,
487
+ property.items.scopeName,
488
+ property.items.modelName,
489
+ models,
490
+ seen
491
+ );
492
+ if (property.items.description && typeof schema.items === "object" && schema.items !== null) {
493
+ const itemSchema = schema.items;
494
+ itemSchema.description = property.items.description;
495
+ }
496
+ }
497
+ return schema;
498
+ }
499
+ function buildSchemaForType(type, scopeName, modelName, models, seen) {
500
+ switch (type) {
501
+ case "string":
502
+ case "number":
503
+ case "integer":
504
+ case "boolean":
505
+ case "null":
506
+ return { type };
507
+ case "array":
508
+ return { type: "array" };
509
+ case "object": {
510
+ const model = findModel(models, scopeName, modelName);
511
+ if (!model) return { type: "object" };
512
+ return buildNestedObjectSchema(model, models, seen);
513
+ }
514
+ default:
515
+ return {};
516
+ }
517
+ }
518
+ function findModel(models, scopeName, modelName) {
519
+ return models.find((model) => model.scopeName === scopeName && model.modelName === modelName);
520
+ }
521
+ function toHandlerInfo(messageName, message, rolesByName, _currentRoleName, _allRoles) {
522
+ const payloadType = pascalCase(messageName) + "Payload";
523
+ const methodSuffix = pascalCase(messageName);
524
+ return {
525
+ dispatchMethodName: camelCase(messageName),
526
+ onMethodName: `on${methodSuffix}`,
527
+ listenerFieldName: `${camelCase(messageName)}Handlers`,
528
+ messageName,
529
+ payloadType,
530
+ payloadFileName: kebabCase(payloadType),
531
+ schema: toJsonValue(message.payload),
532
+ fromRoles: getExplicitMessageFromRoles(message, rolesByName),
533
+ bindFromRoles: getMessageFromRoles(message, rolesByName, _currentRoleName, _allRoles)
534
+ };
535
+ }
536
+ function toMessageInfo(messageName, message, rolesByName) {
537
+ const payloadType = pascalCase(messageName) + "Payload";
538
+ return {
539
+ methodName: camelCase(messageName),
540
+ messageName,
541
+ payloadType,
542
+ payloadFileName: kebabCase(payloadType),
543
+ schema: toJsonValue(message.payload),
544
+ fromRoles: getExplicitMessageFromRoles(message, rolesByName)
545
+ };
546
+ }
547
+ function toJsonValue(value) {
548
+ return JSON.parse(JSON.stringify(value));
549
+ }
550
+ function mapType(property) {
551
+ switch (property.type) {
552
+ case "string":
553
+ return "string";
554
+ case "number":
555
+ case "integer":
556
+ return "number";
557
+ case "boolean":
558
+ return "boolean";
559
+ case "null":
560
+ return "null";
561
+ case "array":
562
+ if (!property.items) return "unknown[]";
563
+ return `${mapType(property.items)}[]`;
564
+ case "object":
565
+ return pascalCase(property.modelName);
566
+ default:
567
+ return "unknown";
568
+ }
569
+ }
@@ -0,0 +1,6 @@
1
+ import { P as PipelineContext } from '../types-BdZPs123.cjs';
2
+ import '@polytric/openws-spec/types';
3
+
4
+ declare function createPlan(ctx: PipelineContext): PipelineContext;
5
+
6
+ export { createPlan as default };
@@ -0,0 +1,6 @@
1
+ import { P as PipelineContext } from '../types-BdZPs123.js';
2
+ import '@polytric/openws-spec/types';
3
+
4
+ declare function createPlan(ctx: PipelineContext): PipelineContext;
5
+
6
+ export { createPlan as default };