Skip to content

Commit 4cd5c53

Browse files
committed
feat(completeiconset): add option to configure the name of the complete icon set
#148
1 parent a33d1f8 commit 4cd5c53

14 files changed

+100
-77
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,7 @@ end up there.
365365
| generateTypeObject | boolean | false | generate type object |
366366
| generateEnum | boolean | false | generate enum object |
367367
| exportCompleteIconSet | boolean | false | Specifies if the complete icon set should be exported or not (can be very handy for showcases) |
368+
| completeIconSetName | string | completeIconSet | Name of the generated complete icon set (only effective if exportCompleteIconSet is set to true) |
368369
| prefix | string | myIcon | prefix for the generated svg constants |
369370
| interfaceName | string | MyIcon | name for the generated interface |
370371
| modelFileName | string | my-icons | file name of the generated file |

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@
4545
"start-files:multiple-source": "ts-node ./src/bin/svg-to-ts-files.ts -s './inputfiles/*.svg' -s 'inputfiles-hyphen/*.svg'",
4646
"start-files:customModel": "ts-node ./src/bin/svg-to-ts-files.ts -s './inputfilesRegex/**/*.svg' --modelFileName test-model -t sampleIcon -i SampleIcon",
4747
"start-files:custom": "ts-node ./src/bin/svg-to-ts-files.ts -s './inputfiles/*.svg' -o ./dist -t sampleIcon -i SampleIcon -p sampleIcon --modelFileName icons",
48-
"start-files:custom-complete-icon-set": "ts-node ./src/bin/svg-to-ts.ts --conversionType files -s './inputfiles/*.svg' -o ./dist -t sampleIcon -i SampleIcon -p sampleIcon -f icons --exportCompleteIconSet true",
48+
"start-files:custom-complete-icon-set": "ts-node ./src/bin/svg-to-ts-files.ts -s './inputfiles/*.svg' -o ./dist -t sampleIcon -i SampleIcon -p sampleIcon --modelFileName icons --exportCompleteIconSet true",
49+
"start-files:custom-complete-icon-set-name": "ts-node ./src/bin/svg-to-ts-files.ts -s './inputfiles/*.svg' -o ./dist -t sampleIcon --exportCompleteIconSet true --completeIconSetName 'all-icons'",
4950
"semantic-release": "semantic-release",
5051
"test": "jest --config=./jest.config.js --coverage"
5152
},

src/lib/converters/files.converter.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ import { FilesConversionOptions } from '../options/conversion-options/files-conv
1616

1717
import { filesProcessor, SvgDefinition } from './shared.converter';
1818

