@@ -6,82 +6,66 @@ import {
6
6
generateSvgConstant ,
7
7
generateTypeDefinition ,
8
8
generateTypeHelperWithImport
9
- } from '../generators/code-snippet-generators' ;
9
+ , generateTSXConstant } from '../generators/code-snippet-generators' ;
10
10
import { generateCompleteIconSetContent } from '../helpers/complete-icon-set.helper' ;
11
11
import { deleteFiles , deleteFolder , writeFile } from '../helpers/file-helpers' ;
12
12
import { Logger } from '../helpers/logger' ;
13
13
import { callAndMonitor , callAndMonitorAsync } from '../helpers/monitor' ;
14
14
import { getFilePathsFromRegex } from '../helpers/regex-helpers' ;
15
15
import { FilesConversionOptions } from '../options/conversion-options/files-conversion-options' ;
16
+ import { FILE_TYPE } from '../shared/file-type.model' ;
16
17
17
18
import { filesProcessor , SvgDefinition } from './shared.converter' ;
18
19
19
- const generateSVGConstants = async (
20
- svgDefinitions : SvgDefinition [ ] ,
21
- outputDirectory : string ,
22
- iconsFolderName : string
23
- ) : Promise < string [ ] > => {
24
- const generatedFileNames : string [ ] = [ ] ;
25
- await Promise . all (
26
- svgDefinitions . map ( async svgDefinition => {
27
- const svgConstant = generateSvgConstant ( svgDefinition . variableName , svgDefinition . typeName , svgDefinition . data ) ;
28
- const generatedFileName = `${ svgDefinition . prefix } -${ svgDefinition . filenameWithoutEnding } .icon` ;
29
- generatedFileNames . push ( generatedFileName ) ;
30
- await writeFile ( `${ outputDirectory } /${ iconsFolderName } ` , generatedFileName , svgConstant ) ;
31
- Logger . verboseInfo ( `write file svg: ${ outputDirectory } /${ iconsFolderName } /${ generatedFileName } .ts` ) ;
32
- } )
33
- ) ;
34
- return generatedFileNames ;
20
+ export const convertToFiles = async ( conversionOptions : FilesConversionOptions ) : Promise < void > => {
21
+ const { tsx } = conversionOptions ;
22
+ if ( tsx ) {
23
+ await generateTSXFiles ( conversionOptions ) ;
24
+ } else {
25
+ await generateTSFiles ( conversionOptions ) ;
26
+ }
35
27
} ;
36
28
37
- const generateCompleteIconSet = async (
38
- svgDefinitions : SvgDefinition [ ] ,
39
- outputDirectory : string ,
40
- iconsFolderName : string ,
41
- completeIconSetName : string
42
- ) : Promise < void > => {
43
- const completeIconSetContent = generateCompleteIconSetContent ( svgDefinitions , completeIconSetName ) ;
44
- await writeFile ( `${ outputDirectory } /${ iconsFolderName } ` , completeIconSetName , completeIconSetContent ) ;
45
- } ;
29
+ async function generateTSXFiles ( conversionOptions : FilesConversionOptions ) {
30
+ const {
31
+ outputDirectory,
32
+ iconsFolderName,
33
+ exportCompleteIconSet,
34
+ completeIconSetName,
35
+ barrelFileName
36
+ } = conversionOptions ;
46
37
47
- const generateModelFile = async (
48
- conversionOptions : FilesConversionOptions ,
49
- svgDefinitions : SvgDefinition [ ]
50
- ) : Promise < string > => {
51
- const { outputDirectory, modelFileName, additionalModelOutputPath, iconsFolderName } = conversionOptions ;
38
+ const svgDefinitions = await callAndMonitorAsync < SvgDefinition [ ] > (
39
+ filesProcessor . bind ( { } , conversionOptions ) ,
40
+ 'Processing SVG files'
41
+ ) ;
52
42
53
- const typeDefinition = generateTypeDefinition ( conversionOptions , svgDefinitions ) ;
54
- const enumDefinition = generateEnumDefinition ( conversionOptions , svgDefinitions ) ;
55
- const interfaceDefinition = generateInterfaceDefinition ( conversionOptions ) ;
56
- const modelFile = `${ typeDefinition } ${ interfaceDefinition } ${ enumDefinition } ` ;
57
- await writeFile ( `${ outputDirectory } /${ iconsFolderName } ` , modelFileName , modelFile ) ;
58
- Logger . verboseInfo (
59
- `model-file successfully generated under ${ outputDirectory } /${ iconsFolderName } /${ modelFileName } .ts`
43
+ const generatedFileNames = await callAndMonitorAsync < string [ ] > (
44
+ generateTSXFileConstants . bind ( { } , svgDefinitions , outputDirectory , iconsFolderName ) ,
45
+ 'Generate TSX constants'
60
46
) ;
61
47
62
- if ( additionalModelOutputPath ) {
63
- await writeFile ( ` ${ additionalModelOutputPath } ` , modelFileName , modelFile ) ;
64
- Logger . verboseInfo (
65
- `additional model-file successfully generated under ${ additionalModelOutputPath } / ${ modelFileName } .ts`
48
+ if ( exportCompleteIconSet ) {
49
+ await callAndMonitorAsync < void > (
50
+ generateCompleteIconSet . bind ( { } , svgDefinitions , outputDirectory , iconsFolderName , completeIconSetName ) ,
51
+ 'Export complete icon set'
66
52
) ;
53
+ generatedFileNames . push ( completeIconSetName ) ;
67
54
}
68
- return modelFile ;
69
- } ;
70
55
71
- const compileTypeScriptToJS = async (
72
- outputDirectory : string ,
73
- iconsFolderName : string ,
74
- barrelFileName : string
75
- ) : Promise < void > => {
76
- const generatedTypeScriptFilePaths = await getFilePathsFromRegex ( [
77
- `${ outputDirectory } /${ iconsFolderName } /*.ts` ,
78
- `${ outputDirectory } /${ barrelFileName } .ts`
79
- ] ) ;
80
- compile ( generatedTypeScriptFilePaths ) ;
81
- deleteFiles ( generatedTypeScriptFilePaths ) ;
82
- } ;
56
+ const indexFileContent = generatedFileNames
57
+ . map ( ( generatedFileName : string ) => generateExportStatement ( generatedFileName , iconsFolderName ) )
58
+ . join ( '' ) ;
83
59
84
- export const convertToFiles = async ( conversionOptions : FilesConversionOptions ) : Promise < void > => {
60
+ await callAndMonitorAsync < void > (
61
+ writeFile . bind ( { } , outputDirectory , barrelFileName , indexFileContent ) ,
62
+ 'Generate barrel file'
63
+ ) ;
64
+
65
+ Logger . generationSuccess ( outputDirectory ) ;
66
+ }
67
+
68
+ async function generateTSFiles ( conversionOptions : FilesConversionOptions ) {
85
69
const {
86
70
outputDirectory,
87
71
modelFileName,
@@ -151,4 +135,87 @@ export const convertToFiles = async (conversionOptions: FilesConversionOptions):
151
135
) ;
152
136
}
153
137
Logger . generationSuccess ( outputDirectory ) ;
138
+ }
139
+
140
+ const generateSVGConstants = async (
141
+ svgDefinitions : SvgDefinition [ ] ,
142
+ outputDirectory : string ,
143
+ iconsFolderName : string
144
+ ) : Promise < string [ ] > => {
145
+ const generatedFileNames : string [ ] = [ ] ;
146
+ await Promise . all (
147
+ svgDefinitions . map ( async svgDefinition => {
148
+ const svgConstant = generateSvgConstant ( svgDefinition . variableName , svgDefinition . typeName , svgDefinition . data ) ;
149
+ const generatedFileName = `${ svgDefinition . prefix } -${ svgDefinition . filenameWithoutEnding } .icon` ;
150
+ generatedFileNames . push ( generatedFileName ) ;
151
+ await writeFile ( `${ outputDirectory } /${ iconsFolderName } ` , generatedFileName , svgConstant ) ;
152
+ Logger . verboseInfo ( `write file svg: ${ outputDirectory } /${ iconsFolderName } /${ generatedFileName } .ts` ) ;
153
+ } )
154
+ ) ;
155
+ return generatedFileNames ;
156
+ } ;
157
+
158
+ const generateTSXFileConstants = async (
159
+ svgDefinitions : SvgDefinition [ ] ,
160
+ outputDirectory : string ,
161
+ iconsFolderName : string
162
+ ) : Promise < string [ ] > => {
163
+ const generatedFileNames : string [ ] = [ ] ;
164
+ await Promise . all (
165
+ svgDefinitions . map ( async svgDefinition => {
166
+ const tsxConstant = generateTSXConstant ( svgDefinition . variableName , svgDefinition . data ) ;
167
+ const generatedFileName = `${ svgDefinition . prefix } -${ svgDefinition . filenameWithoutEnding } .icon` ;
168
+ generatedFileNames . push ( generatedFileName ) ;
169
+ await writeFile ( `${ outputDirectory } /${ iconsFolderName } ` , generatedFileName , tsxConstant , FILE_TYPE . TSX ) ;
170
+ Logger . verboseInfo ( `write file svg: ${ outputDirectory } /${ iconsFolderName } /${ generatedFileName } .tsx` ) ;
171
+ } )
172
+ ) ;
173
+ return generatedFileNames ;
174
+ } ;
175
+
176
+ const generateCompleteIconSet = async (
177
+ svgDefinitions : SvgDefinition [ ] ,
178
+ outputDirectory : string ,
179
+ iconsFolderName : string ,
180
+ completeIconSetName : string
181
+ ) : Promise < void > => {
182
+ const completeIconSetContent = generateCompleteIconSetContent ( svgDefinitions , completeIconSetName ) ;
183
+ await writeFile ( `${ outputDirectory } /${ iconsFolderName } ` , completeIconSetName , completeIconSetContent ) ;
184
+ } ;
185
+
186
+ const generateModelFile = async (
187
+ conversionOptions : FilesConversionOptions ,
188
+ svgDefinitions : SvgDefinition [ ]
189
+ ) : Promise < string > => {
190
+ const { outputDirectory, modelFileName, additionalModelOutputPath, iconsFolderName } = conversionOptions ;
191
+
192
+ const typeDefinition = generateTypeDefinition ( conversionOptions , svgDefinitions ) ;
193
+ const enumDefinition = generateEnumDefinition ( conversionOptions , svgDefinitions ) ;
194
+ const interfaceDefinition = generateInterfaceDefinition ( conversionOptions ) ;
195
+ const modelFile = `${ typeDefinition } ${ interfaceDefinition } ${ enumDefinition } ` ;
196
+ await writeFile ( `${ outputDirectory } /${ iconsFolderName } ` , modelFileName , modelFile ) ;
197
+ Logger . verboseInfo (
198
+ `model-file successfully generated under ${ outputDirectory } /${ iconsFolderName } /${ modelFileName } .ts`
199
+ ) ;
200
+
201
+ if ( additionalModelOutputPath ) {
202
+ await writeFile ( `${ additionalModelOutputPath } ` , modelFileName , modelFile ) ;
203
+ Logger . verboseInfo (
204
+ `additional model-file successfully generated under ${ additionalModelOutputPath } /${ modelFileName } .ts`
205
+ ) ;
206
+ }
207
+ return modelFile ;
208
+ } ;
209
+
210
+ const compileTypeScriptToJS = async (
211
+ outputDirectory : string ,
212
+ iconsFolderName : string ,
213
+ barrelFileName : string
214
+ ) : Promise < void > => {
215
+ const generatedTypeScriptFilePaths = await getFilePathsFromRegex ( [
216
+ `${ outputDirectory } /${ iconsFolderName } /*.ts` ,
217
+ `${ outputDirectory } /${ barrelFileName } .ts`
218
+ ] ) ;
219
+ compile ( generatedTypeScriptFilePaths ) ;
220
+ deleteFiles ( generatedTypeScriptFilePaths ) ;
154
221
} ;
0 commit comments