Skip to content

Commit fe13a4c

Browse files
committed
feat(converter): convert to multiple files
1 parent 4b5e9e5 commit fe13a4c

File tree

4 files changed

+66
-10
lines changed

4 files changed

+66
-10
lines changed

src/bin/svg-to-ts.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import * as packgeJSON from '../../package.json';
33
import commander from 'commander';
44
import { Delimiter } from '../lib/generators/generators';
55
import { convertToSingleFile } from '../lib/converters/single-file.converter';
6+
import { convertToMultipleFiles } from '../lib/converters/multiple-files.converter';
67

78
export interface ConvertionOptions {
89
delimiter: Delimiter;
@@ -62,4 +63,5 @@ const convertionOptions = {
6263
outputDirectory
6364
};
6465

65-
convertToSingleFile(convertionOptions);
66+
// convertToSingleFile(convertionOptions);
67+
convertToMultipleFiles(convertionOptions);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import chalk from 'chalk';
2+
import * as path from 'path';
3+
import { svgo } from '../svgo';
4+
5+
import {
6+
generateInterfaceDefinition,
7+
generateSvgConstant,
8+
generateTypeDefinition,
9+
generateTypeName,
10+
generateVariableName
11+
} from '../generators/generators';
12+
import { getFilePathsFromRegex } from '../regex-helpers';
13+
import { extractSvgContent, writeIconsFile } from '../file-helpers';
14+
import { ConvertionOptions } from '../../bin/svg-to-ts';
15+
16+
const typesDelimitor = ' | ';
17+
18+
export const convertToMultipleFiles = async (convertionOptions: ConvertionOptions): Promise<void> => {
19+
const { typeName, prefix, delimiter, interfaceName, outputDirectory, srcFiles, fileName } = convertionOptions;
20+
let svgConstants = '';
21+
let types = generateTypeDefinition(typeName);
22+
23+
try {
24+
const filePaths = await getFilePathsFromRegex(srcFiles);
25+
for (let i = 0; i < filePaths.length; i++) {
26+
const fileNameWithEnding = path.basename(filePaths[i]);
27+
const [filenameWithoutEnding, extension] = fileNameWithEnding.split('.');
28+
29+
if (extension === 'svg') {
30+
const rawSvg = await extractSvgContent(filePaths[i]);
31+
const optimizedSvg = await svgo.optimize(rawSvg);
32+
const variableName = generateVariableName(prefix, filenameWithoutEnding);
33+
const typeName = generateTypeName(filenameWithoutEnding, delimiter);
34+
const svgConstant = generateSvgConstant(variableName, interfaceName, typeName, optimizedSvg.data);
35+
36+
await writeIconsFile(outputDirectory, `${prefix}-${filenameWithoutEnding}.icon`, svgConstant);
37+
38+
svgConstants += svgConstant;
39+
types += i === filePaths.length - 1 ? `'${typeName}';` : `'${typeName}'${typesDelimitor}`;
40+
}
41+
}
42+
43+
/*
44+
if (svgConstants !== '') {
45+
const fileContent = (svgConstants += types += generateInterfaceDefinition(interfaceName, typeName));
46+
await writeIconsFile(outputDirectory, fileName, fileContent);
47+
console.log(
48+
chalk.blue.bold('svg-to-ts:'),
49+
chalk.green('Icons file successfully generated under'),
50+
chalk.green.underline(outputDirectory)
51+
);
52+
}
53+
*/
54+
} catch (error) {
55+
console.log(chalk.blue.bold('svg-to-ts:'), chalk.red('Something went wrong', error));
56+
}
57+
};

src/lib/converters/single-file.converter.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { ConvertionOptions } from '../../bin/svg-to-ts';
1616
const typesDelimitor = ' | ';
1717

1818
export const convertToSingleFile = async (convertionOptions: ConvertionOptions): Promise<void> => {
19-
const { typeName, prefix, delimiter, interfaceName, outputDirectory, srcFiles } = convertionOptions;
19+
const { typeName, prefix, delimiter, interfaceName, outputDirectory, srcFiles, fileName } = convertionOptions;
2020
let svgConstants = '';
2121
let types = generateTypeDefinition(typeName);
2222

@@ -40,7 +40,7 @@ export const convertToSingleFile = async (convertionOptions: ConvertionOptions):
4040

4141
if (svgConstants !== '') {
4242
const fileContent = (svgConstants += types += generateInterfaceDefinition(interfaceName, typeName));
43-
await writeIconsFile(convertionOptions, fileContent);
43+
await writeIconsFile(outputDirectory, fileName, fileContent);
4444
console.log(
4545
chalk.blue.bold('svg-to-ts:'),
4646
chalk.green('Icons file successfully generated under'),

src/lib/file-helpers.ts

+4-7
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,12 @@ export const extractSvgContent = async (filePath: string): Promise<string> => {
1414
return fileContentRaw.replace(/\r?\n|\r/g, ' ');
1515
};
1616

17-
export const writeIconsFile = async (convertionOptions: ConvertionOptions, fileContent: string): Promise<void> => {
17+
export const writeIconsFile = async (outputDirectory: string, fileName: string, fileContent: string): Promise<void> => {
1818
const formatedFileContent = formatContent(fileContent);
19-
if (!fs.existsSync(convertionOptions.outputDirectory)) {
20-
fs.mkdirSync(convertionOptions.outputDirectory);
19+
if (!fs.existsSync(outputDirectory)) {
20+
fs.mkdirSync(outputDirectory);
2121
}
22-
await writeFile(
23-
path.join(convertionOptions.outputDirectory, `${convertionOptions.fileName}.ts`),
24-
formatedFileContent
25-
);
22+
await writeFile(path.join(outputDirectory, `${fileName}.ts`), formatedFileContent);
2623
};
2724

2825
const formatContent = (fileContent: string) =>

0 commit comments

Comments
 (0)