Skip to content

Commit

Permalink
Merge pull request #149 from kreuzerk/feature/configurable-complete-i…
Browse files Browse the repository at this point in the history
…con-set-name

feat(completeiconset): add option to configure the name of the comple…
  • Loading branch information
nivekcode authored Feb 3, 2022
2 parents a33d1f8 + 4cd5c53 commit 07b445a
Show file tree
Hide file tree
Showing 14 changed files with 100 additions and 77 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,7 @@ end up there.
| generateTypeObject | boolean | false | generate type object |
| generateEnum | boolean | false | generate enum object |
| exportCompleteIconSet | boolean | false | Specifies if the complete icon set should be exported or not (can be very handy for showcases) |
| completeIconSetName | string | completeIconSet | Name of the generated complete icon set (only effective if exportCompleteIconSet is set to true) |
| prefix | string | myIcon | prefix for the generated svg constants |
| interfaceName | string | MyIcon | name for the generated interface |
| modelFileName | string | my-icons | file name of the generated file |
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@
"start-files:multiple-source": "ts-node ./src/bin/svg-to-ts-files.ts -s './inputfiles/*.svg' -s 'inputfiles-hyphen/*.svg'",
"start-files:customModel": "ts-node ./src/bin/svg-to-ts-files.ts -s './inputfilesRegex/**/*.svg' --modelFileName test-model -t sampleIcon -i SampleIcon",
"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",
"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",
"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",
"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'",
"semantic-release": "semantic-release",
"test": "jest --config=./jest.config.js --coverage"
},
Expand Down
14 changes: 7 additions & 7 deletions src/lib/converters/files.converter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ import { FilesConversionOptions } from '../options/conversion-options/files-conv

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

const completeIconSetFileName = 'complete-icon-set';

