@@ -6,30 +6,43 @@ import { ObjectConversionOptions } from '../options/conversion-options/object-co
6
6
7
7
import { filesProcessor , SvgDefinition } from './shared.converter' ;
8
8
9
- const generateSVGObject = async (
10
- svgDefinitions : SvgDefinition [ ] ,
11
- objectName : string ,
12
- conversionOptions : ObjectConversionOptions
13
- ) : Promise < string > => {
14
- const svgObject = { } ;
15
- svgDefinitions . forEach ( ( svgDefinition : SvgDefinition ) => ( svgObject [ svgDefinition . typeName ] = svgDefinition . data ) ) ;
16
- const typePatch = generateObjectInterface ( ! objectName , conversionOptions ) ;
17
-
18
- return ! objectName
19
- ? `export default ${ JSON . stringify ( svgObject ) } ${ typePatch } `
20
- : `export const ${ objectName } ${ typePatch } = ${ JSON . stringify ( svgObject ) } ` ;
21
- } ;
22
-
23
- export const convertToSingleObject = async ( conversionOptions : ObjectConversionOptions ) : Promise < void > => {
24
- const { outputDirectory, fileName, objectName } = conversionOptions ;
9
+ export async function convertToSingleObject ( conversionOptions : ObjectConversionOptions ) : Promise < void > {
10
+ const { tsx } = conversionOptions ;
25
11
const svgDefinitions = await callAndMonitorAsync < SvgDefinition [ ] > (
26
12
filesProcessor . bind ( { } , conversionOptions ) ,
27
13
'Processing SVG files'
28
14
) ;
15
+
16
+ if ( tsx ) {
17
+ await generateTSXFile ( svgDefinitions , conversionOptions ) ;
18
+ } else {
19
+ await generateTSFile ( svgDefinitions , conversionOptions ) ;
20
+ }
21
+ }
22
+
23
+ async function generateTSXFile ( svgDefinitions : SvgDefinition [ ] , conversionOptions : ObjectConversionOptions ) {
24
+ const { outputDirectory, fileName, objectName } = conversionOptions ;
25
+
29
26
const fileContent = await callAndMonitorAsync < string > (
30
- generateSVGObject . bind ( { } , svgDefinitions , objectName , conversionOptions ) ,
27
+ generateTSXObject . bind ( { } , svgDefinitions , objectName , conversionOptions ) ,
28
+ 'Generate TSX Object'
29
+ ) ;
30
+
31
+ await callAndMonitorAsync < void > (
32
+ writeFile . bind ( { } , outputDirectory , fileName , `${ fileContent } ` , 'tsx' ) ,
33
+ 'Write content to file'
34
+ ) ;
35
+ Logger . generationSuccess ( outputDirectory ) ;
36
+ }
37
+
38
+ async function generateTSFile ( svgDefinitions : SvgDefinition [ ] , conversionOptions : ObjectConversionOptions ) {
39
+ const { outputDirectory, objectName, fileName } = conversionOptions ;
40
+
41
+ const fileContent = await callAndMonitorAsync < string > (
42
+ generateTSObject . bind ( { } , svgDefinitions , objectName , conversionOptions ) ,
31
43
'Generate SVG Object'
32
44
) ;
45
+
33
46
const typeDefinition = callAndMonitor < string > (
34
47
generateTypeDefinition . bind ( { } , conversionOptions , svgDefinitions ) ,
35
48
'Generate type definitions'
@@ -40,4 +53,29 @@ export const convertToSingleObject = async (conversionOptions: ObjectConversionO
40
53
'Write content to file'
41
54
) ;
42
55
Logger . generationSuccess ( outputDirectory ) ;
43
- } ;
56
+ }
57
+
58
+ async function generateTSObject (
59
+ svgDefinitions : SvgDefinition [ ] ,
60
+ objectName : string ,
61
+ conversionOptions : ObjectConversionOptions
62
+ ) : Promise < string > {
63
+ const svgObject = { } ;
64
+ svgDefinitions . forEach ( ( svgDefinition : SvgDefinition ) => ( svgObject [ svgDefinition . typeName ] = svgDefinition . data ) ) ;
65
+ const typePatch = generateObjectInterface ( ! objectName , conversionOptions ) ;
66
+
67
+ return ! objectName
68
+ ? `export default ${ JSON . stringify ( svgObject ) } ${ typePatch } `
69
+ : `export const ${ objectName } ${ typePatch } = ${ JSON . stringify ( svgObject ) } ` ;
70
+ }
71
+
72
+ async function generateTSXObject ( svgDefinitions : SvgDefinition [ ] , conversionOptions : ObjectConversionOptions ) {
73
+ const { objectName } = conversionOptions ;
74
+ let svgObject = '' ;
75
+ svgDefinitions . forEach ( ( svgDefinition : SvgDefinition ) => {
76
+ const capitalizedTypeName = svgDefinition . typeName . charAt ( 0 ) . toUpperCase ( ) + svgDefinition . typeName . slice ( 1 ) ;
77
+ svgObject += `${ capitalizedTypeName } : () => (${ svgDefinition . data } ),\n` ;
78
+ } ) ;
79
+
80
+ return ! objectName ? `export default {${ svgObject } }` : `export const ${ objectName } = ${ svgObject . toString ( ) } ` ;
81
+ }
0 commit comments