Skip to content

Commit 2686da4

Browse files
committed
refactor: move Requires component to @asyncapi/generator-components
1 parent 3e73842 commit 2686da4

File tree

10 files changed

+131
-52
lines changed

10 files changed

+131
-52
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { Text } from '@asyncapi/generator-react-sdk';
2+
3+
/**
4+
* @typedef {'python' | 'javascript' | 'typescript' | 'java' | 'csharp' | 'rust' | 'dart'} Language
5+
* Supported programming languages.
6+
*/
7+
8+
/**
9+
* Mapping of supported programming languages to their default dependency import statements.
10+
*
11+
* @type {Record<Language, { dependencies: string[] }>}
12+
*/
13+
const dependeciesConfig = {
14+
python: {
15+
dependecies: ['import json', 'import certifi', 'import threading', 'import websocket']
16+
},
17+
javascript: {
18+
dependecies: ['const WebSocket = require(\'ws\');']
19+
},
20+
dart: {
21+
dependecies: ['import \'dart:convert\';', 'import \'package:web_socket_channel/web_socket_channel.dart\';']
22+
}
23+
};
24+
25+
/**
26+
* Renders the top-of-file dependency statements for the selected programming language.
27+
*
28+
* @param {Object} props - Component props.
29+
* @param {Language} props.language - The programming language for which to render dependency statements.
30+
* @param {string[]} [props.additionalDependencies=[]] - Optional additional dependencies to include.
31+
* @returns {JSX.Element} Rendered list of import/require statements.
32+
*/
33+
export function FileDependencies({ language, additionalDependencies = [] }) {
34+
const { dependecies } = dependeciesConfig[language];
35+
const allDependencies = [...dependecies, ...additionalDependencies];
36+
37+
return (
38+
<Text>
39+
<Text>
40+
{allDependencies.join('\n')}
41+
</Text>
42+
</Text>
43+
);
44+
}