const generateSVGConstants = async (
svgDefinitions: SvgDefinition[],
outputDirectory: string,
Expand All @@ -39,10 +37,11 @@ const generateSVGConstants = async (
const generateCompleteIconSet = async (
svgDefinitions: SvgDefinition[],
outputDirectory: string,
iconsFolderName: string
iconsFolderName: string,
completeIconSetName: string
): Promise<void> => {
const completeIconSetContent = generateCompleteIconSetContent(svgDefinitions);
await writeFile(`${outputDirectory}/${iconsFolderName}`, completeIconSetFileName, completeIconSetContent);
const completeIconSetContent = generateCompleteIconSetContent(svgDefinitions, completeIconSetName);
await writeFile(`${outputDirectory}/${iconsFolderName}`, completeIconSetName, completeIconSetContent);
};

const generateModelFile = async (
Expand Down Expand Up @@ -91,6 +90,7 @@ export const convertToFiles = async (conversionOptions: FilesConversionOptions):
interfaceName,
compileSources,
exportCompleteIconSet,
completeIconSetName,
barrelFileName
} = conversionOptions;
await callAndMonitorAsync<void>(
Expand All @@ -109,10 +109,10 @@ export const convertToFiles = async (conversionOptions: FilesConversionOptions):

if (exportCompleteIconSet) {
await callAndMonitorAsync<void>(
generateCompleteIconSet.bind({}, svgDefinitions, outputDirectory, iconsFolderName),
generateCompleteIconSet.bind({}, svgDefinitions, outputDirectory, iconsFolderName, completeIconSetName),
'Export complete icon set'
);
generatedFileNames.push(completeIconSetFileName);
generatedFileNames.push(completeIconSetName);
}

let indexFileContent = callAndMonitor<string>(
Expand Down
5 changes: 3 additions & 2 deletions src/lib/helpers/complete-icon-set-helper.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { unformatedString } from './test-helpers';

describe('Complete Iconset-helper', () => {
it('should import all the values and export them as an array', () => {
let completeIconSetName = 'all-icons';
const fileNamesWithDefinitions = [
{ variableName: 'foo', prefix: 'sampleIcon', filenameWithoutEnding: 'foo' },
{ variableName: 'bar', prefix: 'sampleIcon', filenameWithoutEnding: 'bar' },
Expand All @@ -13,9 +14,9 @@ describe('Complete Iconset-helper', () => {
import {bar} from './sampleIcon-bar.icon';
import {baz} from './sampleIcon-baz.icon';
export const completeIconSet = [foo, bar, baz];`;
export const allIcons = [foo, bar, baz];`;

const generatedContent = generateCompleteIconSetContent(fileNamesWithDefinitions);
const generatedContent = generateCompleteIconSetContent(fileNamesWithDefinitions, completeIconSetName);
expect(unformatedString(expectedContent)).toEqual(unformatedString(generatedContent));
});
});
13 changes: 9 additions & 4 deletions src/lib/helpers/complete-icon-set.helper.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
import camelCase from 'lodash.camelcase';

import { SvgDefinition } from '../converters/shared.converter';
import { generateNamedImportStatement } from '../generators/code-snippet-generators';

export const generateCompleteIconSetContent = (svgDefinitions: SvgDefinition[]): string => {
export const generateCompleteIconSetContent = (
svgDefinitions: SvgDefinition[],
completeIconSetName: string
): string => {
const importSection = generateImportSection(svgDefinitions);
const exportSection = generateExportSection(svgDefinitions);
const exportSection = generateExportSection(svgDefinitions, completeIconSetName);
return `${importSection}${exportSection}`;
};

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

const generateExportSection = (svgDefinitions: SvgDefinition[]): string =>
const generateExportSection = (svgDefinitions: SvgDefinition[], completeIconSetName: string): string =>
svgDefinitions.reduce((acc: string, svgDefinition: SvgDefinition, index: number) => {
if (index === svgDefinitions.length - 1) {
acc += `${svgDefinition.variableName}];`;
} else {
acc += `${svgDefinition.variableName},`;
}
return acc;
}, `export const completeIconSet = [`);
}, `export const ${camelCase(completeIconSetName)} = [`);
5 changes: 5 additions & 0 deletions src/lib/options/commander/file-options.commander.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ export const setupFilesOptionsCommander = () => {
'Specifies if the complete icon set should be exported or not',
DEFAULT_FILES_CONVERSION_OPTIONS.exportCompleteIconSet
)
.option(
'--completeIconSetName <string>',
'The name of the generated complete icon set file',
DEFAULT_FILES_CONVERSION_OPTIONS.completeIconSetName
)
.option(
'--verbose <boolean>',
'Specifies if a verbose log message should be printed or not',
Expand Down
24 changes: 12 additions & 12 deletions src/lib/options/conversion-options/constant-conversion-options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@ import { Delimiter } from '../../generators/code-snippet-generators';

export interface ConstantsConversionOptions {
config?: string;
srcFiles: string[];
outputDirectory: string;
srcFiles?: string[];
outputDirectory?: string;
svgoConfig?: any;
delimiter: Delimiter;
verbose: boolean;
fileName: string;
typeName: string;
enumName: string;
generateType: boolean;
generateTypeObject: boolean;
generateEnum: boolean;
delimiter?: Delimiter;
verbose?: boolean;
fileName?: string;
typeName?: string;
enumName?: string;
generateType?: boolean;
generateTypeObject?: boolean;
generateEnum?: boolean;
exportCompleteIconSet?: boolean;
prefix: string;
interfaceName: string;
prefix?: string;
interfaceName?: string;
}
33 changes: 17 additions & 16 deletions src/lib/options/conversion-options/files-conversion-options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,23 @@ import { Delimiter } from '../../generators/code-snippet-generators';

export interface FilesConversionOptions {
config?: string;
srcFiles: string[];
outputDirectory: string;
srcFiles?: string[];
outputDirectory?: string;
svgoConfig?: any;
delimiter: Delimiter;
verbose: boolean;
typeName: string;
generateType: boolean;
generateTypeObject: boolean;
generateEnum: boolean;
delimiter?: Delimiter;
verbose?: boolean;
typeName?: string;
generateType?: boolean;
generateTypeObject?: boolean;
generateEnum?: boolean;
exportCompleteIconSet?: boolean;
prefix: string;
interfaceName: string;
enumName: string;
modelFileName: string;
additionalModelOutputPath: string | null;
iconsFolderName: string;
compileSources: boolean;
barrelFileName: string;
completeIconSetName?: string;
prefix?: string;
interfaceName?: string;
enumName?: string;
modelFileName?: string;
additionalModelOutputPath?: string | null;
iconsFolderName?: string;
compileSources?: boolean;
barrelFileName?: string;
}
12 changes: 6 additions & 6 deletions src/lib/options/conversion-options/object-conversion-options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import { Delimiter } from '../../generators/code-snippet-generators';

export interface ObjectConversionOptions {
config?: string;
srcFiles: string[];
outputDirectory: string;
srcFiles?: string[];
outputDirectory?: string;
svgoConfig?: any;
delimiter: Delimiter;
verbose: boolean;
fileName: string;
objectName: string;
delimiter?: Delimiter;
verbose?: boolean;
fileName?: string;
objectName?: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export const DEFAULT_FILES_CONVERSION_OPTIONS: FilesConversionOptions = {
iconsFolderName: 'build',
compileSources: false,
exportCompleteIconSet: false,
completeIconSetName: 'complete-icon-set',
verbose: false,
barrelFileName: 'index',
delimiter: Delimiter.SNAKE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export const collectCommandLineFileOptions = async (): Promise<FilesConversionOp
iconsFolderName,
additionalModelOutputPath,
exportCompleteIconSet,
completeIconSetName,
compileSources,
verbose
} = commander;
Expand Down Expand Up @@ -56,6 +57,7 @@ export const collectCommandLineFileOptions = async (): Promise<FilesConversionOp
modelFileName,
iconsFolderName,
exportCompleteIconSet,
completeIconSetName,
svgoConfig,
additionalModelOutputPath,
compileSources,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,61 +35,61 @@ export const mergeWithDefaultConstantOptions = async (

if (!configOptions.verbose) {
configOptions.verbose = DEFAULT_CONST_CONVERSION_OPTIONS.verbose;
Logger.verboseInfo(`No "verbose" property provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.verbose}" will be used`);
Logger.verboseInfo(`No 'verbose' property provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.verbose}" will be used`);
}

if (!configOptions.outputDirectory) {
configOptions.outputDirectory = DEFAULT_CONST_CONVERSION_OPTIONS.outputDirectory;
Logger.verboseInfo(
`No outputDirectory provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.outputDirectory}" will be used`
`No 'outputDirectory' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.outputDirectory}" will be used`
);
}

if (!configOptions.srcFiles) {
configOptions.srcFiles = DEFAULT_CONST_CONVERSION_OPTIONS.srcFiles;
Logger.verboseInfo(`No srcFiles provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.srcFiles}" will be used`);
Logger.verboseInfo(`No 'srcFiles' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.srcFiles}" will be used`);
}

if (!configOptions.svgoConfig) {
configOptions.svgoConfig = await getSvgoConfig(configOptions.svgoConfig);
Logger.verboseInfo(`No svgoConfig provided, default configuration of SVGO will be used`);
Logger.verboseInfo(`No 'svgoConfig' provided, default configuration of SVGO will be used`);
}

if (!configOptions.delimiter) {
configOptions.delimiter = DEFAULT_CONST_CONVERSION_OPTIONS.delimiter;
Logger.verboseInfo(`No delimiter provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.delimiter}" will be used`);
Logger.verboseInfo(`No 'delimiter' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.delimiter}" will be used`);
}

if (!configOptions.fileName) {
configOptions.fileName = DEFAULT_CONST_CONVERSION_OPTIONS.fileName;
Logger.verboseInfo(`No fileName provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.fileName}" will be used`);
Logger.verboseInfo(`No 'fileName' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.fileName}" will be used`);
}

if (!configOptions.typeName) {
configOptions.typeName = DEFAULT_CONST_CONVERSION_OPTIONS.typeName;
Logger.verboseInfo(`No typeName provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.typeName}" will be used`);
Logger.verboseInfo(`No 'typeName' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.typeName}" will be used`);
}

if (configOptions.generateType === undefined) {
configOptions.generateType = DEFAULT_CONST_CONVERSION_OPTIONS.generateType;
Logger.verboseInfo(`No generateType provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.generateType}" will be used`);
Logger.verboseInfo(`No 'generateType' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.generateType}" will be used`);
}

if (configOptions.generateTypeObject === undefined) {
configOptions.generateTypeObject = DEFAULT_CONST_CONVERSION_OPTIONS.generateTypeObject;
Logger.verboseInfo(
`No generateTypeObject provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.generateTypeObject}" will be used`
`No 'generateTypeObject' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.generateTypeObject}" will be used`
);
}

if (!configOptions.interfaceName) {
configOptions.interfaceName = DEFAULT_CONST_CONVERSION_OPTIONS.interfaceName;
Logger.verboseInfo(`No interfaceName provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.interfaceName}" will be used`);
Logger.verboseInfo(`No 'interfaceName' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.interfaceName}" will be used`);
}

if (typeof configOptions.prefix !== 'string') {
configOptions.prefix = DEFAULT_CONST_CONVERSION_OPTIONS.prefix;
Logger.verboseInfo(`No prefix provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.prefix}" will be used`);
Logger.verboseInfo(`No 'prefix' provided, "${DEFAULT_CONST_CONVERSION_OPTIONS.prefix}" will be used`);
}

return configOptions;
Expand Down
Loading

0 comments on commit 07b445a

Please sign in to comment.