@asyncapi/generator 3.2.0 → 3.2.2

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 (47) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/docs/api_components.md +66 -2
  3. package/lib/generator.js +16 -2
  4. package/lib/logMessages.js +6 -1
  5. package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/__transpiled/components/ClientClass.js +2 -0
  6. package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/__transpiled/components/ClientClass.js.map +1 -1
  7. package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/__transpiled/template/client.dart.js +2 -0
  8. package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/__transpiled/template/client.dart.js.map +1 -1
  9. package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/components/ClientClass.js +2 -1
  10. package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/package.json +3 -1
  11. package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/__transpiled/components/EchoWebSocket.js +4 -2
  12. package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/__transpiled/components/EchoWebSocket.js.map +1 -1
  13. package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/__transpiled/template/src/main/java/com/asyncapi/client.java.js +4 -12
  14. package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/__transpiled/template/src/main/java/com/asyncapi/client.java.js.map +1 -1
  15. package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/components/EchoWebSocket.js +2 -3
  16. package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/package.json +3 -1
  17. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/ClientClass.js +2 -1
  18. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/ClientClass.js.map +1 -1
  19. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/Constructor.js +1 -0
  20. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/Constructor.js.map +1 -1
  21. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/RegisterOutgoingProcessor.js +24 -0
  22. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/RegisterOutgoingProcessor.js.map +1 -0
  23. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/example.js +12 -0
  24. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/example.js.map +1 -1
  25. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/template/client.js.js +16 -1
  26. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/template/client.js.js.map +1 -1
  27. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/components/ClientClass.js +2 -0
  28. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/components/Constructor.js +1 -0
  29. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/components/RegisterOutgoingProcessor.js +17 -0
  30. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/example.js +9 -0
  31. package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/package.json +3 -1
  32. package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/components/ClientClass.js +3 -2
  33. package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/components/ClientClass.js.map +1 -1
  34. package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/template/client.py.js +3 -16
  35. package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/template/client.py.js.map +1 -1
  36. package/lib/templates/bakedInTemplates/core-template-client-websocket-python/components/ClientClass.js +2 -3
  37. package/lib/templates/bakedInTemplates/core-template-client-websocket-python/package.json +3 -1
  38. package/lib/templates/bakedInTemplates.js +9 -3
  39. package/lib/templates/config/validator.js +1 -1
  40. package/lib/utils.js +10 -8
  41. package/package.json +1 -1
  42. package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/__transpiled/components/HandleError.js +0 -19
  43. package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/__transpiled/components/HandleError.js.map +0 -1
  44. package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/components/HandleError.js +0 -14
  45. package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/components/HandleError.js +0 -25
  46. package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/components/HandleError.js.map +0 -1
  47. package/lib/templates/bakedInTemplates/core-template-client-websocket-python/components/HandleError.js +0 -18
@@ -1 +1 @@
1
- {"version":3,"file":"example.js","sources":["../../../../../../../packages/templates/clients/websocket/javascript/example.js"],"sourcesContent":["const WSClient = require('./test/temp/snapshotTestResult/custom_client_hoppscotch/client.js');\n// Example usage\nconst wsClient = new WSClient();\n\n// Example of how custom message handler that operates on incoming messages can look like\nfunction myHandler(message) {\n console.log('====================');\n console.log('Just proving I got the message in myHandler:', message);\n console.log('====================');\n}\n\n// Example of custom error handler\nfunction myErrorHandler(error) {\n console.error('Errors from Websocket:', error.message);\n}\n\nasync function main() {\n wsClient.registerMessageHandler(myHandler);\n wsClient.registerErrorHandler(myErrorHandler);\n\n try {\n await wsClient.connect();\n\n // Loop to send messages every 5 seconds\n const interval = 5000; // 5 seconds\n const message = 'Hello, Echo!';\n\n while (true) {\n try {\n await wsClient.sendEchoMessage(message);\n } catch (error) {\n console.error('Error while sending message:', error);\n }\n // Wait for the interval before sending the next message\n await new Promise(resolve => setTimeout(resolve, interval));\n }\n } catch (error) {\n console.error('Failed to connect to WebSocket:', error.message);\n }\n}\n\nmain();\n"],"names":["WSClient","require","wsClient","myHandler","message","console","log","myErrorHandler","error","main","registerMessageHandler","registerErrorHandler","connect","interval","sendEchoMessage","Promise","resolve","setTimeout"],"mappings":";;;;AAAA,MAAMA,QAAQ,GAAGC,OAAO,CAAC,mEAAmE,CAAC,CAAA;AAC7F;AACA,MAAMC,QAAQ,GAAG,IAAIF,QAAQ,EAAE,CAAA;;AAE/B;AACA,SAASG,SAASA,CAACC,OAAO,EAAE;AAC1BC,EAAAA,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AACnCD,EAAAA,OAAO,CAACC,GAAG,CAAC,8CAA8C,EAAEF,OAAO,CAAC,CAAA;AACpEC,EAAAA,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AACrC,CAAA;;AAEA;AACA,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC7BH,OAAO,CAACG,KAAK,CAAC,wBAAwB,EAAEA,KAAK,CAACJ,OAAO,CAAC,CAAA;AACxD,CAAA;AAEA,eAAeK,IAAIA,GAAG;AACpBP,EAAAA,QAAQ,CAACQ,sBAAsB,CAACP,SAAS,CAAC,CAAA;AAC1CD,EAAAA,QAAQ,CAACS,oBAAoB,CAACJ,cAAc,CAAC,CAAA;EAE7C,IAAI;AACF,IAAA,MAAML,QAAQ,CAACU,OAAO,EAAE,CAAA;;AAExB;AACA,IAAA,MAAMC,QAAQ,GAAG,IAAI,CAAC;IACtB,MAAMT,OAAO,GAAG,cAAc,CAAA;AAE9B,IAAA,OAAO,IAAI,EAAE;MACX,IAAI;AACF,QAAA,MAAMF,QAAQ,CAACY,eAAe,CAACV,OAAO,CAAC,CAAA;OACxC,CAAC,OAAOI,KAAK,EAAE;AACdH,QAAAA,OAAO,CAACG,KAAK,CAAC,8BAA8B,EAAEA,KAAK,CAAC,CAAA;AACtD,OAAA;AACA;MACA,MAAM,IAAIO,OAAO,CAACC,OAAO,IAAIC,UAAU,CAACD,OAAO,EAAEH,QAAQ,CAAC,CAAC,CAAA;AAC7D,KAAA;GACD,CAAC,OAAOL,KAAK,EAAE;IACdH,OAAO,CAACG,KAAK,CAAC,iCAAiC,EAAEA,KAAK,CAACJ,OAAO,CAAC,CAAA;AACjE,GAAA;AACF,CAAA;AAEAK,IAAI,EAAE;;"}
1
+ {"version":3,"file":"example.js","sources":["../../../../../../../packages/templates/clients/websocket/javascript/example.js"],"sourcesContent":["const WSClient = require('./test/temp/snapshotTestResult/custom_client_hoppscotch/client.js');\n// Example usage\nconst wsClient = new WSClient();\n\n// Example of how custom message handler that operates on incoming messages can look like\nfunction myHandler(message) {\n console.log('====================');\n console.log('Just proving I got the message in myHandler:', message);\n console.log('====================');\n}\n\n// Example of custom error handler\nfunction myErrorHandler(error) {\n console.error('Errors from Websocket:', error.message);\n}\n\n// Example of an outgoing processor — runs before every message is sent.\n// Use it for logging, adding metadata, transforming payloads, etc.\nfunction outgoingProcessor(message) {\n const processed = { payload: message, timestamp: new Date().toISOString() };\n console.log('Outgoing processor fired:', JSON.stringify(processed));\n return processed;\n}\n\nasync function main() {\n wsClient.registerMessageHandler(myHandler);\n wsClient.registerErrorHandler(myErrorHandler);\n wsClient.registerOutgoingProcessor(outgoingProcessor);\n\n try {\n await wsClient.connect();\n\n // Loop to send messages every 5 seconds\n const interval = 5000; // 5 seconds\n const message = 'Hello, Echo!';\n\n while (true) {\n try {\n await wsClient.sendEchoMessage(message);\n } catch (error) {\n console.error('Error while sending message:', error);\n }\n // Wait for the interval before sending the next message\n await new Promise(resolve => setTimeout(resolve, interval));\n }\n } catch (error) {\n console.error('Failed to connect to WebSocket:', error.message);\n }\n}\n\nmain();\n"],"names":["WSClient","require","wsClient","myHandler","message","console","log","myErrorHandler","error","outgoingProcessor","processed","payload","timestamp","Date","toISOString","JSON","stringify","main","registerMessageHandler","registerErrorHandler","registerOutgoingProcessor","connect","interval","sendEchoMessage","Promise","resolve","setTimeout"],"mappings":";;;;AAAA,MAAMA,QAAQ,GAAGC,OAAO,CAAC,mEAAmE,CAAC,CAAA;AAC7F;AACA,MAAMC,QAAQ,GAAG,IAAIF,QAAQ,EAAE,CAAA;;AAE/B;AACA,SAASG,SAASA,CAACC,OAAO,EAAE;AAC1BC,EAAAA,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AACnCD,EAAAA,OAAO,CAACC,GAAG,CAAC,8CAA8C,EAAEF,OAAO,CAAC,CAAA;AACpEC,EAAAA,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AACrC,CAAA;;AAEA;AACA,SAASC,cAAcA,CAACC,KAAK,EAAE;EAC7BH,OAAO,CAACG,KAAK,CAAC,wBAAwB,EAAEA,KAAK,CAACJ,OAAO,CAAC,CAAA;AACxD,CAAA;;AAEA;AACA;AACA,SAASK,iBAAiBA,CAACL,OAAO,EAAE;AAClC,EAAA,MAAMM,SAAS,GAAG;AAAEC,IAAAA,OAAO,EAAEP,OAAO;AAAEQ,IAAAA,SAAS,EAAE,IAAIC,IAAI,EAAE,CAACC,WAAW,EAAC;GAAG,CAAA;EAC3ET,OAAO,CAACC,GAAG,CAAC,2BAA2B,EAAES,IAAI,CAACC,SAAS,CAACN,SAAS,CAAC,CAAC,CAAA;AACnE,EAAA,OAAOA,SAAS,CAAA;AAClB,CAAA;AAEA,eAAeO,IAAIA,GAAG;AACpBf,EAAAA,QAAQ,CAACgB,sBAAsB,CAACf,SAAS,CAAC,CAAA;AAC1CD,EAAAA,QAAQ,CAACiB,oBAAoB,CAACZ,cAAc,CAAC,CAAA;AAC7CL,EAAAA,QAAQ,CAACkB,yBAAyB,CAACX,iBAAiB,CAAC,CAAA;EAErD,IAAI;AACF,IAAA,MAAMP,QAAQ,CAACmB,OAAO,EAAE,CAAA;;AAExB;AACA,IAAA,MAAMC,QAAQ,GAAG,IAAI,CAAC;IACtB,MAAMlB,OAAO,GAAG,cAAc,CAAA;AAE9B,IAAA,OAAO,IAAI,EAAE;MACX,IAAI;AACF,QAAA,MAAMF,QAAQ,CAACqB,eAAe,CAACnB,OAAO,CAAC,CAAA;OACxC,CAAC,OAAOI,KAAK,EAAE;AACdH,QAAAA,OAAO,CAACG,KAAK,CAAC,8BAA8B,EAAEA,KAAK,CAAC,CAAA;AACtD,OAAA;AACA;MACA,MAAM,IAAIgB,OAAO,CAACC,OAAO,IAAIC,UAAU,CAACD,OAAO,EAAEH,QAAQ,CAAC,CAAC,CAAA;AAC7D,KAAA;GACD,CAAC,OAAOd,KAAK,EAAE;IACdH,OAAO,CAACG,KAAK,CAAC,iCAAiC,EAAEA,KAAK,CAACJ,OAAO,CAAC,CAAA;AACjE,GAAA;AACF,CAAA;AAEAa,IAAI,EAAE;;"}
@@ -23,6 +23,7 @@ constructor(url) {
23
23
  this.websocket = null;
24
24
  this.messageHandlers = [];
25
25
  this.errorHandlers = [];
26
+ this.outgoingProcessors = [];
26
27
  this.compiledSchemas = {};
27
28
  this.schemasCompiled = false;
28
29
  this.sendOperationsId = ${sendOperationsArray};
@@ -84,6 +85,20 @@ async compileOperationSchemas() {
84
85
  });