packages/components/src/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export { Models } from './components/Models';
2-
export { FileHeaderInfo } from './components/FileHeaderInfo';
2+
export { FileHeaderInfo } from './components/FileHeaderInfo';
3+
export { FileDependencies } from './components/FileDependencies';
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { render } from '@asyncapi/generator-react-sdk';
2+
import { FileDependencies } from '../../src/index';
3+
4+
describe('Testing of FileDependencies function', () => {
5+
test('render js websockets file dependecies correctly', () => {
6+
const result = render(
7+
<FileDependencies
8+
language="javascript"
9+
/>
10+
);
11+
const actual = result.trim();
12+
expect(actual).toMatchSnapshot();
13+
});
14+
15+
test('render python websockets file dependecies correctly', () => {
16+
const result = render(
17+
<FileDependencies
18+
language="python"
19+
/>
20+
);
21+
const actual = result.trim();
22+
expect(actual).toMatchSnapshot();
23+
});
24+
25+
test('render python websockets file dependecies correctly with additionalDependencies', () => {
26+
const result = render(
27+
<FileDependencies
28+
language="python"
29+
additionalDependencies={["import os", "from urllib.parse import urlencode"]}
30+
/>
31+
);
32+
const actual = result.trim();
33+
expect(actual).toMatchSnapshot();
34+
});
35+
36+
test('render dart websockets file dependecies correctly', () => {
37+
const result = render(
38+
<FileDependencies
39+
language="dart"
40+
/>
41+
);
42+
const actual = result.trim();
43+
expect(actual).toMatchSnapshot();
44+
});
45+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`Testing of FileDependencies function render dart websockets file dependecies correctly 1`] = `
4+
"import 'dart:convert';
5+
import 'package:web_socket_channel/web_socket_channel.dart';"
6+
`;
7+
8+
exports[`Testing of FileDependencies function render js websockets file dependecies correctly 1`] = `"const WebSocket = require('ws');"`;
9+
10+
exports[`Testing of FileDependencies function render python websockets file dependecies correctly 1`] = `
11+
"import json
12+
import certifi
13+
import threading
14+
import websocket"
15+
`;
16+
17+
exports[`Testing of FileDependencies function render python websockets file dependecies correctly with additionalDependencies 1`] = `
18+
"import json
19+
import certifi
20+
import threading
21+
import websocket
22+
import os
23+
from urllib.parse import urlencode"
24+
`;

packages/templates/clients/websocket/dart/components/Requires.js

Lines changed: 0 additions & 14 deletions
This file was deleted.

packages/templates/clients/websocket/dart/template/client.dart.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { File } from '@asyncapi/generator-react-sdk';
22
import { getClientName, getServerUrl, getServer, getInfo, getTitle } from '@asyncapi/generator-helpers';
3-
import { FileHeaderInfo } from '@asyncapi/generator-components';
4-
import { Requires } from '../components/Requires';
3+
import { FileHeaderInfo, FileDependencies } from '@asyncapi/generator-components';
54
import { ClientClass } from '../components/ClientClass';
65

76
export default function ({ asyncapi, params }) {
@@ -18,7 +17,7 @@ export default function ({ asyncapi, params }) {
1817
server={server}
1918
language="dart"
2019
/>
21-
<Requires />
20+
<FileDependencies language="dart" />
2221
<ClientClass clientName={clientName} serverUrl={serverUrl} title={title} />
2322
</File>
2423
);

packages/templates/clients/websocket/javascript/components/Requires.js

Lines changed: 0 additions & 12 deletions
This file was deleted.

packages/templates/clients/websocket/javascript/template/client.js.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { File } from '@asyncapi/generator-react-sdk';
22
import { getClientName, getServerUrl, getServer, getInfo, getTitle } from '@asyncapi/generator-helpers';
3-
import { FileHeaderInfo } from '@asyncapi/generator-components';
4-
import { Requires } from '../components/Requires';
3+
import { FileHeaderInfo, FileDependencies } from '@asyncapi/generator-components';
54
import { ClientClass } from '../components/ClientClass';
65

76
export default function ({ asyncapi, params }) {
@@ -18,7 +17,7 @@ export default function ({ asyncapi, params }) {
1817
server={server}
1918
language="javascript"
2019
/>
21-
<Requires />
20+
<FileDependencies language="javascript"/>
2221
<ClientClass clientName={clientName} serverUrl={serverUrl} title={title} sendOperations={sendOperations} />
2322
</File>
2423
);
Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
import { Text } from '@asyncapi/generator-react-sdk';
1+
import { FileDependencies } from '@asyncapi/generator-components';
22

33
export function Requires({ query }) {
4+
const additionalDependencies = [];
5+
if (query) {
6+
additionalDependencies.push('import os');
7+
additionalDependencies.push('from urllib.parse import urlencode');
8+
}
9+
410
return (
5-
<Text>
6-
<Text>
7-
{`import json
8-
import certifi
9-
import threading
10-
import websocket
11-
${query ? 'import os' : ''}
12-
${query ? 'from urllib.parse import urlencode' : ''}`}
13-
</Text>
14-
</Text>
11+
<FileDependencies
12+
language="python"
13+
additionalDependencies={additionalDependencies}
14+
/>
1515
);
16-
}
17-
16+
}

packages/templates/clients/websocket/test/integration-test/__snapshots__/integration.test.js.snap

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1880,8 +1880,6 @@ import certifi
18801880
import threading
18811881
import websocket
18821882
1883-
1884-
18851883
class HoppscotchClient:
18861884
18871885
def __init__(self, url: str = \\"wss://echo-websocket.hoppscotch.io\\"):
@@ -2062,8 +2060,6 @@ import certifi
20622060
import threading
20632061
import websocket
20642062
2065-
2066-
20672063
class HoppscotchEchoWebSocketClient:
20682064
20692065
def __init__(self, url: str = \\"wss://echo-websocket.hoppscotch.io\\"):
@@ -2245,8 +2241,6 @@ import certifi
22452241
import threading
22462242
import websocket
22472243
2248-
2249-
22502244
class PostmanEchoWebSocketClientClient:
22512245
22522246
def __init__(self, url: str = \\"wss://ws.postman-echo.com/raw\\"):

0 commit comments

Comments
 (0)