@asyncapi/generator 2.8.4 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/docs/api.md +2 -51
- package/docs/asyncapi-document.md +1 -1
- package/docs/configuration-file.md +0 -4
- package/docs/file-templates.md +1 -59
- package/docs/generator-template-java.md +0 -2
- package/docs/generator-template.md +1 -4
- package/docs/index.md +2 -2
- package/docs/jsdoc2md-handlebars/main-index/global-index/global-index-dl.hbs +13 -0
- package/docs/jsdoc2md-handlebars/member-index-grouped.hbs +6 -0
- package/docs/jsdoc2md-handlebars/member-index-list.hbs +6 -0
- package/docs/jsdoc2md-handlebars/members.hbs +1 -0
- package/docs/react-render-engine.md +5 -37
- package/docs/template-development.md +2 -7
- package/docs/template.md +2 -2
- package/docs/typescript-support.md +3 -5
- package/jest.config.js +3 -6
- package/lib/__mocks__/utils.js +0 -3
- package/lib/generator.js +4 -20
- package/lib/templates/bakedInTemplates/core-template-client-kafka-java-quarkus/.ageneratorrc +2 -4
- package/lib/templates/bakedInTemplates/core-template-client-kafka-java-quarkus/__transpiled/jest.config.js +13 -0
- package/lib/templates/bakedInTemplates/core-template-client-kafka-java-quarkus/__transpiled/jest.config.js.map +1 -0
- package/lib/templates/bakedInTemplates/core-template-client-kafka-java-quarkus/jest.config.js +14 -0
- package/lib/templates/bakedInTemplates/core-template-client-kafka-java-quarkus/package.json +3 -17
- package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/.ageneratorrc +0 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/__transpiled/jest.config.js +13 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/__transpiled/jest.config.js.map +1 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/jest.config.js +14 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-dart/package.json +3 -17
- package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/.ageneratorrc +0 -2
- package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/__transpiled/jest.config.js +13 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/__transpiled/jest.config.js.map +1 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/jest.config.js +14 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/package.json +4 -18
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/.ageneratorrc +8 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/ClientClass.js +5 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/ClientClass.js.map +1 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/CompileOperationSchemas.js +48 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/CompileOperationSchemas.js.map +1 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/Constructor.js +7 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/Constructor.js.map +1 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/jest.config.js +13 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/jest.config.js.map +1 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/template/README.md.js +5 -153
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/template/README.md.js.map +1 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/template/client.js.js +52 -3
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/template/client.js.js.map +1 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/components/ClientClass.js +4 -2
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/components/CompileOperationSchemas.js +40 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/components/Constructor.js +7 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/jest.config.js +14 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/package.json +7 -20
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/template/README.md.js +2 -103
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/template/client.js.js +5 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-python/.ageneratorrc +0 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/jest.config.js +13 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/jest.config.js.map +1 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/template/README.md.js +18 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-python/__transpiled/template/README.md.js.map +1 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-python/jest.config.js +14 -0
- package/lib/templates/bakedInTemplates/core-template-client-websocket-python/package.json +3 -17
- package/lib/templates/bakedInTemplates/core-template-client-websocket-python/template/README.md.js +5 -0
- package/lib/templates/config/validator.js +3 -3
- package/lib/utils.js +0 -21
- package/package.json +7 -14
- package/Dockerfile +0 -20
- package/cli.js +0 -205
- package/docs/migration-cli.md +0 -70
- package/docs/migration-nunjucks-react.md +0 -144
- package/docs/nunjucks-render-engine.md +0 -83
- package/lib/filtersRegistry.js +0 -134
- package/lib/renderer/nunjucks.js +0 -42
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/AvailableOperations.js +0 -34
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/AvailableOperations.js.map +0 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/MessageExamples.js +0 -29
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/MessageExamples.js.map +0 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/OperationHeader.js +0 -19
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/__transpiled/components/OperationHeader.js.map +0 -1
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/components/AvailableOperations.js +0 -20
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/components/MessageExamples.js +0 -25
- package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/components/OperationHeader.js +0 -12
- package/lib/watcher.js +0 -147
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
"lint:fix": "eslint --fix --max-warnings 0 --config ../../../../../../.eslintrc --ignore-path ../../../../../../.eslintignore ."
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@asyncapi/generator-helpers": "0.
|
|
21
|
+
"@asyncapi/generator-helpers": "1.0.0",
|
|
22
22
|
"@asyncapi/generator-react-sdk": "^1.1.2"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@asyncapi/generator": "*",
|
|
26
|
-
"@asyncapi/modelina": "^5.
|
|
27
|
-
"@asyncapi/parser": "^3.0
|
|
26
|
+
"@asyncapi/modelina": "^5.10.1",
|
|
27
|
+
"@asyncapi/parser": "^3.4.0",
|
|
28
28
|
"@babel/cli": "^7.25.9",
|
|
29
29
|
"@babel/core": "^7.26.0",
|
|
30
30
|
"@babel/preset-env": "^7.26.0",
|
|
@@ -35,20 +35,6 @@
|
|
|
35
35
|
"eslint-plugin-sonarjs": "^0.5.0",
|
|
36
36
|
"jest-esm-transformer": "^1.0.0"
|
|
37
37
|
},
|
|
38
|
-
"jest": {
|
|
39
|
-
"moduleFileExtensions": [
|
|
40
|
-
"js",
|
|
41
|
-
"json",
|
|
42
|
-
"jsx"
|
|
43
|
-
],
|
|
44
|
-
"transform": {
|
|
45
|
-
"^.+\\.jsx?$": "babel-jest"
|
|
46
|
-
},
|
|
47
|
-
"moduleNameMapper": {
|
|
48
|
-
"^nimma/legacy$": "<rootDir>/../../../../../node_modules/nimma/dist/legacy/cjs/index.js",
|
|
49
|
-
"^nimma/(.*)": "<rootDir>/../../../../../node_modules/nimma/dist/cjs/$1"
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
38
|
"babel": {
|
|
53
39
|
"presets": [
|
|
54
40
|
"@babel/preset-env",
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('source-map-support/register');
|
|
4
|
+
|
|
5
|
+
const baseConfig = require('../../../../../jest.config.base');
|
|
6
|
+
module.exports = {
|
|
7
|
+
...baseConfig(__dirname),
|
|
8
|
+
moduleFileExtensions: ['js', 'json', 'jsx'],
|
|
9
|
+
transform: {
|
|
10
|
+
'^.+\\.jsx?$': 'babel-jest'
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=jest.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jest.config.js","sources":["../../../../../../../packages/templates/clients/websocket/dart/jest.config.js"],"sourcesContent":["const baseConfig = require('../../../../../jest.config.base');\n\nmodule.exports = {\n ...baseConfig(__dirname),\n moduleFileExtensions: [\n 'js',\n 'json',\n 'jsx'\n ],\n transform: {\n '^.+\\\\.jsx?$': 'babel-jest'\n },\n};\n\n"],"names":["baseConfig","require","module","exports","__dirname","moduleFileExtensions","transform"],"mappings":";;;;AAAA,MAAMA,UAAU,GAAGC,OAAO,CAAC,iCAAiC,CAAC,CAAA;AAE7DC,MAAM,CAACC,OAAO,GAAG;EACf,GAAGH,UAAU,CAACI,SAAS,CAAC;AACxBC,EAAAA,oBAAoB,EAAE,CACpB,IAAI,EACJ,MAAM,EACN,KAAK,CACN;AACDC,EAAAA,SAAS,EAAE;AACT,IAAA,aAAa,EAAE,YAAA;AACjB,GAAA;AACF,CAAC;;"}
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
"license": "Apache-2.0",
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@asyncapi/generator-react-sdk": "*",
|
|
15
|
-
"@asyncapi/generator-helpers": "0.
|
|
16
|
-
"@asyncapi/generator-components": "0.
|
|
15
|
+
"@asyncapi/generator-helpers": "1.0.0",
|
|
16
|
+
"@asyncapi/generator-components": "0.4.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@asyncapi/parser": "^3.0
|
|
19
|
+
"@asyncapi/parser": "^3.4.0",
|
|
20
20
|
"@babel/cli": "^7.25.9",
|
|
21
21
|
"@babel/core": "^7.26.0",
|
|
22
22
|
"@babel/preset-env": "^7.26.0",
|
|
@@ -27,20 +27,6 @@
|
|
|
27
27
|
"eslint-plugin-react": "^7.34.1",
|
|
28
28
|
"eslint-plugin-sonarjs": "^0.5.0"
|
|
29
29
|
},
|
|
30
|
-
"jest": {
|
|
31
|
-
"moduleFileExtensions": [
|
|
32
|
-
"js",
|
|
33
|
-
"json",
|
|
34
|
-
"jsx"
|
|
35
|
-
],
|
|
36
|
-
"transform": {
|
|
37
|
-
"^.+\\.jsx?$": "babel-jest"
|
|
38
|
-
},
|
|
39
|
-
"moduleNameMapper": {
|
|
40
|
-
"^nimma/legacy$": "<rootDir>/../../../../../node_modules/nimma/dist/legacy/cjs/index.js",
|
|
41
|
-
"^nimma/(.*)": "<rootDir>/../../../../../node_modules/nimma/dist/cjs/$1"
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
30
|
"babel": {
|
|
45
31
|
"presets": [
|
|
46
32
|
"@babel/preset-env",
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('source-map-support/register');
|
|
4
|
+
|
|
5
|
+
const baseConfig = require('../../../../../../jest.config.base');
|
|
6
|
+
module.exports = {
|
|
7
|
+
...baseConfig(__dirname),
|
|
8
|
+
moduleFileExtensions: ['js', 'json', 'jsx'],
|
|
9
|
+
transform: {
|
|
10
|
+
'^.+\\.jsx?$': 'babel-jest'
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=jest.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jest.config.js","sources":["../../../../../../../packages/templates/clients/websocket/java/quarkus/jest.config.js"],"sourcesContent":["const baseConfig = require('../../../../../../jest.config.base');\n\nmodule.exports = {\n ...baseConfig(__dirname),\n moduleFileExtensions: [\n 'js',\n 'json',\n 'jsx'\n ],\n transform: {\n '^.+\\\\.jsx?$': 'babel-jest'\n },\n};\n\n"],"names":["baseConfig","require","module","exports","__dirname","moduleFileExtensions","transform"],"mappings":";;;;AAAA,MAAMA,UAAU,GAAGC,OAAO,CAAC,oCAAoC,CAAC,CAAA;AAEhEC,MAAM,CAACC,OAAO,GAAG;EACf,GAAGH,UAAU,CAACI,SAAS,CAAC;AACxBC,EAAAA,oBAAoB,EAAE,CACpB,IAAI,EACJ,MAAM,EACN,KAAK,CACN;AACDC,EAAAA,SAAS,EAAE;AACT,IAAA,aAAa,EAAE,YAAA;AACjB,GAAA;AACF,CAAC;;"}
|
package/lib/templates/bakedInTemplates/core-template-client-websocket-java-quarkus/package.json
CHANGED
|
@@ -18,14 +18,14 @@
|
|
|
18
18
|
"lint:fix": "eslint --fix --max-warnings 0 --config ../../../../../../.eslintrc --ignore-path ../../../../../../.eslintignore ."
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@asyncapi/generator-helpers": "0.
|
|
22
|
-
"@asyncapi/generator-components": "0.
|
|
21
|
+
"@asyncapi/generator-helpers": "1.0.0",
|
|
22
|
+
"@asyncapi/generator-components": "0.4.0",
|
|
23
23
|
"@asyncapi/generator-react-sdk": "^1.1.2"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@asyncapi/generator": "*",
|
|
27
|
-
"@asyncapi/modelina": "^5.
|
|
28
|
-
"@asyncapi/parser": "^3.0
|
|
27
|
+
"@asyncapi/modelina": "^5.10.1",
|
|
28
|
+
"@asyncapi/parser": "^3.4.0",
|
|
29
29
|
"@babel/cli": "^7.25.9",
|
|
30
30
|
"@babel/core": "^7.26.0",
|
|
31
31
|
"@babel/preset-env": "^7.26.0",
|
|
@@ -36,20 +36,6 @@
|
|
|
36
36
|
"eslint-plugin-sonarjs": "^0.5.0",
|
|
37
37
|
"jest-esm-transformer": "^1.0.0"
|
|
38
38
|
},
|
|
39
|
-
"jest": {
|
|
40
|
-
"moduleFileExtensions": [
|
|
41
|
-
"js",
|
|
42
|
-
"json",
|
|
43
|
-
"jsx"
|
|
44
|
-
],
|
|
45
|
-
"transform": {
|
|
46
|
-
"^.+\\.jsx?$": "babel-jest"
|
|
47
|
-
},
|
|
48
|
-
"moduleNameMapper": {
|
|
49
|
-
"^nimma/legacy$": "<rootDir>/../../../../../node_modules/nimma/dist/legacy/cjs/index.js",
|
|
50
|
-
"^nimma/(.*)": "<rootDir>/../../../../../node_modules/nimma/dist/cjs/$1"
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
39
|
"babel": {
|
|
54
40
|
"presets": [
|
|
55
41
|
"@babel/preset-env",
|
package/lib/templates/bakedInTemplates/core-template-client-websocket-javascript/.ageneratorrc
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
renderer: react
|
|
2
1
|
apiVersion: v3
|
|
3
2
|
parameters:
|
|
4
3
|
server:
|
|
@@ -15,7 +14,15 @@ parameters:
|
|
|
15
14
|
customClientName:
|
|
16
15
|
description: The custom name for the generated client class
|
|
17
16
|
required: false
|
|
17
|
+
asyncapiFileDir:
|
|
18
|
+
description: >-
|
|
19
|
+
Custom location of the AsyncAPI file that you provided as an input in generation. By default it is located in the
|
|
20
|
+
root of the output directory
|
|
21
|
+
required: false
|
|
22
|
+
default: .
|
|
18
23
|
metadata:
|
|
19
24
|
type: client
|
|
20
25
|
protocol: websocket
|
|
21
26
|
target: javascript
|
|
27
|
+
hooks:
|
|
28
|
+
'@asyncapi/generator-hooks': createAsyncapiFile
|
|
@@ -7,6 +7,7 @@ var generatorReactSdk = require('@asyncapi/generator-react-sdk');
|
|
|
7
7
|
var Constructor = require('./Constructor.js');
|
|
8
8
|
var generatorComponents = require('@asyncapi/generator-components');
|
|
9
9
|
var ModuleExport = require('./ModuleExport.js');
|
|
10
|
+
var CompileOperationSchemas = require('./CompileOperationSchemas.js');
|
|
10
11
|
var jsxRuntime = require('/home/runner/work/generator/generator/node_modules/react/cjs/react-jsx-runtime.production.min.js');
|
|
11
12
|
|
|
12
13
|
function ClientClass({
|
|
@@ -20,7 +21,8 @@ function ClientClass({
|
|
|
20
21
|
newLines: 2,
|
|
21
22
|
children: `class ${clientName} {`
|
|
22
23
|
}), /*#__PURE__*/jsxRuntime.jsx(Constructor.Constructor, {
|
|
23
|
-
serverUrl: serverUrl
|
|
24
|
+
serverUrl: serverUrl,
|
|
25
|
+
sendOperations: sendOperations
|
|
24
26
|
}), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.Connect, {
|
|
25
27
|
language: "javascript",
|
|
26
28
|
title: title
|
|
@@ -33,6 +35,8 @@ function ClientClass({
|
|
|
33
35
|
}), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.HandleMessage, {
|
|
34
36
|
language: "javascript",
|
|
35
37
|
methodParams: ['message', 'cb']
|
|
38
|
+
}), /*#__PURE__*/jsxRuntime.jsx(CompileOperationSchemas.CompileOperationSchemas, {
|
|
39
|
+
sendOperations: sendOperations
|
|
36
40
|
}), /*#__PURE__*/jsxRuntime.jsx(generatorComponents.SendOperations, {
|
|
37
41
|
language: "javascript",
|
|
38
42
|
sendOperations: sendOperations,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientClass.js","sources":["../../../../../../../../packages/templates/clients/websocket/javascript/components/ClientClass.js"],"sourcesContent":["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';\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} />\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 <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"],"names":["ClientClass","clientName","serverUrl","title","sendOperations","_jsxs","Text","children","_jsx","newLines","Constructor","Connect","language","RegisterMessageHandler","methodParams","RegisterErrorHandler","HandleMessage","SendOperations","CloseConnection","ModuleExport"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClientClass.js","sources":["../../../../../../../../packages/templates/clients/websocket/javascript/components/ClientClass.js"],"sourcesContent":["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"],"names":["ClientClass","clientName","serverUrl","title","sendOperations","_jsxs","Text","children","_jsx","newLines","Constructor","Connect","language","RegisterMessageHandler","methodParams","RegisterErrorHandler","HandleMessage","CompileOperationSchemas","SendOperations","CloseConnection","ModuleExport"],"mappings":";;;;;;;;;;;;AAMO,SAASA,WAAWA,CAAC;EAAEC,UAAU;EAAEC,SAAS;EAAEC,KAAK;AAAEC,EAAAA,cAAAA;AAAe,CAAC,EAAE;EAC5E,oBACEC,eAAA,CAACC,sBAAI,EAAA;IAAAC,QAAA,EAAA,cACHC,cAAA,CAACF,sBAAI,EAAA;AAACG,MAAAA,QAAQ,EAAE,CAAE;MAAAF,QAAA,EACf,SAASN,UAAU,CAAA,EAAA,CAAA;AAAI,KACpB,CAAC,eACPO,cAAA,CAACE,uBAAW,EAAA;AAACR,MAAAA,SAAS,EAAEA,SAAU;AAACE,MAAAA,cAAc,EAAEA,cAAAA;AAAe,KAAE,CAAC,eACrEI,cAAA,CAACG,2BAAO,EAAA;AAACC,MAAAA,QAAQ,EAAC,YAAY;AAACT,MAAAA,KAAK,EAAEA,KAAAA;AAAM,KAAE,CAAC,eAC/CK,cAAA,CAACK,0CAAsB,EAAA;AACrBD,MAAAA,QAAQ,EAAC,YAAY;MACrBE,YAAY,EAAE,CAAC,SAAS,CAAA;AAAE,KAC3B,CAAC,eACFN,cAAA,CAACO,wCAAoB,EAAA;AACnBH,MAAAA,QAAQ,EAAC,YAAY;MACrBE,YAAY,EAAE,CAAC,SAAS,CAAA;AAAE,KAC3B,CAAC,eACFN,cAAA,CAACQ,iCAAa,EAAA;AACZJ,MAAAA,QAAQ,EAAC,YAAY;AACrBE,MAAAA,YAAY,EAAE,CAAC,SAAS,EAAE,IAAI,CAAA;AAAE,KACjC,CAAC,eACFN,cAAA,CAACS,+CAAuB,EAAA;AAACb,MAAAA,cAAc,EAAEA,cAAAA;AAAe,KAAE,CAAC,eAC3DI,cAAA,CAACU,kCAAc,EAAA;AACbN,MAAAA,QAAQ,EAAC,YAAY;AACrBR,MAAAA,cAAc,EAAEA,cAAe;AAC/BH,MAAAA,UAAU,EAAEA,UAAAA;AAAW,KACxB,CAAC,eACFO,cAAA,CAACW,mCAAe,EAAA;AAACP,MAAAA,QAAQ,EAAC,YAAA;AAAY,KAAE,CAAC,eACzCJ,cAAA,CAACF,sBAAI,EAAA;AAAAC,MAAAA,QAAA,EACF,GAAA;AAAG,KACA,CAAC,eACPC,cAAA,CAACY,yBAAY,EAAA;AAACnB,MAAAA,UAAU,EAAEA,UAAAA;AAAW,KAAE,CAAC,CAAA;AAAA,GACpC,CAAC,CAAA;AAEX;;;;"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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 CompileOperationSchemas({
|
|
10
|
+
sendOperations
|
|
11
|
+
}) {
|
|
12
|
+
if (!sendOperations || sendOperations.length === 0) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, {
|
|
16
|
+
children: /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
|
|
17
|
+
indent: 2,
|
|
18
|
+
newLines: 2,
|
|
19
|
+
children: `/**
|
|
20
|
+
* Initialize and compile all schemas for operations defined.
|
|
21
|
+
* This should be called once after creating the client instance.
|
|
22
|
+
* Subsequent calls will be ignored if schemas are already compiled.
|
|
23
|
+
*
|
|
24
|
+
* @returns {Promise<void>}
|
|
25
|
+
* @throws {Error} If schema compilation fails for any operation
|
|
26
|
+
*/
|
|
27
|
+
async compileOperationSchemas() {
|
|
28
|
+
if (this.schemasCompiled) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
// Compile schemas for all send operations
|
|
34
|
+
for (const operationId of this.sendOperationsId) {
|
|
35
|
+
this.compiledSchemas[operationId] = await compileSchemasByOperationId(asyncapiFilepath, operationId);
|
|
36
|
+
}
|
|
37
|
+
this.schemasCompiled = true;
|
|
38
|
+
console.log('Schemas initialized successfully for operations:', this.sendOperationsId.join(', '));
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error('Error initializing schemas:', error);
|
|
41
|
+
}
|
|
42
|
+
}`
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
exports.CompileOperationSchemas = CompileOperationSchemas;
|
|
48
|
+
//# sourceMappingURL=CompileOperationSchemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompileOperationSchemas.js","sources":["../../../../../../../../packages/templates/clients/websocket/javascript/components/CompileOperationSchemas.js"],"sourcesContent":["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 }\n}`\n }\n </Text>\n </>\n );\n}\n"],"names":["CompileOperationSchemas","sendOperations","length","_jsx","_Fragment","children","Text","indent","newLines"],"mappings":";;;;;;;;AAEO,SAASA,uBAAuBA,CAAC;AAAEC,EAAAA,cAAAA;AAAe,CAAC,EAAE;EAC1D,IAAI,CAACA,cAAc,IAAIA,cAAc,CAACC,MAAM,KAAK,CAAC,EAAE;AAClD,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEA,oBACEC,cAAA,CAAAC,mBAAA,EAAA;IAAAC,QAAA,eACEF,cAAA,CAACG,sBAAI,EAAA;AAACC,MAAAA,MAAM,EAAE,CAAE;AAACC,MAAAA,QAAQ,EAAE,CAAE;AAAAH,MAAAA,QAAA,EAEzB,CAAA;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAA,CAAA;KAEY,CAAA;AAAC,GACP,CAAC,CAAA;AAEP;;;;"}
|
|
@@ -7,8 +7,11 @@ var generatorReactSdk = require('@asyncapi/generator-react-sdk');
|
|
|
7
7
|
var jsxRuntime = require('/home/runner/work/generator/generator/node_modules/react/cjs/react-jsx-runtime.production.min.js');
|
|
8
8
|
|
|
9
9
|
function Constructor({
|
|
10
|
-
serverUrl
|
|
10
|
+
serverUrl,
|
|
11
|
+
sendOperations
|
|
11
12
|
}) {
|
|
13
|
+
const sendOperationsId = sendOperations.map(operation => operation.id());
|
|
14
|
+
const sendOperationsArray = JSON.stringify(sendOperationsId);
|
|
12
15
|
return /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
|
|
13
16
|
indent: 2,
|
|
14
17
|
children: `/*
|
|
@@ -20,6 +23,9 @@ constructor(url) {
|
|
|
20
23
|
this.websocket = null;
|
|
21
24
|
this.messageHandlers = [];
|
|
22
25
|
this.errorHandlers = [];
|
|
26
|
+
this.compiledSchemas = {};
|
|
27
|
+
this.schemasCompiled = false;
|
|
28
|
+
this.sendOperationsId = ${sendOperationsArray};
|
|
23
29
|
}
|
|
24
30
|
`
|
|
25
31
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constructor.js","sources":["../../../../../../../../packages/templates/clients/websocket/javascript/components/Constructor.js"],"sourcesContent":["import { Text } from '@asyncapi/generator-react-sdk';\n\nexport function Constructor({ serverUrl }) {\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}\n`\n }\n </Text>\n );\n}\n"],"names":["Constructor","serverUrl","_jsx","Text","indent","children"],"mappings":";;;;;;;;AAEO,SAASA,WAAWA,CAAC;AAAEC,EAAAA,
|
|
1
|
+
{"version":3,"file":"Constructor.js","sources":["../../../../../../../../packages/templates/clients/websocket/javascript/components/Constructor.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"],"names":["Constructor","serverUrl","sendOperations","sendOperationsId","map","operation","id","sendOperationsArray","JSON","stringify","_jsx","Text","indent","children"],"mappings":";;;;;;;;AAEO,SAASA,WAAWA,CAAC;EAAEC,SAAS;AAAEC,EAAAA,cAAAA;AAAe,CAAC,EAAE;AACzD,EAAA,MAAMC,gBAAgB,GAAGD,cAAc,CAACE,GAAG,CAAEC,SAAS,IAAKA,SAAS,CAACC,EAAE,EAAE,CAAC,CAAA;AAC1E,EAAA,MAAMC,mBAAmB,GAAGC,IAAI,CAACC,SAAS,CAACN,gBAAgB,CAAC,CAAA;EAE5D,oBACEO,cAAA,CAACC,sBAAI,EAAA;AAACC,IAAAA,MAAM,EAAE,CAAE;AAAAC,IAAAA,QAAA,EAEZ,CAAA;AACR;AACA;AACA;AACA;AACA,qBAAA,EAAuBZ,SAAS,CAAA;AAChC;AACA;AACA;AACA;AACA;AACA,0BAAA,EAA4BM,mBAAmB,CAAA;AAC/C;AACA,CAAA;AAAC,GAES,CAAC,CAAA;AAEX;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('source-map-support/register');
|
|
4
|
+
|
|
5
|
+
const baseConfig = require('../../../../../jest.config.base');
|
|
6
|
+
module.exports = {
|
|
7
|
+
...baseConfig(__dirname),
|
|
8
|
+
moduleFileExtensions: ['js', 'json', 'jsx'],
|
|
9
|
+
transform: {
|
|
10
|
+
'^.+\\.jsx?$': 'babel-jest'
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=jest.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jest.config.js","sources":["../../../../../../../packages/templates/clients/websocket/javascript/jest.config.js"],"sourcesContent":["const baseConfig = require('../../../../../jest.config.base');\n\nmodule.exports = {\n ...baseConfig(__dirname),\n moduleFileExtensions: [\n 'js',\n 'json',\n 'jsx'\n ],\n transform: {\n '^.+\\\\.jsx?$': 'babel-jest'\n },\n};\n\n"],"names":["baseConfig","require","module","exports","__dirname","moduleFileExtensions","transform"],"mappings":";;;;AAAA,MAAMA,UAAU,GAAGC,OAAO,CAAC,iCAAiC,CAAC,CAAA;AAE7DC,MAAM,CAACC,OAAO,GAAG;EACf,GAAGH,UAAU,CAACI,SAAS,CAAC;AACxBC,EAAAA,oBAAoB,EAAE,CACpB,IAAI,EACJ,MAAM,EACN,KAAK,CACN;AACDC,EAAAA,SAAS,EAAE;AACT,IAAA,aAAa,EAAE,YAAA;AACjB,GAAA;AACF,CAAC;;"}
|
|
@@ -1,164 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
require('source-map-support/register');
|
|
4
|
-
var
|
|
5
|
-
var generatorHelpers = require('@asyncapi/generator-helpers');
|
|
6
|
-
var jsxRuntime = require('/home/runner/work/generator/generator/node_modules/react/cjs/react-jsx-runtime.production.min.js');
|
|
7
|
-
|
|
8
|
-
function OperationHeader({
|
|
9
|
-
operation
|
|
10
|
-
}) {
|
|
11
|
-
const operationId = operation.id();
|
|
12
|
-
return /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
|
|
13
|
-
children: `#### \`${operationId}(payload)\`
|
|
14
|
-
${operation.hasSummary() ? operation.summary() : ''}
|
|
15
|
-
${operation.hasDescription() ? `\n${operation.description()}` : ''}`
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function MessageExamples({
|
|
20
|
-
operation
|
|
21
|
-
}) {
|
|
22
|
-
const operationId = operation.id();
|
|
23
|
-
const messageExamples = [];
|
|
24
|
-
const messages = generatorHelpers.getOperationMessages(operation) || [];
|
|
25
|
-
messages.forEach(message => {
|
|
26
|
-
const examples = generatorHelpers.getMessageExamples(message) || [];
|
|
27
|
-
examples.forEach(example => {
|
|
28
|
-
const payload = example.payload();
|
|
29
|
-
messageExamples.push(`\n\n**Example:**\n\`\`\`javascript\nclient.${operationId}(${JSON.stringify(payload, null, 2)});\n\`\`\``);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
return /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
|
|
33
|
-
children: messageExamples.map(example => /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
|
|
34
|
-
children: example
|
|
35
|
-
}))
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function AvailableOperations({
|
|
40
|
-
operations
|
|
41
|
-
}) {
|
|
42
|
-
if (!operations || operations.length === 0) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
46
|
-
children: [/*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
|
|
47
|
-
newLines: 2,
|
|
48
|
-
children: "### Available Operations"
|
|
49
|
-
}), operations.map(operation => /*#__PURE__*/jsxRuntime.jsxs(generatorReactSdk.Text, {
|
|
50
|
-
newLines: 2,
|
|
51
|
-
children: [/*#__PURE__*/jsxRuntime.jsx(OperationHeader, {
|
|
52
|
-
operation: operation
|
|
53
|
-
}), /*#__PURE__*/jsxRuntime.jsx(MessageExamples, {
|
|
54
|
-
operation: operation
|
|
55
|
-
})]
|
|
56
|
-
}))]
|
|
57
|
-
});
|
|
58
|
-
}
|
|
4
|
+
var generatorComponents = require('@asyncapi/generator-components');
|
|
59
5
|
|
|
60
6
|
function README_md ({
|
|
61
7
|
asyncapi,
|
|
62
8
|
params
|
|
63
9
|
}) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const serverUrl = generatorHelpers.getServerUrl(server);
|
|
69
|
-
const operations = asyncapi.operations().all();
|
|
70
|
-
return /*#__PURE__*/jsxRuntime.jsxs(generatorReactSdk.File, {
|
|
71
|
-
name: "README.md",
|
|
72
|
-
children: [/*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
|
|
73
|
-
newLines: 2,
|
|
74
|
-
children: `# ${title}
|
|
75
|
-
|
|
76
|
-
## Overview
|
|
77
|
-
|
|
78
|
-
${info.description() || `A WebSocket client for ${title}.`}
|
|
79
|
-
|
|
80
|
-
- **Version:** ${info.version()}
|
|
81
|
-
- **URL:** ${serverUrl}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
## Client API Reference
|
|
85
|
-
|
|
86
|
-
\`\`\`javascript
|
|
87
|
-
const ${clientName} = require('./${params.clientFileName.replace('.js', '')}');
|
|
88
|
-
const wsClient = new ${clientName}();
|
|
89
|
-
\`\`\`
|
|
90
|
-
|
|
91
|
-
Here the wsClient is an instance of the \`${clientName}\` class.
|
|
92
|
-
### Core Methods
|
|
93
|
-
|
|
94
|
-
#### \`connect()\`
|
|
95
|
-
Establishes a WebSocket connection to the server.
|
|
96
|
-
|
|
97
|
-
#### \`registerMessageHandler(handlerFunction)\`
|
|
98
|
-
Registers a callback to handle incoming messages.
|
|
99
|
-
- **Parameter:** \`handlerFunction\` - This Function takes a parameter \`message\` which is a string.
|
|
100
|
-
|
|
101
|
-
#### \`registerErrorHandler(handlerFunction)\`
|
|
102
|
-
Registers a callback to handle WebSocket errors.
|
|
103
|
-
- **Parameter:** \`handlerFunction\` - This Function takes a parameter \`error\` which is an object
|
|
104
|
-
|
|
105
|
-
#### \`close()\`
|
|
106
|
-
Closes the WebSocket connection.`
|
|
107
|
-
}), /*#__PURE__*/jsxRuntime.jsx(AvailableOperations, {
|
|
108
|
-
operations: operations
|
|
109
|
-
}), /*#__PURE__*/jsxRuntime.jsx(generatorReactSdk.Text, {
|
|
110
|
-
newLines: 2,
|
|
111
|
-
children: `## Testing the client
|
|
112
|
-
|
|
113
|
-
\`\`\`javascript
|
|
114
|
-
const ${clientName} = require('./${params.clientFileName.replace('.js', '')}');
|
|
115
|
-
const wsClient = new ${clientName}();
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
// Example of how custom message handler that operates on incoming messages can look like
|
|
119
|
-
|
|
120
|
-
function myHandler(message) {
|
|
121
|
-
console.log('====================');
|
|
122
|
-
console.log('Just proving I got the message in myHandler:', message);
|
|
123
|
-
console.log('====================');
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Example of custom error handler
|
|
127
|
-
|
|
128
|
-
function myErrorHandler(error) {
|
|
129
|
-
console.error('Errors from Websocket:', error.message);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
async function main() {
|
|
133
|
-
wsClient.registerMessageHandler(myHandler);
|
|
134
|
-
wsClient.registerErrorHandler(myErrorHandler);
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
await wsClient.connect();
|
|
138
|
-
|
|
139
|
-
// Loop to send messages every 5 seconds
|
|
140
|
-
const interval = 5000; // 5 seconds
|
|
141
|
-
const message = 'Hello, Echo!';
|
|
142
|
-
|
|
143
|
-
while (true) {
|
|
144
|
-
try {
|
|
145
|
-
await wsClient.sendEchoMessage(message);
|
|
146
|
-
} catch (error) {
|
|
147
|
-
console.error('Error while sending message:', error);
|
|
148
|
-
}
|
|
149
|
-
// Wait for the interval before sending the next message
|
|
150
|
-
await new Promise(resolve => setTimeout(resolve, interval));
|
|
151
|
-
}
|
|
152
|
-
} catch (error) {
|
|
153
|
-
console.error('Failed to connect to WebSocket:', error.message);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
main();
|
|
158
|
-
\`\`\`
|
|
159
|
-
|
|
160
|
-
`
|
|
161
|
-
})]
|
|
10
|
+
return generatorComponents.Readme({
|
|
11
|
+
asyncapi,
|
|
12
|
+
params,
|
|
13
|
+
language: 'javascript'
|
|
162
14
|
});
|
|
163
15
|
}
|
|
164
16
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"README.md.js","sources":["../../../../../../../../packages/templates/clients/websocket/javascript/
|
|
1
|
+
{"version":3,"file":"README.md.js","sources":["../../../../../../../../packages/templates/clients/websocket/javascript/template/README.md.js"],"sourcesContent":["import { Readme } from '@asyncapi/generator-components';\n\nexport default function({ asyncapi, params }) {\n return Readme({asyncapi, params, language: 'javascript'}); \n}"],"names":["asyncapi","params","Readme","language"],"mappings":";;;;;AAEe,kBAAS,EAAA;EAAEA,QAAQ;AAAEC,EAAAA,MAAAA;AAAO,CAAC,EAAE;AAC5C,EAAA,OAAOC,0BAAM,CAAC;IAACF,QAAQ;IAAEC,MAAM;AAAEE,IAAAA,QAAQ,EAAE,YAAA;AAAY,GAAC,CAAC,CAAA;AAC3D;;;;"}
|