85
86
  }
86
87
 
88
+ function RegisterOutgoingProcessor() {
89
+ return /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
90
+ newLines: 2,
91
+ indent: 2,
92
+ children: `registerOutgoingProcessor(processor) {
93
+ if (typeof processor === 'function') {
94
+ this.outgoingProcessors.push(processor);
95
+ } else {
96
+ console.warn('Outgoing processor must be a function');
97
+ }
98
+ }`
99
+ });
100
+ }
101
+
87
102
  function ClientClass({
88
103
  clientName,
89
104
  serverUrl,
@@ -106,7 +121,7 @@ function ClientClass({
106
121
  }), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.RegisterErrorHandler, {
107
122
  language: "javascript",
108
123
  methodParams: ['handler']
109
- }), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.HandleMessage, {
124
+ }), /*#__PURE__*/jsxRuntime.jsx(RegisterOutgoingProcessor, {}), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.HandleMessage, {
110
125
  language: "javascript",
111
126
  methodParams: ['message', 'cb']
112
127
  }), /*#__PURE__*/jsxRuntime.jsx(CompileOperationSchemas, {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js.js","sources":["../../../../../../../../packages/templates/clients/websocket/javascript/components/Constructor.js","../../../../../../../../packages/templates/clients/websocket/javascript/components/ModuleExport.js","../../../../../../../../packages/templates/clients/websocket/javascript/components/CompileOperationSchemas.js","../../../../../../../../packages/templates/clients/websocket/javascript/components/ClientClass.js","../../../../../../../../packages/templates/clients/websocket/javascript/template/client.js.js"],"sourcesContent":["import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function Constructor({ serverUrl, sendOperations }) {\n const sendOperationsId = sendOperations.map((operation) => operation.id());\n const sendOperationsArray = JSON.stringify(sendOperationsId);\n\n return (\n <Text indent={2}>\n {\n `/*\n * Constructor to initialize the WebSocket client\n * @param {string} url - The WebSocket server URL. Use it if the server URL is different from the default one taken from the AsyncAPI document.\n*/\nconstructor(url) {\n this.url = url || '${serverUrl}';\n this.websocket = null;\n this.messageHandlers = [];\n this.errorHandlers = [];\n this.compiledSchemas = {};\n this.schemasCompiled = false;\n this.sendOperationsId = ${sendOperationsArray};\n}\n`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function ModuleExport({ clientName }) {\n return (\n <Text>\n {\n `module.exports = ${clientName};`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function CompileOperationSchemas({ sendOperations }) {\n if (!sendOperations || sendOperations.length === 0) {\n return null;\n } \n\n return (\n <>\n <Text indent={2} newLines={2}>\n {\n `/**\n * Initialize and compile all schemas for operations defined.\n * This should be called once after creating the client instance.\n * Subsequent calls will be ignored if schemas are already compiled.\n * \n * @returns {Promise<void>}\n * @throws {Error} If schema compilation fails for any operation\n */\nasync compileOperationSchemas() {\n if (this.schemasCompiled) {\n return;\n }\n\n try {\n // Compile schemas for all send operations\n for (const operationId of this.sendOperationsId) {\n this.compiledSchemas[operationId] = await compileSchemasByOperationId(asyncapiFilepath, operationId);\n }\n this.schemasCompiled = true;\n console.log('Schemas initialized successfully for operations:', this.sendOperationsId.join(', '));\n } catch (error) {\n console.error('Error initializing schemas:', error);\n this.schemasCompiled = false;\n if (error instanceof Error) {\n error.message = \\`Schema compilation failed: \\${error.message}\\`;\n throw error;\n } else {\n throw new Error(\\`Schema compilation failed: \\${String(error)}\\`);\n }\n }\n}`\n }\n </Text>\n </>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\nimport { Constructor } from './Constructor';\nimport { CloseConnection, RegisterMessageHandler, RegisterErrorHandler, SendOperations, Connect, HandleMessage } from '@asyncapi/generator-components';\nimport { ModuleExport } from './ModuleExport';\nimport { CompileOperationSchemas } from './CompileOperationSchemas';\n\nexport function ClientClass({ clientName, serverUrl, title, sendOperations }) {\n return (\n <Text>\n <Text newLines={2}>\n {`class ${clientName} {`}\n </Text>\n <Constructor serverUrl={serverUrl} sendOperations={sendOperations} />\n <Connect language=\"javascript\" title={title} />\n <RegisterMessageHandler \n language=\"javascript\" \n methodParams={['handler']}\n />\n <RegisterErrorHandler\n language=\"javascript\" \n methodParams={['handler']}\n />\n <HandleMessage \n language=\"javascript\" \n methodParams={['message', 'cb']}\n />\n <CompileOperationSchemas sendOperations={sendOperations} />\n <SendOperations \n language=\"javascript\" \n sendOperations={sendOperations} \n clientName={clientName} \n />\n <CloseConnection language=\"javascript\" />\n <Text>\n {'}'}\n </Text>\n <ModuleExport clientName={clientName} />\n </Text>\n );\n}\n","import { File } from '@asyncapi/generator-react-sdk';\nimport { getClientName, getServerUrl, getServer, getInfo, getTitle } from '@asyncapi/generator-helpers';\nimport { FileHeaderInfo, DependencyProvider } from '@asyncapi/generator-components';\nimport { ClientClass } from '../components/ClientClass';\n\nexport default function ({ asyncapi, params }) {\n const server = getServer(asyncapi.servers(), params.server);\n const info = getInfo(asyncapi);\n const title = getTitle(asyncapi);\n const clientName = getClientName(asyncapi, params.appendClientSuffix, params.customClientName);\n const serverUrl = getServerUrl(server);\n const sendOperations = asyncapi.operations().filterBySend();\n const asyncapiFilepath = `${params.asyncapiFileDir}/asyncapi.yaml`;\n return (\n <File name={params.clientFileName}>\n <FileHeaderInfo\n info={info}\n server={server}\n language=\"javascript\"\n />\n <DependencyProvider\n language=\"javascript\"\n additionalDependencies={['const path = require(\\'path\\');', `const asyncapiFilepath = path.resolve(__dirname, '${asyncapiFilepath}');`]}\n />\n <ClientClass clientName={clientName} serverUrl={serverUrl} title={title} sendOperations={sendOperations} />\n </File>\n );\n}\n"],"names":["Constructor","serverUrl","sendOperations","sendOperationsId","map","operation","id","sendOperationsArray","JSON","stringify","_jsx","Text","indent","children","ModuleExport","clientName","CompileOperationSchemas","length","_Fragment","newLines","ClientClass","title","_jsxs","Connect","language","RegisterMessageHandler","methodParams","RegisterErrorHandler","HandleMessage","SendOperations","CloseConnection","asyncapi","params","server","getServer","servers","info","getInfo","getTitle","getClientName","appendClientSuffix","customClientName","getServerUrl","operations","filterBySend","asyncapiFilepath","asyncapiFileDir","File","name","clientFileName","FileHeaderInfo","DependencyProvider","additionalDependencies"],"mappings":"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"}
1
+ {"version":3,"file":"client.js.js","sources":["../../../../../../../../packages/templates/clients/websocket/javascript/components/Constructor.js","../../../../../../../../packages/templates/clients/websocket/javascript/components/ModuleExport.js","../../../../../../../../packages/templates/clients/websocket/javascript/components/CompileOperationSchemas.js","../../../../../../../../packages/templates/clients/websocket/javascript/components/RegisterOutgoingProcessor.js","../../../../../../../../packages/templates/clients/websocket/javascript/components/ClientClass.js","../../../../../../../../packages/templates/clients/websocket/javascript/template/client.js.js"],"sourcesContent":["import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function Constructor({ serverUrl, sendOperations }) {\n const sendOperationsId = sendOperations.map((operation) => operation.id());\n const sendOperationsArray = JSON.stringify(sendOperationsId);\n\n return (\n <Text indent={2}>\n {\n `/*\n * Constructor to initialize the WebSocket client\n * @param {string} url - The WebSocket server URL. Use it if the server URL is different from the default one taken from the AsyncAPI document.\n*/\nconstructor(url) {\n this.url = url || '${serverUrl}';\n this.websocket = null;\n this.messageHandlers = [];\n this.errorHandlers = [];\n this.outgoingProcessors = [];\n this.compiledSchemas = {};\n this.schemasCompiled = false;\n this.sendOperationsId = ${sendOperationsArray};\n}\n`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function ModuleExport({ clientName }) {\n return (\n <Text>\n {\n `module.exports = ${clientName};`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function CompileOperationSchemas({ sendOperations }) {\n if (!sendOperations || sendOperations.length === 0) {\n return null;\n } \n\n return (\n <>\n <Text indent={2} newLines={2}>\n {\n `/**\n * Initialize and compile all schemas for operations defined.\n * This should be called once after creating the client instance.\n * Subsequent calls will be ignored if schemas are already compiled.\n * \n * @returns {Promise<void>}\n * @throws {Error} If schema compilation fails for any operation\n */\nasync compileOperationSchemas() {\n if (this.schemasCompiled) {\n return;\n }\n\n try {\n // Compile schemas for all send operations\n for (const operationId of this.sendOperationsId) {\n this.compiledSchemas[operationId] = await compileSchemasByOperationId(asyncapiFilepath, operationId);\n }\n this.schemasCompiled = true;\n console.log('Schemas initialized successfully for operations:', this.sendOperationsId.join(', '));\n } catch (error) {\n console.error('Error initializing schemas:', error);\n this.schemasCompiled = false;\n if (error instanceof Error) {\n error.message = \\`Schema compilation failed: \\${error.message}\\`;\n throw error;\n } else {\n throw new Error(\\`Schema compilation failed: \\${String(error)}\\`);\n }\n }\n}`\n }\n </Text>\n </>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function RegisterOutgoingProcessor() {\n return (\n <Text newLines={2} indent={2}>\n {\n `registerOutgoingProcessor(processor) {\n if (typeof processor === 'function') {\n this.outgoingProcessors.push(processor);\n } else {\n console.warn('Outgoing processor must be a function');\n }\n}`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\nimport { Constructor } from './Constructor';\nimport { CloseConnection, RegisterMessageHandler, RegisterErrorHandler, SendOperations, Connect, HandleMessage } from '@asyncapi/generator-components';\nimport { ModuleExport } from './ModuleExport';\nimport { CompileOperationSchemas } from './CompileOperationSchemas';\nimport { RegisterOutgoingProcessor } from './RegisterOutgoingProcessor';\n\nexport function ClientClass({ clientName, serverUrl, title, sendOperations }) {\n return (\n <Text>\n <Text newLines={2}>\n {`class ${clientName} {`}\n </Text>\n <Constructor serverUrl={serverUrl} sendOperations={sendOperations} />\n <Connect language=\"javascript\" title={title} />\n <RegisterMessageHandler \n language=\"javascript\" \n methodParams={['handler']}\n />\n <RegisterErrorHandler\n language=\"javascript\" \n methodParams={['handler']}\n />\n <RegisterOutgoingProcessor />\n <HandleMessage \n language=\"javascript\" \n methodParams={['message', 'cb']}\n />\n <CompileOperationSchemas sendOperations={sendOperations} />\n <SendOperations \n language=\"javascript\" \n sendOperations={sendOperations} \n clientName={clientName} \n />\n <CloseConnection language=\"javascript\" />\n <Text>\n {'}'}\n </Text>\n <ModuleExport clientName={clientName} />\n </Text>\n );\n}\n","import { File } from '@asyncapi/generator-react-sdk';\nimport { getClientName, getServerUrl, getServer, getInfo, getTitle } from '@asyncapi/generator-helpers';\nimport { FileHeaderInfo, DependencyProvider } from '@asyncapi/generator-components';\nimport { ClientClass } from '../components/ClientClass';\n\nexport default function ({ asyncapi, params }) {\n const server = getServer(asyncapi.servers(), params.server);\n const info = getInfo(asyncapi);\n const title = getTitle(asyncapi);\n const clientName = getClientName(asyncapi, params.appendClientSuffix, params.customClientName);\n const serverUrl = getServerUrl(server);\n const sendOperations = asyncapi.operations().filterBySend();\n const asyncapiFilepath = `${params.asyncapiFileDir}/asyncapi.yaml`;\n return (\n <File name={params.clientFileName}>\n <FileHeaderInfo\n info={info}\n server={server}\n language=\"javascript\"\n />\n <DependencyProvider\n language=\"javascript\"\n additionalDependencies={['const path = require(\\'path\\');', `const asyncapiFilepath = path.resolve(__dirname, '${asyncapiFilepath}');`]}\n />\n <ClientClass clientName={clientName} serverUrl={serverUrl} title={title} sendOperations={sendOperations} />\n </File>\n );\n}\n"],"names":["Constructor","serverUrl","sendOperations","sendOperationsId","map","operation","id","sendOperationsArray","JSON","stringify","_jsx","Text","indent","children","ModuleExport","clientName","CompileOperationSchemas","length","_Fragment","newLines","RegisterOutgoingProcessor","ClientClass","title","_jsxs","Connect","language","RegisterMessageHandler","methodParams","RegisterErrorHandler","HandleMessage","SendOperations","CloseConnection","asyncapi","params","server","getServer","servers","info","getInfo","getTitle","getClientName","appendClientSuffix","customClientName","getServerUrl","operations","filterBySend","asyncapiFilepath","asyncapiFileDir","File","name","clientFileName","FileHeaderInfo","DependencyProvider","additionalDependencies"],"mappings":"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"}
@@ -3,6 +3,7 @@ import { Constructor } from './Constructor';
3
3
  import { CloseConnection, RegisterMessageHandler, RegisterErrorHandler, SendOperations, Connect, HandleMessage } from '@asyncapi/generator-components';
4
4
  import { ModuleExport } from './ModuleExport';
5
5
  import { CompileOperationSchemas } from './CompileOperationSchemas';
6
+ import { RegisterOutgoingProcessor } from './RegisterOutgoingProcessor';
6
7
 
7
8
  export function ClientClass({ clientName, serverUrl, title, sendOperations }) {
8
9
  return (
@@ -20,6 +21,7 @@ export function ClientClass({ clientName, serverUrl, title, sendOperations }) {
20
21
  language="javascript"
21
22
  methodParams={['handler']}
22
23
  />
24
+ <RegisterOutgoingProcessor />
23
25
  <HandleMessage
24
26
  language="javascript"
25
27
  methodParams={['message', 'cb']}
@@ -16,6 +16,7 @@ constructor(url) {
16
16
  this.websocket = null;
17
17
  this.messageHandlers = [];
18
18
  this.errorHandlers = [];
19
+ this.outgoingProcessors = [];
19
20
  this.compiledSchemas = {};
20
21
  this.schemasCompiled = false;
21
22
  this.sendOperationsId = ${sendOperationsArray};
@@ -0,0 +1,17 @@
1
+ import { Text } from '@asyncapi/generator-react-sdk';
2
+
3
+ export function RegisterOutgoingProcessor() {
4
+ return (
5
+ <Text newLines={2} indent={2}>
6
+ {
7
+ `registerOutgoingProcessor(processor) {
8
+ if (typeof processor === 'function') {
9
+ this.outgoingProcessors.push(processor);
10
+ } else {
11
+ console.warn('Outgoing processor must be a function');
12
+ }
13
+ }`
14
+ }
15
+ </Text>
16
+ );
17
+ }
@@ -14,9 +14,18 @@ function myErrorHandler(error) {
14
14
  console.error('Errors from Websocket:', error.message);
15
15
  }
16
16
 
17
+ // Example of an outgoing processor — runs before every message is sent.
18
+ // Use it for logging, adding metadata, transforming payloads, etc.
19
+ function outgoingProcessor(message) {
20
+ const processed = { payload: message, timestamp: new Date().toISOString() };
21
+ console.log('Outgoing processor fired:', JSON.stringify(processed));
22
+ return processed;
23
+ }
24
+
17
25
  async function main() {
18
26
  wsClient.registerMessageHandler(myHandler);
19
27
  wsClient.registerErrorHandler(myErrorHandler);
28
+ wsClient.registerOutgoingProcessor(outgoingProcessor);
20
29
 
21
30
  try {
22
31
  await wsClient.connect();
@@ -5,13 +5,15 @@
5
5
  "scripts": {
6
6
  "test": "jest --coverage --passWithNoTests",
7
7
  "test:update": "npm run test -- -u",
8
+ "test:integration": "npm --prefix ../test/integration-test run test:javascript",
9
+ "test:integration:update": "npm --prefix ../test/integration-test run test:javascript:update",
8
10
  "lint": "eslint --max-warnings 0 --config ../../../../../.eslintrc --ignore-path ../../../../../.eslintignore .",
9
11
  "lint:fix": "eslint --fix --max-warnings 0 --config ../../../../../.eslintrc --ignore-path ../../../../../.eslintignore ."
10
12
  },
11
13
  "author": "Lukasz Gornicki <lpgornicki@gmail.com>",
12
14
  "license": "Apache-2.0",
13
15
  "dependencies": {
14
- "@asyncapi/generator-components": "0.5.0",
16
+ "@asyncapi/generator-components": "0.6.0",
15
17
  "@asyncapi/generator-helpers": "1.1.0",
16
18
  "@asyncapi/generator-react-sdk": "*",
17
19
  "@asyncapi/keeper": "0.5.0",
@@ -9,7 +9,6 @@ var Send = require('./Send.js');
9
9
  var Constructor = require('./Constructor.js');
10
10
  var generatorComponents = require('@asyncapi/generator-components');
11
11
  var RegisterOutgoingProcessor = require('./RegisterOutgoingProcessor.js');
12
- var HandleError = require('./HandleError.js');
13
12
  var RegisterReceiveOperations = require('./RegisterReceiveOperations.js');
14
13
  var jsxRuntime = require('/home/runner/work/generator/generator/node_modules/react/cjs/react-jsx-runtime.production.min.js');
15
14
  require('./QueryParamsArgumentsDocs.js');
@@ -54,7 +53,9 @@ function ClientClass({
54
53
  methodName: "handle_message",
55
54
  methodParams: ['self', 'message'],
56
55
  preExecutionCode: "\"\"\"Pass the incoming message to all registered message handlers. \"\"\""
57
- }), /*#__PURE__*/jsxRuntime.jsx(HandleError.HandleError, {}), /*#__PURE__*/jsxRuntime.jsx(RegisterReceiveOperations.RegisterReceiveOperations, {
56
+ }), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.HandleError, {
57
+ language: "python"
58
+ }), /*#__PURE__*/jsxRuntime.jsx(RegisterReceiveOperations.RegisterReceiveOperations, {
58
59
  receiveOperations: receiveOperations
59
60
  }), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.SendOperations, {
60
61
  language: "python",
@@ -1 +1 @@
1
- {"version":3,"file":"ClientClass.js","sources":["../../../../../../../../packages/templates/clients/websocket/python/components/ClientClass.js"],"sourcesContent":["import { Text } from '@asyncapi/generator-react-sdk';\nimport { getClientName, getServerUrl, getServer, getQueryParams, getTitle } from '@asyncapi/generator-helpers';\nimport { Send } from './Send';\nimport { Constructor } from './Constructor';\nimport { CloseConnection, RegisterMessageHandler, RegisterErrorHandler, SendOperations, Connect, HandleMessage } from '@asyncapi/generator-components';\nimport { RegisterOutgoingProcessor } from './RegisterOutgoingProcessor';\nimport { HandleError } from './HandleError';\nimport { RegisterReceiveOperations } from './RegisterReceiveOperations';\n\nexport function ClientClass({ asyncapi, params }) {\n const server = getServer(asyncapi.servers(), params.server);\n const title = getTitle(asyncapi);\n const queryParams = getQueryParams(asyncapi.channels());\n const clientName = getClientName(asyncapi, params.appendClientSuffix, params.customClientName);\n const serverUrl = getServerUrl(server);\n const operations = asyncapi.operations();\n const sendOperations = operations.filterBySend();\n const receiveOperations = operations.filterByReceive();\n\n return (\n <Text>\n <Text newLines={2}>\n {`class ${clientName}:`}\n </Text>\n <Constructor serverUrl={serverUrl} query={queryParams} receiveOperations={receiveOperations} />\n <Connect language=\"python\" title={title} />\n <RegisterMessageHandler\n language=\"python\"\n methodName='register_message_handler'\n methodParams={['self', 'handler']}\n preExecutionCode='\"\"\"Register a callable to process incoming messages.\"\"\"'\n />\n <RegisterErrorHandler\n language=\"python\"\n methodName='register_error_handler'\n methodParams={['self', 'handler']}\n preExecutionCode='\"\"\"Register a callable to process errors.\"\"\"'\n />\n <RegisterOutgoingProcessor />\n <HandleMessage\n language=\"python\"\n methodName='handle_message'\n methodParams={['self', 'message']}\n preExecutionCode='\"\"\"Pass the incoming message to all registered message handlers. \"\"\"'\n />\n <HandleError />\n <RegisterReceiveOperations receiveOperations={receiveOperations} />\n <SendOperations \n language=\"python\"\n sendOperations={sendOperations} \n clientName={clientName} \n />\n <Send sendOperations={sendOperations} />\n <CloseConnection \n language=\"python\" \n methodParams={['self']}\n preExecutionCode='\"\"\"Cleanly close the WebSocket connection.\"\"\"'\n />\n </Text>\n );\n}\n"],"names":["ClientClass","asyncapi","params","server","getServer","servers","title","getTitle","queryParams","getQueryParams","channels","clientName","getClientName","appendClientSuffix","customClientName","serverUrl","getServerUrl","operations","sendOperations","filterBySend","receiveOperations","filterByReceive","_jsxs","Text","children","_jsx","newLines","Constructor","query","Connect","language","RegisterMessageHandler","methodName","methodParams","preExecutionCode","RegisterErrorHandler","RegisterOutgoingProcessor","HandleMessage","HandleError","RegisterReceiveOperations","SendOperations","Send","CloseConnection"],"mappings":"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"}
1
+ {"version":3,"file":"ClientClass.js","sources":["../../../../../../../../packages/templates/clients/websocket/python/components/ClientClass.js"],"sourcesContent":["import { Text } from '@asyncapi/generator-react-sdk';\nimport { getClientName, getServerUrl, getServer, getQueryParams, getTitle } from '@asyncapi/generator-helpers';\nimport { Send } from './Send';\nimport { Constructor } from './Constructor';\nimport { CloseConnection, RegisterMessageHandler, RegisterErrorHandler, SendOperations, Connect, HandleMessage, HandleError } from '@asyncapi/generator-components';\nimport { RegisterOutgoingProcessor } from './RegisterOutgoingProcessor';\nimport { RegisterReceiveOperations } from './RegisterReceiveOperations';\n\nexport function ClientClass({ asyncapi, params }) {\n const server = getServer(asyncapi.servers(), params.server);\n const title = getTitle(asyncapi);\n const queryParams = getQueryParams(asyncapi.channels());\n const clientName = getClientName(asyncapi, params.appendClientSuffix, params.customClientName);\n const serverUrl = getServerUrl(server);\n const operations = asyncapi.operations();\n const sendOperations = operations.filterBySend();\n const receiveOperations = operations.filterByReceive();\n\n return (\n <Text>\n <Text newLines={2}>\n {`class ${clientName}:`}\n </Text>\n <Constructor serverUrl={serverUrl} query={queryParams} receiveOperations={receiveOperations} />\n <Connect language=\"python\" title={title} />\n <RegisterMessageHandler\n language=\"python\"\n methodName='register_message_handler'\n methodParams={['self', 'handler']}\n preExecutionCode='\"\"\"Register a callable to process incoming messages.\"\"\"'\n />\n <RegisterErrorHandler\n language=\"python\"\n methodName='register_error_handler'\n methodParams={['self', 'handler']}\n preExecutionCode='\"\"\"Register a callable to process errors.\"\"\"'\n />\n <RegisterOutgoingProcessor />\n <HandleMessage\n language=\"python\"\n methodName='handle_message'\n methodParams={['self', 'message']}\n preExecutionCode='\"\"\"Pass the incoming message to all registered message handlers. \"\"\"'\n />\n <HandleError language=\"python\" />\n <RegisterReceiveOperations receiveOperations={receiveOperations} />\n <SendOperations \n language=\"python\"\n sendOperations={sendOperations} \n clientName={clientName} \n />\n <Send sendOperations={sendOperations} />\n <CloseConnection \n language=\"python\" \n methodParams={['self']}\n preExecutionCode='\"\"\"Cleanly close the WebSocket connection.\"\"\"'\n />\n </Text>\n );\n}\n"],"names":["ClientClass","asyncapi","params","server","getServer","servers","title","getTitle","queryParams","getQueryParams","channels","clientName","getClientName","appendClientSuffix","customClientName","serverUrl","getServerUrl","operations","sendOperations","filterBySend","receiveOperations","filterByReceive","_jsxs","Text","children","_jsx","newLines","Constructor","query","Connect","language","RegisterMessageHandler","methodName","methodParams","preExecutionCode","RegisterErrorHandler","RegisterOutgoingProcessor","HandleMessage","HandleError","RegisterReceiveOperations","SendOperations","Send","CloseConnection"],"mappings":"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"}
@@ -167,21 +167,6 @@ function RegisterOutgoingProcessor() {
167
167
  });
168
168
  }
169
169
 
170
- function HandleError() {
171
- return /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
172
- newLines: 2,
173
- indent: 2,
174
- children: `def handle_error(self, error):
175
- """Pass the error to all registered error handlers. Generic log message is printed if no handlers are registered."""
176
- if len(self.error_handlers) == 0:
177
- print("\\033[91mError occurred:\\033[0m", error)
178
- else:
179
- # Call custom error handlers
180
- for handler in self.error_handlers:
181
- handler(error)`
182
- });
183
- }
184
-
185
170
  function RegisterReceiveOperations({
186
171
  receiveOperations
187
172
  }) {
@@ -275,7 +260,9 @@ function ClientClass({
275
260
  methodName: "handle_message",
276
261
  methodParams: ['self', 'message'],
277
262
  preExecutionCode: "\"\"\"Pass the incoming message to all registered message handlers. \"\"\""
278
- }), /*#__PURE__*/jsxRuntime.jsx(HandleError, {}), /*#__PURE__*/jsxRuntime.jsx(RegisterReceiveOperations, {
263
+ }), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.HandleError, {
264
+ language: "python"
265
+ }), /*#__PURE__*/jsxRuntime.jsx(RegisterReceiveOperations, {
279
266
  receiveOperations: receiveOperations
280
267
  }), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.SendOperations, {
281
268
  language: "python",
@@ -1 +1 @@
1
- {"version":3,"file":"client.py.js","sources":["../../../../../../../../packages/templates/clients/websocket/python/components/Requires.js","../../../../../../../../packages/templates/clients/websocket/python/components/Send.js","../../../../../../../../packages/templates/clients/websocket/python/components/QueryParamsArgumentsDocs.js","../../../../../../../../packages/templates/clients/websocket/python/components/InitSignature.js","../../../../../../../../packages/templates/clients/websocket/python/components/ReceiveOperationsDiscriminators.js","../../../../../../../../packages/templates/clients/websocket/python/components/Constructor.js","../../../../../../../../packages/templates/clients/websocket/python/components/RegisterOutgoingProcessor.js","../../../../../../../../packages/templates/clients/websocket/python/components/HandleError.js","../../../../../../../../packages/templates/clients/websocket/python/components/RegisterReceiveOperations.js","../../../../../../../../packages/templates/clients/websocket/python/components/ClientClass.js","../../../../../../../../packages/templates/clients/websocket/python/template/client.py.js"],"sourcesContent":["import { DependencyProvider } from '@asyncapi/generator-components';\n\nexport function Requires({ query }) {\n const additionalDependencies = [];\n if (query) {\n additionalDependencies.push('import os');\n additionalDependencies.push('from urllib.parse import urlencode');\n }\n return (\n <DependencyProvider\n language=\"python\"\n additionalDependencies={additionalDependencies}\n />\n );\n}","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function Send({ sendOperations }) {\n if (!sendOperations || sendOperations.length === 0) {\n return null;\n }\n\n return (\n <Text newLines={2} indent={2}>\n {\n `\n@staticmethod\ndef _send(message, socket):\n \"\"\"\n Internal helper to handle the actual sending logic.\n\n Args:\n message (dict or str): The message to send.\n socket (websockets.WebSocketCommonProtocol): The WebSocket to send through.\n\n Notes:\n If message is a dictionary, it will be automatically converted to JSON.\n \"\"\"\n try:\n if isinstance(message, dict):\n message = json.dumps(message)\n socket.send(message)\n except Exception as e:\n print(\"Error sending:\", e)`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function QueryParamsArgumentsDocs({ queryParams }) {\n if (!queryParams) {\n return null;\n }\n\n return queryParams.map((param) => {\n const paramName = param[0];\n const firstLine = `${paramName} (str, optional):`;\n const secondLine = `If provided (or if ${paramName.toUpperCase()} environment variable is set), added as ?${paramName}=… to URL`;\n return (\n <Text indent={1}>\n {firstLine}\n {secondLine}\n </Text>\n );\n });\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function InitSignature({ queryParams, serverUrl }) {\n if (!queryParams) {\n return (\n <Text indent={2} newLines={2}>\n {`def __init__(self, url: str = \"${serverUrl}\"):`}\n </Text>\n );\n }\n \n const queryParamsArguments = queryParams?.map((param) => {\n const paramName = param[0];\n const paramDefaultValue = param[1];\n const defaultValue = paramDefaultValue ? `\"${paramDefaultValue}\"` : 'None';\n return `${paramName}: str = ${defaultValue}`;\n }).join(', ');\n \n return (\n <Text indent={2} newLines={2}>\n {`def __init__(self, url: str = \"${serverUrl}\", ${queryParamsArguments}):`}\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\nimport { getMessageDiscriminatorsFromOperations } from '@asyncapi/generator-helpers';\n\n/**\n * Component that generates initialization code for receive operation discriminators.\n * \n * @param {Object} props - Component properties\n * @param {Array<Object>} [props.receiveOperations] - Receive operations from AsyncAPI document\n * @returns {React.Element|null} Rendered initialization code or null.\n */\nexport function ReceiveOperationsDiscriminators({ receiveOperations }) {\n const operationDiscriminators = Array.isArray(receiveOperations) && receiveOperations.length > 0\n ? getMessageDiscriminatorsFromOperations(receiveOperations)\n : [];\n const serializedDiscriminators = JSON.stringify(operationDiscriminators);\n\n return (\n <Text indent={2} newLines={2}>\n {`\n self.receive_operation_handlers = {}\n self.receive_operation_discriminators = ${serializedDiscriminators}`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\nimport { QueryParamsVariables } from '@asyncapi/generator-components';\nimport { QueryParamsArgumentsDocs } from './QueryParamsArgumentsDocs';\nimport { InitSignature } from './InitSignature';\nimport { ReceiveOperationsDiscriminators } from './ReceiveOperationsDiscriminators';\n\nexport function Constructor({ serverUrl, query, receiveOperations }) {\n const queryParamsArray = query && Array.from(query.entries());\n\n return (\n <>\n <InitSignature queryParams={queryParamsArray} serverUrl={serverUrl} />\n <Text indent={2}>\n {`\n \"\"\"\n Constructor to initialize the WebSocket client.\n\n Args:\n url (str, optional): The WebSocket server URL. Use it if the server URL is \n different from the default one taken from the AsyncAPI document.`}\n </Text>\n <QueryParamsArgumentsDocs queryParams={queryParamsArray} />\n <Text indent={2}>\n {`\n \"\"\"\n self.ws_app = None # Instance of WebSocketApp\n self.message_handlers = [] # Callables for incoming messages\n self.error_handlers = [] # Callables for errors\n self.outgoing_processors = [] # Callables to process outgoing messages\n self._stop_event = threading.Event()\n ${ query ? 'params = {}' : ''}`\n }\n </Text>\n <ReceiveOperationsDiscriminators receiveOperations={receiveOperations} />\n <QueryParamsVariables\n language=\"python\"\n queryParams={queryParamsArray} \n />\n <Text newLines={2}>\n {`\n ${query ? 'qs = urlencode(params) if params else \"\"' : ''}\n ${query ? 'self.url = f\"{url}{f\\'?{qs}\\' if qs else \\'\\'}\"' : 'self.url = url'}`}\n </Text>\n </>\n );\n}","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function RegisterOutgoingProcessor() {\n return (\n <Text newLines={2} indent={2}>\n {\n `def register_outgoing_processor(self, processor):\n \"\"\"\n Register a callable that processes outgoing messages automatically.\n These processors run in sequence before each message is sent.\n \"\"\"\n if callable(processor):\n self.outgoing_processors.append(processor)\n else:\n print(\"Outgoing processor must be callable\")`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function HandleError() {\n return (\n <Text newLines={2} indent={2}>\n {\n `def handle_error(self, error):\n \"\"\"Pass the error to all registered error handlers. Generic log message is printed if no handlers are registered.\"\"\"\n if len(self.error_handlers) == 0:\n print(\"\\\\033[91mError occurred:\\\\033[0m\", error)\n else:\n # Call custom error handlers\n for handler in self.error_handlers:\n handler(error)`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\nimport { toSnakeCase } from '@asyncapi/generator-helpers';\n\n/**\n * Component for rendering receive operation handler registration methods\n * Generates one specific method per operation for better DX\n * \n* @param {Object} props - Component props\n* @param {Array} props.receiveOperations - Array of receive operations from AsyncAPI document\n* @returns {Array<React.Element>|null} Array of Text components containing Python handler registration methods, or null if no operations\n */\nexport function RegisterReceiveOperations({ receiveOperations }) {\n if (!receiveOperations || receiveOperations.length === 0) {\n return null;\n }\n\n return receiveOperations.map((operation) => {\n const operationId = operation.id();\n const methodName = `register_${toSnakeCase(operationId)}_handler`;\n\n return (\n <Text indent={2} newLines={2} key={operationId}>\n {`def ${methodName}(self, handler, discriminator_key=None, discriminator_value=None):\n \"\"\"\n Register a handler for ${operationId} operation.\n\n Args:\n handler (callable): Handler function that receives raw_message as argument\n discriminator_key (str): Message field to use for routing (e.g., 'type', 'event_type')\n discriminator_value (str): Expected value for routing (e.g., 'hello', 'user_joined')\n \"\"\"\n if not callable(handler):\n print(\"Handler must be callable\")\n return\n\n # Validate that either both discriminator_key and discriminator_value are provided or neither\n if (discriminator_key is not None and discriminator_value is None) or (discriminator_key is None and discriminator_value is not None):\n print(\"Error: Both discriminator_key and discriminator_value must be provided together\")\n return\n\n # Register handler\n self.receive_operation_handlers[\"${operationId}\"] = handler\n\n # Add discriminator entry to the list if both key and value are provided\n if discriminator_key is not None and discriminator_value is not None:\n discriminator_entry = {\n \"key\": discriminator_key,\n \"value\": discriminator_value,\n \"operation_id\": \"${operationId}\"\n }\n \n # Check if this discriminator already exists\n exists = any(\n d.get(\"key\") == discriminator_key and \n d.get(\"value\") == discriminator_value and \n d.get(\"operation_id\") == \"${operationId}\" \n for d in self.receive_operation_discriminators\n )\n\n if not exists:\n self.receive_operation_discriminators.append(discriminator_entry)`}\n </Text>\n );\n });\n}","import { Text } from '@asyncapi/generator-react-sdk';\nimport { getClientName, getServerUrl, getServer, getQueryParams, getTitle } from '@asyncapi/generator-helpers';\nimport { Send } from './Send';\nimport { Constructor } from './Constructor';\nimport { CloseConnection, RegisterMessageHandler, RegisterErrorHandler, SendOperations, Connect, HandleMessage } from '@asyncapi/generator-components';\nimport { RegisterOutgoingProcessor } from './RegisterOutgoingProcessor';\nimport { HandleError } from './HandleError';\nimport { RegisterReceiveOperations } from './RegisterReceiveOperations';\n\nexport function ClientClass({ asyncapi, params }) {\n const server = getServer(asyncapi.servers(), params.server);\n const title = getTitle(asyncapi);\n const queryParams = getQueryParams(asyncapi.channels());\n const clientName = getClientName(asyncapi, params.appendClientSuffix, params.customClientName);\n const serverUrl = getServerUrl(server);\n const operations = asyncapi.operations();\n const sendOperations = operations.filterBySend();\n const receiveOperations = operations.filterByReceive();\n\n return (\n <Text>\n <Text newLines={2}>\n {`class ${clientName}:`}\n </Text>\n <Constructor serverUrl={serverUrl} query={queryParams} receiveOperations={receiveOperations} />\n <Connect language=\"python\" title={title} />\n <RegisterMessageHandler\n language=\"python\"\n methodName='register_message_handler'\n methodParams={['self', 'handler']}\n preExecutionCode='\"\"\"Register a callable to process incoming messages.\"\"\"'\n />\n <RegisterErrorHandler\n language=\"python\"\n methodName='register_error_handler'\n methodParams={['self', 'handler']}\n preExecutionCode='\"\"\"Register a callable to process errors.\"\"\"'\n />\n <RegisterOutgoingProcessor />\n <HandleMessage\n language=\"python\"\n methodName='handle_message'\n methodParams={['self', 'message']}\n preExecutionCode='\"\"\"Pass the incoming message to all registered message handlers. \"\"\"'\n />\n <HandleError />\n <RegisterReceiveOperations receiveOperations={receiveOperations} />\n <SendOperations \n language=\"python\"\n sendOperations={sendOperations} \n clientName={clientName} \n />\n <Send sendOperations={sendOperations} />\n <CloseConnection \n language=\"python\" \n methodParams={['self']}\n preExecutionCode='\"\"\"Cleanly close the WebSocket connection.\"\"\"'\n />\n </Text>\n );\n}\n","import { File } from '@asyncapi/generator-react-sdk';\nimport { getServer, getQueryParams, getInfo } from '@asyncapi/generator-helpers';\nimport { FileHeaderInfo } from '@asyncapi/generator-components';\nimport { Requires } from '../components/Requires';\nimport { ClientClass } from '../components/ClientClass';\n\nexport default function ({ asyncapi, params }) {\n const server = getServer(asyncapi.servers(), params.server);\n const info = getInfo(asyncapi);\n const queryParams = getQueryParams(asyncapi.channels());\n return (\n // The clientFileName default values can be found and modified under the .ageneratorrc\n <File name={params.clientFileName}>\n <FileHeaderInfo\n info={info}\n server={server}\n language=\"python\"\n />\n <Requires query={queryParams} />\n <ClientClass asyncapi={asyncapi} params={params} />\n </File>\n );\n}\n"],"names":["Requires","query","additionalDependencies","push","_jsx","DependencyProvider","language","Send","sendOperations","length","Text","newLines","indent","children","QueryParamsArgumentsDocs","queryParams","map","param","paramName","firstLine","secondLine","toUpperCase","_jsxs","InitSignature","serverUrl","queryParamsArguments","paramDefaultValue","defaultValue","join","ReceiveOperationsDiscriminators","receiveOperations","operationDiscriminators","Array","isArray","getMessageDiscriminatorsFromOperations","serializedDiscriminators","JSON","stringify","Constructor","queryParamsArray","from","entries","_Fragment","QueryParamsVariables","RegisterOutgoingProcessor","HandleError","RegisterReceiveOperations","operation","operationId","id","methodName","toSnakeCase","ClientClass","asyncapi","params","server","getServer","servers","title","getTitle","getQueryParams","channels","clientName","getClientName","appendClientSuffix","customClientName","getServerUrl","operations","filterBySend","filterByReceive","Connect","RegisterMessageHandler","methodParams","preExecutionCode","RegisterErrorHandler","HandleMessage","SendOperations","CloseConnection","info","getInfo","File","name","clientFileName","FileHeaderInfo"],"mappings":"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"}
1
+ {"version":3,"file":"client.py.js","sources":["../../../../../../../../packages/templates/clients/websocket/python/components/Requires.js","../../../../../../../../packages/templates/clients/websocket/python/components/Send.js","../../../../../../../../packages/templates/clients/websocket/python/components/QueryParamsArgumentsDocs.js","../../../../../../../../packages/templates/clients/websocket/python/components/InitSignature.js","../../../../../../../../packages/templates/clients/websocket/python/components/ReceiveOperationsDiscriminators.js","../../../../../../../../packages/templates/clients/websocket/python/components/Constructor.js","../../../../../../../../packages/templates/clients/websocket/python/components/RegisterOutgoingProcessor.js","../../../../../../../../packages/templates/clients/websocket/python/components/RegisterReceiveOperations.js","../../../../../../../../packages/templates/clients/websocket/python/components/ClientClass.js","../../../../../../../../packages/templates/clients/websocket/python/template/client.py.js"],"sourcesContent":["import { DependencyProvider } from '@asyncapi/generator-components';\n\nexport function Requires({ query }) {\n const additionalDependencies = [];\n if (query) {\n additionalDependencies.push('import os');\n additionalDependencies.push('from urllib.parse import urlencode');\n }\n return (\n <DependencyProvider\n language=\"python\"\n additionalDependencies={additionalDependencies}\n />\n );\n}","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function Send({ sendOperations }) {\n if (!sendOperations || sendOperations.length === 0) {\n return null;\n }\n\n return (\n <Text newLines={2} indent={2}>\n {\n `\n@staticmethod\ndef _send(message, socket):\n \"\"\"\n Internal helper to handle the actual sending logic.\n\n Args:\n message (dict or str): The message to send.\n socket (websockets.WebSocketCommonProtocol): The WebSocket to send through.\n\n Notes:\n If message is a dictionary, it will be automatically converted to JSON.\n \"\"\"\n try:\n if isinstance(message, dict):\n message = json.dumps(message)\n socket.send(message)\n except Exception as e:\n print(\"Error sending:\", e)`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function QueryParamsArgumentsDocs({ queryParams }) {\n if (!queryParams) {\n return null;\n }\n\n return queryParams.map((param) => {\n const paramName = param[0];\n const firstLine = `${paramName} (str, optional):`;\n const secondLine = `If provided (or if ${paramName.toUpperCase()} environment variable is set), added as ?${paramName}=… to URL`;\n return (\n <Text indent={1}>\n {firstLine}\n {secondLine}\n </Text>\n );\n });\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function InitSignature({ queryParams, serverUrl }) {\n if (!queryParams) {\n return (\n <Text indent={2} newLines={2}>\n {`def __init__(self, url: str = \"${serverUrl}\"):`}\n </Text>\n );\n }\n \n const queryParamsArguments = queryParams?.map((param) => {\n const paramName = param[0];\n const paramDefaultValue = param[1];\n const defaultValue = paramDefaultValue ? `\"${paramDefaultValue}\"` : 'None';\n return `${paramName}: str = ${defaultValue}`;\n }).join(', ');\n \n return (\n <Text indent={2} newLines={2}>\n {`def __init__(self, url: str = \"${serverUrl}\", ${queryParamsArguments}):`}\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\nimport { getMessageDiscriminatorsFromOperations } from '@asyncapi/generator-helpers';\n\n/**\n * Component that generates initialization code for receive operation discriminators.\n * \n * @param {Object} props - Component properties\n * @param {Array<Object>} [props.receiveOperations] - Receive operations from AsyncAPI document\n * @returns {React.Element|null} Rendered initialization code or null.\n */\nexport function ReceiveOperationsDiscriminators({ receiveOperations }) {\n const operationDiscriminators = Array.isArray(receiveOperations) && receiveOperations.length > 0\n ? getMessageDiscriminatorsFromOperations(receiveOperations)\n : [];\n const serializedDiscriminators = JSON.stringify(operationDiscriminators);\n\n return (\n <Text indent={2} newLines={2}>\n {`\n self.receive_operation_handlers = {}\n self.receive_operation_discriminators = ${serializedDiscriminators}`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\nimport { QueryParamsVariables } from '@asyncapi/generator-components';\nimport { QueryParamsArgumentsDocs } from './QueryParamsArgumentsDocs';\nimport { InitSignature } from './InitSignature';\nimport { ReceiveOperationsDiscriminators } from './ReceiveOperationsDiscriminators';\n\nexport function Constructor({ serverUrl, query, receiveOperations }) {\n const queryParamsArray = query && Array.from(query.entries());\n\n return (\n <>\n <InitSignature queryParams={queryParamsArray} serverUrl={serverUrl} />\n <Text indent={2}>\n {`\n \"\"\"\n Constructor to initialize the WebSocket client.\n\n Args:\n url (str, optional): The WebSocket server URL. Use it if the server URL is \n different from the default one taken from the AsyncAPI document.`}\n </Text>\n <QueryParamsArgumentsDocs queryParams={queryParamsArray} />\n <Text indent={2}>\n {`\n \"\"\"\n self.ws_app = None # Instance of WebSocketApp\n self.message_handlers = [] # Callables for incoming messages\n self.error_handlers = [] # Callables for errors\n self.outgoing_processors = [] # Callables to process outgoing messages\n self._stop_event = threading.Event()\n ${ query ? 'params = {}' : ''}`\n }\n </Text>\n <ReceiveOperationsDiscriminators receiveOperations={receiveOperations} />\n <QueryParamsVariables\n language=\"python\"\n queryParams={queryParamsArray} \n />\n <Text newLines={2}>\n {`\n ${query ? 'qs = urlencode(params) if params else \"\"' : ''}\n ${query ? 'self.url = f\"{url}{f\\'?{qs}\\' if qs else \\'\\'}\"' : 'self.url = url'}`}\n </Text>\n </>\n );\n}","import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function RegisterOutgoingProcessor() {\n return (\n <Text newLines={2} indent={2}>\n {\n `def register_outgoing_processor(self, processor):\n \"\"\"\n Register a callable that processes outgoing messages automatically.\n These processors run in sequence before each message is sent.\n \"\"\"\n if callable(processor):\n self.outgoing_processors.append(processor)\n else:\n print(\"Outgoing processor must be callable\")`\n }\n </Text>\n );\n}\n","import { Text } from '@asyncapi/generator-react-sdk';\nimport { toSnakeCase } from '@asyncapi/generator-helpers';\n\n/**\n * Component for rendering receive operation handler registration methods\n * Generates one specific method per operation for better DX\n * \n* @param {Object} props - Component props\n* @param {Array} props.receiveOperations - Array of receive operations from AsyncAPI document\n* @returns {Array<React.Element>|null} Array of Text components containing Python handler registration methods, or null if no operations\n */\nexport function RegisterReceiveOperations({ receiveOperations }) {\n if (!receiveOperations || receiveOperations.length === 0) {\n return null;\n }\n\n return receiveOperations.map((operation) => {\n const operationId = operation.id();\n const methodName = `register_${toSnakeCase(operationId)}_handler`;\n\n return (\n <Text indent={2} newLines={2} key={operationId}>\n {`def ${methodName}(self, handler, discriminator_key=None, discriminator_value=None):\n \"\"\"\n Register a handler for ${operationId} operation.\n\n Args:\n handler (callable): Handler function that receives raw_message as argument\n discriminator_key (str): Message field to use for routing (e.g., 'type', 'event_type')\n discriminator_value (str): Expected value for routing (e.g., 'hello', 'user_joined')\n \"\"\"\n if not callable(handler):\n print(\"Handler must be callable\")\n return\n\n # Validate that either both discriminator_key and discriminator_value are provided or neither\n if (discriminator_key is not None and discriminator_value is None) or (discriminator_key is None and discriminator_value is not None):\n print(\"Error: Both discriminator_key and discriminator_value must be provided together\")\n return\n\n # Register handler\n self.receive_operation_handlers[\"${operationId}\"] = handler\n\n # Add discriminator entry to the list if both key and value are provided\n if discriminator_key is not None and discriminator_value is not None:\n discriminator_entry = {\n \"key\": discriminator_key,\n \"value\": discriminator_value,\n \"operation_id\": \"${operationId}\"\n }\n \n # Check if this discriminator already exists\n exists = any(\n d.get(\"key\") == discriminator_key and \n d.get(\"value\") == discriminator_value and \n d.get(\"operation_id\") == \"${operationId}\" \n for d in self.receive_operation_discriminators\n )\n\n if not exists:\n self.receive_operation_discriminators.append(discriminator_entry)`}\n </Text>\n );\n });\n}","import { Text } from '@asyncapi/generator-react-sdk';\nimport { getClientName, getServerUrl, getServer, getQueryParams, getTitle } from '@asyncapi/generator-helpers';\nimport { Send } from './Send';\nimport { Constructor } from './Constructor';\nimport { CloseConnection, RegisterMessageHandler, RegisterErrorHandler, SendOperations, Connect, HandleMessage, HandleError } from '@asyncapi/generator-components';\nimport { RegisterOutgoingProcessor } from './RegisterOutgoingProcessor';\nimport { RegisterReceiveOperations } from './RegisterReceiveOperations';\n\nexport function ClientClass({ asyncapi, params }) {\n const server = getServer(asyncapi.servers(), params.server);\n const title = getTitle(asyncapi);\n const queryParams = getQueryParams(asyncapi.channels());\n const clientName = getClientName(asyncapi, params.appendClientSuffix, params.customClientName);\n const serverUrl = getServerUrl(server);\n const operations = asyncapi.operations();\n const sendOperations = operations.filterBySend();\n const receiveOperations = operations.filterByReceive();\n\n return (\n <Text>\n <Text newLines={2}>\n {`class ${clientName}:`}\n </Text>\n <Constructor serverUrl={serverUrl} query={queryParams} receiveOperations={receiveOperations} />\n <Connect language=\"python\" title={title} />\n <RegisterMessageHandler\n language=\"python\"\n methodName='register_message_handler'\n methodParams={['self', 'handler']}\n preExecutionCode='\"\"\"Register a callable to process incoming messages.\"\"\"'\n />\n <RegisterErrorHandler\n language=\"python\"\n methodName='register_error_handler'\n methodParams={['self', 'handler']}\n preExecutionCode='\"\"\"Register a callable to process errors.\"\"\"'\n />\n <RegisterOutgoingProcessor />\n <HandleMessage\n language=\"python\"\n methodName='handle_message'\n methodParams={['self', 'message']}\n preExecutionCode='\"\"\"Pass the incoming message to all registered message handlers. \"\"\"'\n />\n <HandleError language=\"python\" />\n <RegisterReceiveOperations receiveOperations={receiveOperations} />\n <SendOperations \n language=\"python\"\n sendOperations={sendOperations} \n clientName={clientName} \n />\n <Send sendOperations={sendOperations} />\n <CloseConnection \n language=\"python\" \n methodParams={['self']}\n preExecutionCode='\"\"\"Cleanly close the WebSocket connection.\"\"\"'\n />\n </Text>\n );\n}\n","import { File } from '@asyncapi/generator-react-sdk';\nimport { getServer, getQueryParams, getInfo } from '@asyncapi/generator-helpers';\nimport { FileHeaderInfo } from '@asyncapi/generator-components';\nimport { Requires } from '../components/Requires';\nimport { ClientClass } from '../components/ClientClass';\n\nexport default function ({ asyncapi, params }) {\n const server = getServer(asyncapi.servers(), params.server);\n const info = getInfo(asyncapi);\n const queryParams = getQueryParams(asyncapi.channels());\n return (\n // The clientFileName default values can be found and modified under the .ageneratorrc\n <File name={params.clientFileName}>\n <FileHeaderInfo\n info={info}\n server={server}\n language=\"python\"\n />\n <Requires query={queryParams} />\n <ClientClass asyncapi={asyncapi} params={params} />\n </File>\n );\n}\n"],"names":["Requires","query","additionalDependencies","push","_jsx","DependencyProvider","language","Send","sendOperations","length","Text","newLines","indent","children","QueryParamsArgumentsDocs","queryParams","map","param","paramName","firstLine","secondLine","toUpperCase","_jsxs","InitSignature","serverUrl","queryParamsArguments","paramDefaultValue","defaultValue","join","ReceiveOperationsDiscriminators","receiveOperations","operationDiscriminators","Array","isArray","getMessageDiscriminatorsFromOperations","serializedDiscriminators","JSON","stringify","Constructor","queryParamsArray","from","entries","_Fragment","QueryParamsVariables","RegisterOutgoingProcessor","RegisterReceiveOperations","operation","operationId","id","methodName","toSnakeCase","ClientClass","asyncapi","params","server","getServer","servers","title","getTitle","getQueryParams","channels","clientName","getClientName","appendClientSuffix","customClientName","getServerUrl","operations","filterBySend","filterByReceive","Connect","RegisterMessageHandler","methodParams","preExecutionCode","RegisterErrorHandler","HandleMessage","HandleError","SendOperations","CloseConnection","info","getInfo","File","name","clientFileName","FileHeaderInfo"],"mappings":";;;;;;;;AAEO,SAASA,QAAQA,CAAC;AAAEC,EAAAA,KAAAA;AAAM,CAAC,EAAE;EAClC,MAAMC,sBAAsB,GAAG,EAAE,CAAA;AACjC,EAAA,IAAID,KAAK,EAAE;AACTC,IAAAA,sBAAsB,CAACC,IAAI,CAAC,WAAW,CAAC,CAAA;AACxCD,IAAAA,sBAAsB,CAACC,IAAI,CAAC,oCAAoC,CAAC,CAAA;AACnE,GAAA;EACA,oBACEC,cAAA,CAACC,sCAAkB,EAAA;AACjBC,IAAAA,QAAQ,EAAC,QAAQ;AACjBJ,IAAAA,sBAAsB,EAAEA,sBAAAA;AAAuB,GAChD,CAAC,CAAA;AAEN;;ACZO,SAASK,IAAIA,CAAC;AAAEC,EAAAA,cAAAA;AAAe,CAAC,EAAE;EACvC,IAAI,CAACA,cAAc,IAAIA,cAAc,CAACC,MAAM,KAAK,CAAC,EAAE;AAClD,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEA,oBACEL,cAAA,CAACM,sBAAI,EAAA;AAACC,IAAAA,QAAQ,EAAE,CAAE;AAACC,IAAAA,MAAM,EAAE,CAAE;AAAAC,IAAAA,QAAA,EAEzB,CAAA;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAA,CAAA;AAAmC,GAEzB,CAAC,CAAA;AAEX;;AC9BO,SAASC,wBAAwBA,CAAC;AAAEC,EAAAA,WAAAA;AAAY,CAAC,EAAE;EACxD,IAAI,CAACA,WAAW,EAAE;AAChB,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AAEA,EAAA,OAAOA,WAAW,CAACC,GAAG,CAAEC,KAAK,IAAK;AAChC,IAAA,MAAMC,SAAS,GAAGD,KAAK,CAAC,CAAC,CAAC,CAAA;AAC1B,IAAA,MAAME,SAAS,GAAG,CAAGD,EAAAA,SAAS,CAAmB,iBAAA,CAAA,CAAA;IACjD,MAAME,UAAU,GAAG,CAAA,mBAAA,EAAsBF,SAAS,CAACG,WAAW,EAAE,CAA4CH,yCAAAA,EAAAA,SAAS,CAAW,SAAA,CAAA,CAAA;IAChI,oBACEI,eAAA,CAACZ,sBAAI,EAAA;AAACE,MAAAA,MAAM,EAAE,CAAE;MAAAC,QAAA,EAAA,CACbM,SAAS,EACTC,UAAU,CAAA;AAAA,KACP,CAAC,CAAA;AAEX,GAAC,CAAC,CAAA;AACJ;;AChBO,SAASG,aAAaA,CAAC;EAAER,WAAW;AAAES,EAAAA,SAAAA;AAAU,CAAC,EAAE;EACxD,IAAI,CAACT,WAAW,EAAE;IAChB,oBACEX,cAAA,CAACM,sBAAI,EAAA;AAACE,MAAAA,MAAM,EAAE,CAAE;AAACD,MAAAA,QAAQ,EAAE,CAAE;MAAAE,QAAA,EAC1B,kCAAkCW,SAAS,CAAA,GAAA,CAAA;AAAK,KAC7C,CAAC,CAAA;AAEX,GAAA;EAEA,MAAMC,oBAAoB,GAAGV,WAAW,KAAXA,IAAAA,IAAAA,WAAW,KAAXA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,WAAW,CAAEC,GAAG,CAAEC,KAAK,IAAK;AACvD,IAAA,MAAMC,SAAS,GAAGD,KAAK,CAAC,CAAC,CAAC,CAAA;AAC1B,IAAA,MAAMS,iBAAiB,GAAGT,KAAK,CAAC,CAAC,CAAC,CAAA;IAClC,MAAMU,YAAY,GAAGD,iBAAiB,GAAG,IAAIA,iBAAiB,CAAA,CAAA,CAAG,GAAG,MAAM,CAAA;AAC1E,IAAA,OAAO,CAAGR,EAAAA,SAAS,CAAWS,QAAAA,EAAAA,YAAY,CAAE,CAAA,CAAA;AAC9C,GAAC,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC,CAAA;EAEb,oBACExB,cAAA,CAACM,sBAAI,EAAA;AAACE,IAAAA,MAAM,EAAE,CAAE;AAACD,IAAAA,QAAQ,EAAE,CAAE;AAAAE,IAAAA,QAAA,EAC1B,CAAA,+BAAA,EAAkCW,SAAS,CAAA,GAAA,EAAMC,oBAAoB,CAAA,EAAA,CAAA;AAAI,GACtE,CAAC,CAAA;AAEX;;ACbO,SAASI,+BAA+BA,CAAC;AAAEC,EAAAA,iBAAAA;AAAkB,CAAC,EAAE;EACrE,MAAMC,uBAAuB,GAAGC,KAAK,CAACC,OAAO,CAACH,iBAAiB,CAAC,IAAIA,iBAAiB,CAACrB,MAAM,GAAG,CAAC,GAC5FyB,uDAAsC,CAACJ,iBAAiB,CAAC,GACzD,EAAE,CAAA;AACN,EAAA,MAAMK,wBAAwB,GAAGC,IAAI,CAACC,SAAS,CAACN,uBAAuB,CAAC,CAAA;EAExE,oBACE3B,cAAA,CAACM,sBAAI,EAAA;AAACE,IAAAA,MAAM,EAAE,CAAE;AAACD,IAAAA,QAAQ,EAAE,CAAE;AAAAE,IAAAA,QAAA,EAC1B,CAAA;AACP;AACA,8CAAA,EAAgDsB,wBAAwB,CAAA,CAAA;AAAE,GAEhE,CAAC,CAAA;AAEX;;AClBO,SAASG,WAAWA,CAAC;EAAEd,SAAS;EAAEvB,KAAK;AAAE6B,EAAAA,iBAAAA;AAAkB,CAAC,EAAE;AACnE,EAAA,MAAMS,gBAAgB,GAAGtC,KAAK,IAAI+B,KAAK,CAACQ,IAAI,CAACvC,KAAK,CAACwC,OAAO,EAAE,CAAC,CAAA;EAE7D,oBACEnB,eAAA,CAAAoB,mBAAA,EAAA;IAAA7B,QAAA,EAAA,cACET,cAAA,CAACmB,aAAa,EAAA;AAACR,MAAAA,WAAW,EAAEwB,gBAAiB;AAACf,MAAAA,SAAS,EAAEA,SAAAA;AAAU,KAAE,CAAC,eACtEpB,cAAA,CAACM,sBAAI,EAAA;AAACE,MAAAA,MAAM,EAAE,CAAE;AAAAC,MAAAA,QAAA,EACb,CAAA;AACT;AACA;AACA;AACA;AACA;AACA,0EAAA,CAAA;AAA2E,KAC/D,CAAC,eACPT,cAAA,CAACU,wBAAwB,EAAA;AAACC,MAAAA,WAAW,EAAEwB,gBAAAA;AAAiB,KAAE,CAAC,eAC3DnC,cAAA,CAACM,sBAAI,EAAA;AAACE,MAAAA,MAAM,EAAE,CAAE;AAAAC,MAAAA,QAAA,EACb,CAAA;AACT;AACA;AACA;AACA;AACA;AACA;AACA,MAAA,EAASZ,KAAK,GAAG,aAAa,GAAG,EAAE,CAAA,CAAA;AAAE,KAEzB,CAAC,eACPG,cAAA,CAACyB,+BAA+B,EAAA;AAACC,MAAAA,iBAAiB,EAAEA,iBAAAA;AAAkB,KAAE,CAAC,eACzE1B,cAAA,CAACuC,wCAAoB,EAAA;AACnBrC,MAAAA,QAAQ,EAAC,QAAQ;AACjBS,MAAAA,WAAW,EAAEwB,gBAAAA;AAAiB,KAC/B,CAAC,eACFnC,cAAA,CAACM,sBAAI,EAAA;AAACC,MAAAA,QAAQ,EAAE,CAAE;AAAAE,MAAAA,QAAA,EACf,CAAA;AACT,QAAA,EAAUZ,KAAK,GAAG,0CAA0C,GAAG,EAAE,CAAA;AACjE,QAAA,EAAUA,KAAK,GAAG,iDAAiD,GAAG,gBAAgB,CAAA,CAAA;AAAE,KAC5E,CAAC,CAAA;AAAA,GACP,CAAC,CAAA;AAEP;;AC3CO,SAAS2C,yBAAyBA,GAAG;EAC1C,oBACExC,cAAA,CAACM,sBAAI,EAAA;AAACC,IAAAA,QAAQ,EAAE,CAAE;AAACC,IAAAA,MAAM,EAAE,CAAE;AAAAC,IAAAA,QAAA,EAEzB,CAAA;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAA,CAAA;AAAqD,GAE3C,CAAC,CAAA;AAEX;;ACPO,SAASgC,yBAAyBA,CAAC;AAAEf,EAAAA,iBAAAA;AAAkB,CAAC,EAAE;EAC/D,IAAI,CAACA,iBAAiB,IAAIA,iBAAiB,CAACrB,MAAM,KAAK,CAAC,EAAE;AACxD,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AAEA,EAAA,OAAOqB,iBAAiB,CAACd,GAAG,CAAE8B,SAAS,IAAK;AAC1C,IAAA,MAAMC,WAAW,GAAGD,SAAS,CAACE,EAAE,EAAE,CAAA;AAClC,IAAA,MAAMC,UAAU,GAAG,CAAA,SAAA,EAAYC,4BAAW,CAACH,WAAW,CAAC,CAAU,QAAA,CAAA,CAAA;IAEjE,oBACE3C,cAAA,CAACM,sBAAI,EAAA;AAACE,MAAAA,MAAM,EAAE,CAAE;AAACD,MAAAA,QAAQ,EAAE,CAAE;MAAAE,QAAA,EAC1B,OAAOoC,UAAU,CAAA;AAC1B;AACA,2BAAA,EAA6BF,WAAW,CAAA;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAA,EAAuCA,WAAW,CAAA;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,6BAAA,EAA+BA,WAAW,CAAA;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,sCAAA,EAAwCA,WAAW,CAAA;AACnD;AACA;AACA;AACA;AACA,2EAAA,CAAA;AAA4E,KAAA,EAvCnCA,WAwC7B,CAAC,CAAA;AAEX,GAAC,CAAC,CAAA;AACJ;;ACxDO,SAASI,WAAWA,CAAC;EAAEC,QAAQ;AAAEC,EAAAA,MAAAA;AAAO,CAAC,EAAE;AAChD,EAAA,MAAMC,MAAM,GAAGC,0BAAS,CAACH,QAAQ,CAACI,OAAO,EAAE,EAAEH,MAAM,CAACC,MAAM,CAAC,CAAA;AAC3D,EAAA,MAAMG,KAAK,GAAGC,yBAAQ,CAACN,QAAQ,CAAC,CAAA;EAChC,MAAMrC,WAAW,GAAG4C,+BAAc,CAACP,QAAQ,CAACQ,QAAQ,EAAE,CAAC,CAAA;AACvD,EAAA,MAAMC,UAAU,GAAGC,8BAAa,CAACV,QAAQ,EAAEC,MAAM,CAACU,kBAAkB,EAAEV,MAAM,CAACW,gBAAgB,CAAC,CAAA;AAC9F,EAAA,MAAMxC,SAAS,GAAGyC,6BAAY,CAACX,MAAM,CAAC,CAAA;AACtC,EAAA,MAAMY,UAAU,GAAGd,QAAQ,CAACc,UAAU,EAAE,CAAA;AACxC,EAAA,MAAM1D,cAAc,GAAG0D,UAAU,CAACC,YAAY,EAAE,CAAA;AAChD,EAAA,MAAMrC,iBAAiB,GAAGoC,UAAU,CAACE,eAAe,EAAE,CAAA;EAEtD,oBACE9C,eAAA,CAACZ,sBAAI,EAAA;IAAAG,QAAA,EAAA,cACHT,cAAA,CAACM,sBAAI,EAAA;AAACC,MAAAA,QAAQ,EAAE,CAAE;MAAAE,QAAA,EACf,SAASgD,UAAU,CAAA,CAAA,CAAA;AAAG,KACnB,CAAC,eACPzD,cAAA,CAACkC,WAAW,EAAA;AAACd,MAAAA,SAAS,EAAEA,SAAU;AAACvB,MAAAA,KAAK,EAAEc,WAAY;AAACe,MAAAA,iBAAiB,EAAEA,iBAAAA;AAAkB,KAAE,CAAC,eAC/F1B,cAAA,CAACiE,2BAAO,EAAA;AAAC/D,MAAAA,QAAQ,EAAC,QAAQ;AAACmD,MAAAA,KAAK,EAAEA,KAAAA;AAAM,KAAE,CAAC,eAC3CrD,cAAA,CAACkE,0CAAsB,EAAA;AACrBhE,MAAAA,QAAQ,EAAC,QAAQ;AACjB2C,MAAAA,UAAU,EAAC,0BAA0B;AACrCsB,MAAAA,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,CAAE;AAClCC,MAAAA,gBAAgB,EAAC,+DAAA;AAAyD,KAC3E,CAAC,eACFpE,cAAA,CAACqE,wCAAoB,EAAA;AACnBnE,MAAAA,QAAQ,EAAC,QAAQ;AACjB2C,MAAAA,UAAU,EAAC,wBAAwB;AACnCsB,MAAAA,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,CAAE;AAClCC,MAAAA,gBAAgB,EAAC,oDAAA;KAClB,CAAC,eACFpE,cAAA,CAACwC,yBAAyB,IAAE,CAAC,eAC7BxC,cAAA,CAACsE,iCAAa,EAAA;AACZpE,MAAAA,QAAQ,EAAC,QAAQ;AACjB2C,MAAAA,UAAU,EAAC,gBAAgB;AAC3BsB,MAAAA,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,CAAE;AAClCC,MAAAA,gBAAgB,EAAC,4EAAA;AAAsE,KACxF,CAAC,eACFpE,cAAA,CAACuE,+BAAW,EAAA;AAACrE,MAAAA,QAAQ,EAAC,QAAA;AAAQ,KAAE,CAAC,eACjCF,cAAA,CAACyC,yBAAyB,EAAA;AAACf,MAAAA,iBAAiB,EAAEA,iBAAAA;AAAkB,KAAE,CAAC,eACnE1B,cAAA,CAACwE,kCAAc,EAAA;AACbtE,MAAAA,QAAQ,EAAC,QAAQ;AACjBE,MAAAA,cAAc,EAAEA,cAAe;AAC/BqD,MAAAA,UAAU,EAAEA,UAAAA;AAAW,KACxB,CAAC,eACFzD,cAAA,CAACG,IAAI,EAAA;AAACC,MAAAA,cAAc,EAAEA,cAAAA;AAAe,KAAE,CAAC,eACxCJ,cAAA,CAACyE,mCAAe,EAAA;AACdvE,MAAAA,QAAQ,EAAC,QAAQ;MACjBiE,YAAY,EAAE,CAAC,MAAM,CAAE;AACvBC,MAAAA,gBAAgB,EAAC,qDAAA;AAA+C,KACjE,CAAC,CAAA;AAAA,GACE,CAAC,CAAA;AAEX;;ACrDe,kBAAU,EAAA;EAAEpB,QAAQ;AAAEC,EAAAA,MAAAA;AAAO,CAAC,EAAE;AAC7C,EAAA,MAAMC,MAAM,GAAGC,0BAAS,CAACH,QAAQ,CAACI,OAAO,EAAE,EAAEH,MAAM,CAACC,MAAM,CAAC,CAAA;AAC3D,EAAA,MAAMwB,IAAI,GAAGC,wBAAO,CAAC3B,QAAQ,CAAC,CAAA;EAC9B,MAAMrC,WAAW,GAAG4C,+BAAc,CAACP,QAAQ,CAACQ,QAAQ,EAAE,CAAC,CAAA;AACvD,EAAA;AAAA;AACE;AACAtC,IAAAA,eAAA,CAAC0D,sBAAI,EAAA;MAACC,IAAI,EAAE5B,MAAM,CAAC6B,cAAe;MAAArE,QAAA,EAAA,cAChCT,cAAA,CAAC+E,kCAAc,EAAA;AACbL,QAAAA,IAAI,EAAEA,IAAK;AACXxB,QAAAA,MAAM,EAAEA,MAAO;AACfhD,QAAAA,QAAQ,EAAC,QAAA;AAAQ,OAClB,CAAC,eACFF,cAAA,CAACJ,QAAQ,EAAA;AAACC,QAAAA,KAAK,EAAEc,WAAAA;AAAY,OAAE,CAAC,eAChCX,cAAA,CAAC+C,WAAW,EAAA;AAACC,QAAAA,QAAQ,EAAEA,QAAS;AAACC,QAAAA,MAAM,EAAEA,MAAAA;AAAO,OAAE,CAAC,CAAA;KAC/C,CAAA;AAAC,IAAA;AAEX;;;;"}
@@ -2,9 +2,8 @@ import { Text } from '@asyncapi/generator-react-sdk';
2
2
  import { getClientName, getServerUrl, getServer, getQueryParams, getTitle } from '@asyncapi/generator-helpers';
3
3
  import { Send } from './Send';
4
4
  import { Constructor } from './Constructor';
5
- import { CloseConnection, RegisterMessageHandler, RegisterErrorHandler, SendOperations, Connect, HandleMessage } from '@asyncapi/generator-components';
5
+ import { CloseConnection, RegisterMessageHandler, RegisterErrorHandler, SendOperations, Connect, HandleMessage, HandleError } from '@asyncapi/generator-components';
6
6
  import { RegisterOutgoingProcessor } from './RegisterOutgoingProcessor';
7
- import { HandleError } from './HandleError';
8
7
  import { RegisterReceiveOperations } from './RegisterReceiveOperations';
9
8
 
10
9
  export function ClientClass({ asyncapi, params }) {
@@ -43,7 +42,7 @@ export function ClientClass({ asyncapi, params }) {
43
42
  methodParams={['self', 'message']}
44
43
  preExecutionCode='"""Pass the incoming message to all registered message handlers. """'
45
44
  />
46
- <HandleError />
45
+ <HandleError language="python" />
47
46
  <RegisterReceiveOperations receiveOperations={receiveOperations} />
48
47
  <SendOperations
49
48
  language="python"
@@ -5,6 +5,8 @@
5
5
  "scripts": {
6
6
  "test": "jest --coverage",
7
7
  "test:update": "npm run test -- -u",
8
+ "test:integration": "npm --prefix ../test/integration-test run test:python",
9
+ "test:integration:update": "npm --prefix ../test/integration-test run test:python:update",
8
10
  "lint": "eslint --max-warnings 0 --config ../../../../../.eslintrc --ignore-path ../../../../../.eslintignore .",
9
11
  "lint:fix": "eslint --fix --max-warnings 0 --config ../../../../../.eslintrc --ignore-path ../../../../../.eslintignore ."
10
12
  },
@@ -13,7 +15,7 @@
13
15
  "dependencies": {
14
16
  "@asyncapi/generator-react-sdk": "*",
15
17
  "@asyncapi/generator-helpers": "1.1.0",
16
- "@asyncapi/generator-components": "0.5.0"
18
+ "@asyncapi/generator-components": "0.6.0"
17
19
  },
18
20
  "devDependencies": {
19
21
  "@asyncapi/parser": "^3.4.0",
@@ -37,15 +37,21 @@ module.exports.isCoreTemplate = (templateName) => {
37
37
  /**
38
38
  * Retrieve a template by name and validate its path.
39
39
  * If the path does not exist, fallback to `node_modules/{templateName}`.
40
+ * Returns undefined when templateName is invalid (null, undefined, not a string, or empty/whitespace-only) or when no baked-in template exists with the given name.
40
41
  *
41
42
  * @async
42
43
  * @param {string} templateName - The name of the template to retrieve.
43
- * @returns {Promise<{name: string, path: string}|undefined>} An object containing the template's name and path, or undefined if not found.
44
+ * @returns {Promise<{name: string, path: string}|undefined>} An object containing the template's name and path, or undefined if templateName is invalid or template is not on the list.
44
45
  */
45
46
  module.exports.getTemplate = async (templateName) => {
47
+ if (templateName == null || typeof templateName !== 'string' || templateName.trim() === '') {
48
+ return undefined;
49
+ }
46
50
  const template = templates.find(t => t.name === templateName);
47
-
48
- const templatePath = template?.path || path.resolve(__dirname, BAKED_IN_TEMPLATES_DIR, template.name);
51
+ if (!template) {
52
+ return undefined;
53
+ }
54
+ const templatePath = template.path || path.resolve(__dirname, BAKED_IN_TEMPLATES_DIR, template.name);
49
55
  return {
50
56
  name: template.name,
51
57
  path: templatePath
@@ -75,7 +75,7 @@ function isTemplateCompatible(generator, apiVersion) {
75
75
  */
76
76
  function isRequiredParamProvided(configParams, templateParams) {
77
77
  const missingParams = Object.keys(configParams || {})
78
- .filter(key => configParams[key].required && !templateParams[key]);
78
+ .filter(key => configParams[key].required && templateParams[key] === undefined);
79
79
 
80
80
  if (missingParams.length) {
81
81
  throw new Error(`This template requires the following missing params: ${missingParams}.`);
package/lib/utils.js CHANGED
@@ -64,13 +64,15 @@ utils.convertMapToObject = (map) => {
64
64
  *
65
65
  * @param {String} link URL where the AsyncAPI document is located.
66
66
  * @returns {Promise<String>} Content of fetched file.
67
+ * @throws {Error} When the HTTP response is not successful (non-2xx status).
67
68
  */
68
- utils.fetchSpec = (link) => {
69
- return new Promise((resolve, reject) => {
70
- fetch(link)
71
- .then(res => resolve(res.text()))
72
- .catch(reject);
73
- });
69
+ utils.fetchSpec = async (link) => {
70
+ const res = await fetch(link);
71
+ if (!res.ok) {
72
+ const statusText = res.statusText ? ` ${res.statusText}` : '';
73
+ throw new Error(logMessage.fetchSpecError(link, res.status, statusText));
74
+ }
75
+ return res.text();
74
76
  };
75
77
 
76
78
  /**
@@ -120,11 +122,11 @@ utils.isAsyncFunction = (fn) => {
120
122
  */
121
123
  utils.registerTypeScript = (filePath) => {
122
124
  const isTypescriptFile = filePath.endsWith('.ts');
123
-
125
+
124
126
  if (!isTypescriptFile) {
125
127
  return;
126
128
  }
127
-
129
+
128
130
  const { REGISTER_INSTANCE, register } = require('ts-node');
129
131
  // if the ts-node has already been registered before, do not register it again.
130
132
  // Check the env. TS_NODE_ENV if ts-node started via ts-node-dev package
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asyncapi/generator",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "The AsyncAPI generator. It can generate documentation, code, anything!",
5
5
  "main": "./lib/generator.js",
6
6
  "engines": {
@@ -1,19 +0,0 @@
1
- 'use strict';
2
-
3
- require('source-map-support/register');
4
- var generatorReactSdk = require('@asyncapi/generator-react-sdk');
5
- var jsxRuntime = require('/home/runner/work/generator/generator/node_modules/react/cjs/react-jsx-runtime.production.min.js');
6
-
7
- function HandleError() {
8
- return /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
9
- indent: 2,
10
- children: `@OnError
11
- public void onError(Throwable throwable) {
12
- LOG.error("Websocket connection error: " + throwable.getMessage());
13
- }
14
- `
15
- });
16
- }
17
-
18
- module.exports = HandleError;
19
- //# sourceMappingURL=HandleError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HandleError.js","sources":["../../../../../../../../packages/templates/clients/websocket/java/quarkus/components/HandleError.js"],"sourcesContent":["import { Text } from '@asyncapi/generator-react-sdk';\n\nexport default function HandleError() {\n return (\n <Text indent={2}>\n {`@OnError\npublic void onError(Throwable throwable) {\n LOG.error(\"Websocket connection error: \" + throwable.getMessage());\n}\n`}\n </Text>\n );\n}\n\n"],"names":["HandleError","_jsx","Text","indent","children"],"mappings":";;;;;;AAEe,SAASA,WAAWA,GAAG;EACpC,oBACEC,cAAA,CAACC,sBAAI,EAAA;AAACC,IAAAA,MAAM,EAAE,CAAE;AAAAC,IAAAA,QAAA,EACb,CAAA;AACP;AACA;AACA;AACA,CAAA;AAAC,GACS,CAAC,CAAA;AAEX;;;;"}
@@ -1,14 +0,0 @@
1
- import { Text } from '@asyncapi/generator-react-sdk';
2
-
3
- export default function HandleError() {
4
- return (
5
- <Text indent={2}>
6
- {`@OnError
7
- public void onError(Throwable throwable) {
8
- LOG.error("Websocket connection error: " + throwable.getMessage());
9
- }
10
- `}
11
- </Text>
12
- );
13
- }
14
-
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- require('source-map-support/register');
6
- var generatorReactSdk = require('@asyncapi/generator-react-sdk');
7
- var jsxRuntime = require('/home/runner/work/generator/generator/node_modules/react/cjs/react-jsx-runtime.production.min.js');
8
-
9
- function HandleError() {
10
- return /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
11
- newLines: 2,
12
- indent: 2,
13
- children: `def handle_error(self, error):
14
- """Pass the error to all registered error handlers. Generic log message is printed if no handlers are registered."""
15
- if len(self.error_handlers) == 0:
16
- print("\\033[91mError occurred:\\033[0m", error)
17
- else:
18
- # Call custom error handlers
19
- for handler in self.error_handlers:
20
- handler(error)`
21
- });
22
- }
23
-
24
- exports.HandleError = HandleError;
25
- //# sourceMappingURL=HandleError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HandleError.js","sources":["../../../../../../../../packages/templates/clients/websocket/python/components/HandleError.js"],"sourcesContent":["import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function HandleError() {\n return (\n <Text newLines={2} indent={2}>\n {\n `def handle_error(self, error):\n \"\"\"Pass the error to all registered error handlers. Generic log message is printed if no handlers are registered.\"\"\"\n if len(self.error_handlers) == 0:\n print(\"\\\\033[91mError occurred:\\\\033[0m\", error)\n else:\n # Call custom error handlers\n for handler in self.error_handlers:\n handler(error)`\n }\n </Text>\n );\n}\n"],"names":["HandleError","_jsx","Text","newLines","indent","children"],"mappings":";;;;;;;;AAEO,SAASA,WAAWA,GAAG;EAC5B,oBACEC,cAAA,CAACC,sBAAI,EAAA;AAACC,IAAAA,QAAQ,EAAE,CAAE;AAACC,IAAAA,MAAM,EAAE,CAAE;AAAAC,IAAAA,QAAA,EAEzB,CAAA;AACR;AACA;AACA;AACA;AACA;AACA;AACA,sBAAA,CAAA;AAAuB,GAEb,CAAC,CAAA;AAEX;;;;"}