19-
const completeIconSetFileName = 'complete-icon-set';
20-
2119
const generateSVGConstants = async (
2220
svgDefinitions: SvgDefinition[],
2321
outputDirectory: string,
@@ -39,10 +37,11 @@ const generateSVGConstants = async (
3937
const generateCompleteIconSet = async (
4038
svgDefinitions: SvgDefinition[],
4139
outputDirectory: string,
42-
iconsFolderName: string
40+
iconsFolderName: string,
41+
completeIconSetName: string
4342
): Promise<void> => {
44-
const completeIconSetContent = generateCompleteIconSetContent(svgDefinitions);
45-
await writeFile(`${outputDirectory}/${iconsFolderName}`, completeIconSetFileName, completeIconSetContent);
43+
const completeIconSetContent = generateCompleteIconSetContent(svgDefinitions, completeIconSetName);
44+
await writeFile(`${outputDirectory}/${iconsFolderName}`, completeIconSetName, completeIconSetContent);
4645
};
4746

4847
const generateModelFile = async (
@@ -91,6 +90,7 @@ export const convertToFiles = async (conversionOptions: FilesConversionOptions):
9190
interfaceName,
9291
compileSources,
9392
exportCompleteIconSet,
93+
completeIconSetName,
9494
barrelFileName
9595
} = conversionOptions;
9696
await callAndMonitorAsync<void>(
@@ -109,10 +109,10 @@ export const convertToFiles = async (conversionOptions: FilesConversionOptions):
109109

110110
if (exportCompleteIconSet) {
111111
await callAndMonitorAsync<void>(
112-
generateCompleteIconSet.bind({}, svgDefinitions, outputDirectory, iconsFolderName),
112+
generateCompleteIconSet.bind({}, svgDefinitions, outputDirectory, iconsFolderName, completeIconSetName),
113113
'Export complete icon set'
114114
);
115-
generatedFileNames.push(completeIconSetFileName);
115+
generatedFileNames.push(completeIconSetName);
116116
}
117117

118118
let indexFileContent = callAndMonitor<string>(

src/lib/helpers/complete-icon-set-helper.spec.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { unformatedString } from './test-helpers';
33

44
describe('Complete Iconset-helper', () => {
55
it('should import all the values and export them as an array', () => {
6+
let completeIconSetName = 'all-icons';
67
const fileNamesWithDefinitions = [
78
{ variableName: 'foo', prefix: 'sampleIcon', filenameWithoutEnding: 'foo' },
89
{ variableName: 'bar', prefix: 'sampleIcon', filenameWithoutEnding: 'bar' },
@@ -13,9 +14,9 @@ describe('Complete Iconset-helper', () => {
1314
import {bar} from './sampleIcon-bar.icon';
1415
import {baz} from './sampleIcon-baz.icon';
1516
16-
export const completeIconSet = [foo, bar, baz];`;
17+
export const allIcons = [foo, bar, baz];`;
1718

18-
const generatedContent = generateCompleteIconSetContent(fileNamesWithDefinitions);
19+
const generatedContent = generateCompleteIconSetContent(fileNamesWithDefinitions, completeIconSetName);
1920
expect(unformatedString(expectedContent)).toEqual(unformatedString(generatedContent));
2021
});
2122
});

src/lib/helpers/complete-icon-set.helper.ts

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
1+
import camelCase from 'lodash.camelcase';
2+
13
import { SvgDefinition } from '../converters/shared.converter';
24
import { generateNamedImportStatement } from '../generators/code-snippet-generators';
35

4-
export const generateCompleteIconSetContent = (svgDefinitions: SvgDefinition[]): string => {
6+
export const generateCompleteIconSetContent = (
7+
svgDefinitions: SvgDefinition[],
8+
completeIconSetName: string
9+
): string => {
510
const importSection = generateImportSection(svgDefinitions);
6-
const exportSection = generateExportSection(svgDefinitions);
11+
const exportSection = generateExportSection(svgDefinitions, completeIconSetName);
712
return `${importSection}${exportSection}`;
813
};
914

@@ -16,12 +21,12 @@ const generateImportSection = (svgDefinitions: SvgDefinition[]): string =>
1621
return acc;
1722
}, '');
1823

19-
const generateExportSection = (svgDefinitions: SvgDefinition[]): string =>
24+
const generateExportSection = (svgDefinitions: SvgDefinition[], completeIconSetName: string): string =>
2025
svgDefinitions.reduce((acc: string, svgDefinition: SvgDefinition, index: number) => {
2126
if (index === svgDefinitions.length - 1) {
2227
acc += `${svgDefinition.variableName}];`;
2328
} else {
2429
acc += `${svgDefinition.variableName},`;
2530
}
2631
return acc;
27-
}, `export const completeIconSet = [`);
32+
}, `export const ${camelCase(completeIconSetName)} = [`);

src/lib/options/commander/file-options.commander.ts

+5
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ export const setupFilesOptionsCommander = () => {
7171
'Specifies if the complete icon set should be exported or not',
7272
DEFAULT_FILES_CONVERSION_OPTIONS.exportCompleteIconSet
7373
)
74+
.option(
75+
'--completeIconSetName <string>',
76+
'The name of the generated complete icon set file',
77+
DEFAULT_FILES_CONVERSION_OPTIONS.completeIconSetName
78+
)
7479
.option(
7580
'--verbose <boolean>',
7681
'Specifies if a verbose log message should be printed or not',

src/lib/options/conversion-options/constant-conversion-options.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@ import { Delimiter } from '../../generators/code-snippet-generators';
22

33
export interface ConstantsConversionOptions {
44
config?: string;
5-
srcFiles: string[];
6-
outputDirectory: string;
5+
srcFiles?: string[];
6+
outputDirectory?: string;
77
svgoConfig?: any;
8-
delimiter: Delimiter;
9-
verbose: boolean;
10-
fileName: string;
11-
typeName: string;
12-
enumName: string;
13-
generateType: boolean;
14-
generateTypeObject: boolean;
15-
generateEnum: boolean;
8+
delimiter?: Delimiter;
9+
verbose?: boolean;
10+
fileName?: string;
11+
typeName?: string;
12+
enumName?: string;
13+
generateType?: boolean;
14+
generateTypeObject?: boolean;
15+
generateEnum?: boolean;
1616
exportCompleteIconSet?: boolean;
17-
prefix: string;
18-
interfaceName: string;
17+
prefix?: string;
18+
interfaceName?: string;
1919
}

src/lib/options/conversion-options/files-conversion-options.ts

+17-16
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,23 @@ import { Delimiter } from '../../generators/code-snippet-generators';
22

33
export interface FilesConversionOptions {
44
config?: string;
5-
srcFiles: string[];
6-
outputDirectory: string;
5+
srcFiles?: string[];
6+
outputDirectory?: string;
77
svgoConfig?: any;
8-
delimiter: Delimiter;
9-
verbose: boolean;
10-
typeName: string;
11-
generateType: boolean;
12-
generateTypeObject: boolean;
13-
generateEnum: boolean;
8+
delimiter?: Delimiter;
9+
verbose?: boolean;
10+
typeName?: string;
11+
generateType?: boolean;
12+
generateTypeObject?: boolean;
13+
generateEnum?: boolean;
1414
exportCompleteIconSet?: boolean;
15-
prefix: string;
16-
interfaceName: string;
17-
enumName: string;
18-
modelFileName: string;
19-
additionalModelOutputPath: string | null;
20-
iconsFolderName: string;
21-
compileSources: boolean;
22-
barrelFileName: string;
15+
completeIconSetName?: string;
16+
prefix?: string;
17+
interfaceName?: string;
18+
enumName?: string;
19+
modelFileName?: string;
20+
additionalModelOutputPath?: string | null;
21+
iconsFolderName?: string;
22+
compileSources?: boolean;
23+
barrelFileName?: string;
2324
}

src/lib/options/conversion-options/object-conversion-options.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import { Delimiter } from '../../generators/code-snippet-generators';
22

33
export interface ObjectConversionOptions {
44
config?: string;
5-
srcFiles: string[];
6-
outputDirectory: string;
5+
srcFiles?: string[];
6+
outputDirectory?: string;
77
svgoConfig?: any;
8-
delimiter: Delimiter;
9-
verbose: boolean;
10-
fileName: string;
11-
objectName: string;
8+
delimiter?: Delimiter;
9+
verbose?: boolean;
10+
fileName?: string;
11+
objectName?: string;
1212
}

src/lib/options/default-options/default-files-conversion-options.ts

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export const DEFAULT_FILES_CONVERSION_OPTIONS: FilesConversionOptions = {
1616
iconsFolderName: 'build',
1717
compileSources: false,
1818
exportCompleteIconSet: false,
19+
completeIconSetName: 'complete-icon-set',
1920
verbose: false,
2021
barrelFileName: 'index',
2122
delimiter: Delimiter.SNAKE

src/lib/options/options-collector/command-line-options-collectors/commandline-files-options.collector.ts

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export const collectCommandLineFileOptions = async (): Promise<FilesConversionOp
2222
iconsFolderName,
2323
additionalModelOutputPath,
2424
exportCompleteIconSet,
25+
completeIconSetName,
2526
compileSources,
2627
verbose
2728
} = commander;
@@ -56,6 +57,7 @@ export const collectCommandLineFileOptions = async (): Promise<FilesConversionOp
5657
modelFileName,
5758
iconsFolderName,
5859
exportCompleteIconSet,
60+
completeIconSetName,
5961
svgoConfig,
6062
additionalModelOutputPath,
6163
compileSources,

src/lib/options/options-collector/config-file-options-collector/config-file-constants-options.collector.ts

+11-11
Original file line numberDiff line numberDiff line change
@@ -35,61 +35,61 @@ export const mergeWithDefaultConstantOptions = async (
3535

3636
if (!configOptions.verbose) {
3737
configOptions.verbose = DEFAULT_CONST_CONVERSION_OPTIONS.verbose;
38-
Logger.verboseInfo(`No "verbose" property provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.verbose}" will be used`);
38+
Logger.verboseInfo(`No 'verbose' property provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.verbose}" will be used`);
3939
}
4040

4141
if (!configOptions.outputDirectory) {
4242
configOptions.outputDirectory = DEFAULT_CONST_CONVERSION_OPTIONS.outputDirectory;
4343
Logger.verboseInfo(
44-
`No outputDirectory provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.outputDirectory}" will be used`
44+
`No 'outputDirectory' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.outputDirectory}" will be used`
4545
);
4646
}
4747

4848
if (!configOptions.srcFiles) {
4949
configOptions.srcFiles = DEFAULT_CONST_CONVERSION_OPTIONS.srcFiles;
50-
Logger.verboseInfo(`No srcFiles provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.srcFiles}" will be used`);
50+
Logger.verboseInfo(`No 'srcFiles' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.srcFiles}" will be used`);
5151
}
5252

5353
if (!configOptions.svgoConfig) {
5454
configOptions.svgoConfig = await getSvgoConfig(configOptions.svgoConfig);
55-
Logger.verboseInfo(`No svgoConfig provided, default configuration of SVGO will be used`);
55+
Logger.verboseInfo(`No 'svgoConfig' provided, default configuration of SVGO will be used`);
5656
}
5757

5858
if (!configOptions.delimiter) {
5959
configOptions.delimiter = DEFAULT_CONST_CONVERSION_OPTIONS.delimiter;
60-
Logger.verboseInfo(`No delimiter provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.delimiter}" will be used`);
60+
Logger.verboseInfo(`No 'delimiter' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.delimiter}" will be used`);
6161
}
6262

6363
if (!configOptions.fileName) {
6464
configOptions.fileName = DEFAULT_CONST_CONVERSION_OPTIONS.fileName;
65-
Logger.verboseInfo(`No fileName provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.fileName}" will be used`);
65+
Logger.verboseInfo(`No 'fileName' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.fileName}" will be used`);
6666
}
6767

6868
if (!configOptions.typeName) {
6969
configOptions.typeName = DEFAULT_CONST_CONVERSION_OPTIONS.typeName;
70-
Logger.verboseInfo(`No typeName provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.typeName}" will be used`);
70+
Logger.verboseInfo(`No 'typeName' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.typeName}" will be used`);
7171
}
7272

7373
if (configOptions.generateType === undefined) {
7474
configOptions.generateType = DEFAULT_CONST_CONVERSION_OPTIONS.generateType;
75-
Logger.verboseInfo(`No generateType provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.generateType}" will be used`);
75+
Logger.verboseInfo(`No 'generateType' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.generateType}" will be used`);
7676
}
7777

7878
if (configOptions.generateTypeObject === undefined) {
7979
configOptions.generateTypeObject = DEFAULT_CONST_CONVERSION_OPTIONS.generateTypeObject;
8080
Logger.verboseInfo(
81-
`No generateTypeObject provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.generateTypeObject}" will be used`
81+
`No 'generateTypeObject' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.generateTypeObject}" will be used`
8282
);
8383
}
8484

8585
if (!configOptions.interfaceName) {
8686
configOptions.interfaceName = DEFAULT_CONST_CONVERSION_OPTIONS.interfaceName;
87-
Logger.verboseInfo(`No interfaceName provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.interfaceName}" will be used`);
87+
Logger.verboseInfo(`No 'interfaceName' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.interfaceName}" will be used`);
8888
}
8989

9090
if (typeof configOptions.prefix !== 'string') {
9191
configOptions.prefix = DEFAULT_CONST_CONVERSION_OPTIONS.prefix;
92-
Logger.verboseInfo(`No prefix provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.prefix}" will be used`);
92+
Logger.verboseInfo(`No 'prefix' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.prefix}" will be used`);
9393
}
9494

9595
return configOptions;

0 commit comments

Comments
 (0)