Skip to content

Commit 0f59a83

Browse files
committed
feat(precompilation): add flag to precompile sources
1 parent b8e2fa1 commit 0f59a83

8 files changed

+45
-6
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"prebuild": "npm run copy:readme",
1414
"start": "ts-node ./src/bin/svg-to-ts.ts -s './inputfiles/*.svg'",
1515
"start:ofl": "ts-node ./src/bin/svg-to-ts.ts -s './inputfiles/*.svg' --optimizeForLazyLoading true",
16+
"start:ofl:preCompile": "ts-node ./src/bin/svg-to-ts.ts -s './inputfiles/*.svg' --optimizeForLazyLoading true --preCompileSources true",
1617
"start:help": "ts-node ./src/bin/svg-to-ts.ts -h",
1718
"start:regex": "ts-node ./src/bin/svg-to-ts.ts -s './inputfilesRegex/**/*.svg'",
1819
"start:kebap": "ts-node ./src/bin/svg-to-ts.ts -s './inputfiles/*.svg' -d KEBAB",

src/bin/svg-to-ts.ts

+5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ commander
3939
'Name of the folder the icons will be generated to (only necessary when optimizeForLazyLoading option is enabled)',
4040
DEFAULT_OPTIONS.iconsFolderName
4141
)
42+
.option(
43+
'--preCompileSources <boolean>',
44+
'Tells if the sources should be precompiled with the TypeScript compiler. If true, you will only end up with d.ts and js files',
45+
DEFAULT_OPTIONS.preCompileSources
46+
)
4247
.parse(process.argv);
4348

4449
printLogo();
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import * as ts from 'typescript';
2+
3+
export const compileSources = (filePaths: string[]): void => {
4+
const compilerOptions = {
5+
noEmitOnError: false,
6+
noImplicitAny: true,
7+
declaration: true,
8+
moduleResolution: ts.ModuleResolutionKind.NodeJs,
9+
target: ts.ScriptTarget.ESNext,
10+
module: ts.ModuleKind.ESNext
11+
};
12+
ts.createProgram(filePaths, compilerOptions).emit();
13+
};

src/lib/converters/multiple-files.converter.ts

+15-3
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ import {
99
generateVariableName
1010
} from '../generators/code-snippet-generators';
1111
import { getFilePathsFromRegex } from '../helpers/regex-helpers';
12-
import { deleteFolder, extractSvgContent, writeFile } from '../helpers/file-helpers';
12+
import { deleteFiles, deleteFolder, extractSvgContent, writeFile } from '../helpers/file-helpers';
1313
import { info, separatorEnd, separatorStart, success } from '../helpers/log-helper';
1414
import { svgOptimizer } from '../helpers/svg-optimization';
1515
import { MultiFileConvertionOptions } from '../options/convertion-options';
16+
import { compileSources } from '../compiler/typescript-compiler';
1617

1718
const typesDelimitor = ' | ';
1819

@@ -25,7 +26,8 @@ export const convertToMultipleFiles = async (convertionOptions: MultiFileConvert
2526
outputDirectory,
2627
srcFiles,
2728
modelFileName,
28-
iconsFolderName
29+
iconsFolderName,
30+
preCompileSources
2931
} = convertionOptions;
3032
let indexFileContent = '';
3133
let types = generateTypeDefinition(typeName);
@@ -57,7 +59,6 @@ export const convertToMultipleFiles = async (convertionOptions: MultiFileConvert
5759
indexFileContent += generateExportStatement(generatedFileName, iconsFolderName);
5860
await writeFile(`${outputDirectory}/${iconsFolderName}`, generatedFileName, svgConstant);
5961
info(`write file svg: ${outputDirectory}/${iconsFolderName}/${generatedFileName}.ts`);
60-
6162
types += i === filePaths.length - 1 ? `'${typeName}';` : `'${typeName}'${typesDelimitor}`;
6263
}
6364
}
@@ -72,6 +73,17 @@ export const convertToMultipleFiles = async (convertionOptions: MultiFileConvert
7273
info(`model-file successfully generated under ${outputDirectory}/${iconsFolderName}/${modelFileName}.ts`);
7374
}
7475

76+
if (preCompileSources) {
77+
const generatedTypeScriptFilePaths = await getFilePathsFromRegex([
78+
`${outputDirectory}/${iconsFolderName}/*.ts`,
79+
`${outputDirectory}/index.ts`
80+
]);
81+
compileSources(generatedTypeScriptFilePaths);
82+
info(`compile Typescript - generate JS and d.ts`);
83+
deleteFiles(generatedTypeScriptFilePaths);
84+
info(`delete Typescript files`);
85+
}
86+
7587
success('========================================================');
7688
success(`your files were successfully created under: ${outputDirectory}`);
7789
success(

src/lib/options/args-collector.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ export const collectArgumentOptions = (): SingleFileConvertionOptions | MultiFil
1212
typeName,
1313
modelFileName,
1414
iconsFolderName,
15-
optimizeForLazyLoading
15+
optimizeForLazyLoading,
16+
preCompileSources
1617
} = commander;
1718

1819
// Because of commander adding default value to params
@@ -32,6 +33,7 @@ export const collectArgumentOptions = (): SingleFileConvertionOptions | MultiFil
3233
typeName,
3334
modelFileName,
3435
iconsFolderName,
35-
optimizeForLazyLoading
36+
optimizeForLazyLoading,
37+
preCompileSources
3638
};
3739
};

src/lib/options/config-collector.ts

+4
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ const mergeWithDefaults = (
5858
info(`No iconsFolderName provided, "${DEFAULT_OPTIONS.iconsFolderName}" will be used`);
5959
}
6060

61+
if (!(configOptions as MultiFileConvertionOptions).preCompileSources) {
62+
(configOptions as MultiFileConvertionOptions).preCompileSources = DEFAULT_OPTIONS.preCompileSources;
63+
info(`No preCompileSources flag provided, "${DEFAULT_OPTIONS.preCompileSources}" will be used`);
64+
}
6165
return configOptions as MultiFileConvertionOptions;
6266
} else {
6367
if (!(configOptions as SingleFileConvertionOptions).fileName) {

src/lib/options/convertion-options.ts

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export interface SingleFileConvertionOptions extends ConvertionOptions {
2020
export interface MultiFileConvertionOptions extends ConvertionOptions {
2121
modelFileName: string;
2222
iconsFolderName: string;
23+
preCompileSources: boolean;
2324
}
2425

2526
export const getOptions = (): MultiFileConvertionOptions | SingleFileConvertionOptions => {

src/lib/options/default-options.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ export const DEFAULT_OPTIONS = {
1313
optimizeForLazyLoading: false,
1414
modelOutputPath: DEFAULT_OUTPUT_PATH,
1515
modelFileName: 'my-icons.model',
16-
iconsFolderName: 'build'
16+
iconsFolderName: 'build',
17+
preCompileSources: false
1718
};

0 commit comments

Comments
 (0)