Move cli code to Typescript
This commit is contained in:
		| @@ -1,80 +1,3 @@ | |||||||
| #! /usr/bin/env node | #! /usr/bin/env node | ||||||
|  |  | ||||||
| const Extractor = require('../dist/extractor').Extractor; | require('../dist/cli/extract'); | ||||||
| const PipeParser = require('../dist/parsers/pipe.parser').PipeParser; |  | ||||||
| const DirectiveParser = require('../dist/parsers/directive.parser').DirectiveParser; |  | ||||||
| const ServiceParser = require('../dist/parsers/service.parser').ServiceParser; |  | ||||||
| const JsonCompiler = require('../dist/compilers/json.compiler').JsonCompiler; |  | ||||||
| const PoCompiler = require('../dist/compilers/po.compiler').PoCompiler |  | ||||||
|  |  | ||||||
| const fs = require('fs'); |  | ||||||
| const path = require('path'); |  | ||||||
| const cli = require('cli'); |  | ||||||
|  |  | ||||||
| const options = cli.parse({ |  | ||||||
| 	dir: ['d', 'Directory path you would like to extract strings from', 'dir', process.env.PWD], |  | ||||||
| 	output: ['o', 'Directory path you would like to save extracted strings', 'dir', process.env.PWD], |  | ||||||
| 	format: ['f', 'Output format', ['json', 'pot'], 'json'], |  | ||||||
| 	replace: ['r', 'Replace the contents of output file if it exists (merging by default)', 'boolean', false], |  | ||||||
| 	clean: ['c', 'Remove unused keys when merging', 'boolean', false] |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| [options.dir, options.output].forEach(dir => { |  | ||||||
| 	if (!fs.existsSync(dir)) { |  | ||||||
| 		cli.fatal('The directory path you supplied was not found: ' + dir); |  | ||||||
| 	} |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| const filename = 'template.' + options.format; |  | ||||||
| const dest = path.join(options.output, filename); |  | ||||||
|  |  | ||||||
| const parsers = [ |  | ||||||
| 	new PipeParser(), |  | ||||||
| 	new DirectiveParser(), |  | ||||||
| 	new ServiceParser() |  | ||||||
| ]; |  | ||||||
| const patterns = [ |  | ||||||
| 	'/**/*.html', |  | ||||||
| 	'/**/*.ts', |  | ||||||
| 	'/**/*.js' |  | ||||||
| ]; |  | ||||||
|  |  | ||||||
| const extractor = new Extractor(parsers, patterns); |  | ||||||
|  |  | ||||||
| try { |  | ||||||
| 	cli.info(`Extracting strings from '${options.dir}'`); |  | ||||||
| 	const extracted = extractor.process(options.dir); |  | ||||||
| 	cli.ok(`* Extracted ${extracted.count()} strings`); |  | ||||||
|  |  | ||||||
| 	if (extracted.isEmpty()) { |  | ||||||
| 		process.exit(); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	let collection = extracted; |  | ||||||
|  |  | ||||||
| 	let compiler = new JsonCompiler(); |  | ||||||
| 	if (options.format === 'pot') { |  | ||||||
| 		compiler = new PoCompiler(); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (!options.replace && fs.existsSync(dest)) { |  | ||||||
| 		const existing = compiler.parse(fs.readFileSync(dest, 'utf-8')); |  | ||||||
|  |  | ||||||
| 		collection = extracted.union(existing); |  | ||||||
| 		cli.ok(`* Merged ${existing.count()} existing strings`); |  | ||||||
|  |  | ||||||
| 		if (options.clean) { |  | ||||||
| 			const collectionCount = collection.count(); |  | ||||||
| 			collection = collection.intersect(extracted); |  | ||||||
| 			const removeCount = collectionCount - collection.count(); |  | ||||||
| 			if (removeCount > 0) { |  | ||||||
| 				cli.ok(`* Removed ${removeCount} unused strings`); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	fs.writeFileSync(dest, compiler.compile(collection)); |  | ||||||
| 	cli.ok(`* Saved to '${dest}'`); |  | ||||||
| } catch (e) { |  | ||||||
| 	cli.fatal(e.toString()); |  | ||||||
| } |  | ||||||
|   | |||||||
							
								
								
									
										80
									
								
								src/cli/extract.ts
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										80
									
								
								src/cli/extract.ts
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,80 @@ | |||||||
|  | import { Extractor } from '../extractor'; | ||||||
|  | import { ParserInterface } from '../parsers/parser.interface'; | ||||||
|  | import { PipeParser } from '../parsers/pipe.parser'; | ||||||
|  | import { DirectiveParser } from '../parsers/directive.parser'; | ||||||
|  | import { ServiceParser } from '../parsers/service.parser'; | ||||||
|  | import { JsonCompiler } from '../compilers/json.compiler'; | ||||||
|  | import { PoCompiler } from '../compilers/po.compiler'; | ||||||
|  | import { TranslationCollection } from '../utils/translation.collection'; | ||||||
|  |  | ||||||
|  | import * as fs from 'fs'; | ||||||
|  | import * as path from 'path'; | ||||||
|  | import * as cli from 'cli'; | ||||||
|  |  | ||||||
|  | const options = cli.parse({ | ||||||
|  | 	dir: ['d', 'Directory path you would like to extract strings from', 'dir', process.env.PWD], | ||||||
|  | 	output: ['o', 'Directory path you would like to save extracted strings', 'dir', process.env.PWD], | ||||||
|  | 	format: ['f', 'Output format', ['json', 'pot'], 'json'], | ||||||
|  | 	replace: ['r', 'Replace the contents of output file if it exists (merging by default)', 'boolean', false], | ||||||
|  | 	clean: ['c', 'Remove unused keys when merging', 'boolean', false] | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | [options.dir, options.output].forEach(dir => { | ||||||
|  | 	if (!fs.existsSync(dir)) { | ||||||
|  | 		cli.fatal('The directory path you supplied was not found: ' + dir); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const filename: string = 'template.' + options.format; | ||||||
|  | const dest: string = path.join(options.output, filename); | ||||||
|  |  | ||||||
|  | const parsers: ParserInterface[] = [ | ||||||
|  | 	new PipeParser(), | ||||||
|  | 	new DirectiveParser(), | ||||||
|  | 	new ServiceParser() | ||||||
|  | ]; | ||||||
|  | const patterns: string[] = [ | ||||||
|  | 	'/**/*.html', | ||||||
|  | 	'/**/*.ts', | ||||||
|  | 	'/**/*.js' | ||||||
|  | ]; | ||||||
|  |  | ||||||
|  | const extractor: Extractor = new Extractor(parsers, patterns); | ||||||
|  |  | ||||||
|  | try { | ||||||
|  | 	cli.info(`Extracting strings from '${options.dir}'`); | ||||||
|  | 	const extracted: TranslationCollection = extractor.process(options.dir); | ||||||
|  | 	cli.ok(`* Extracted ${extracted.count()} strings`); | ||||||
|  |  | ||||||
|  | 	if (extracted.isEmpty()) { | ||||||
|  | 		process.exit(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	let collection: TranslationCollection = extracted; | ||||||
|  |  | ||||||
|  | 	let compiler = new JsonCompiler(); | ||||||
|  | 	if (options.format === 'pot') { | ||||||
|  | 		compiler = new PoCompiler(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (!options.replace && fs.existsSync(dest)) { | ||||||
|  | 		const existing: TranslationCollection = compiler.parse(fs.readFileSync(dest, 'utf-8')); | ||||||
|  |  | ||||||
|  | 		collection = extracted.union(existing); | ||||||
|  | 		cli.ok(`* Merged ${existing.count()} existing strings`); | ||||||
|  |  | ||||||
|  | 		if (options.clean) { | ||||||
|  | 			const collectionCount = collection.count(); | ||||||
|  | 			collection = collection.intersect(extracted); | ||||||
|  | 			const removeCount = collectionCount - collection.count(); | ||||||
|  | 			if (removeCount > 0) { | ||||||
|  | 				cli.ok(`* Removed ${removeCount} unused strings`); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	fs.writeFileSync(dest, compiler.compile(collection)); | ||||||
|  | 	cli.ok(`* Saved to '${dest}'`); | ||||||
|  | } catch (e) { | ||||||
|  | 	cli.fatal(e.toString()); | ||||||
|  | } | ||||||
| @@ -1,5 +1,5 @@ | |||||||
| import { CompilerInterface } from './compiler.interface'; | import { CompilerInterface } from './compiler.interface'; | ||||||
| import { TranslationCollection } from '../utils/translation.collection'; | import { TranslationCollection, TranslationType } from '../utils/translation.collection'; | ||||||
|  |  | ||||||
| import * as gettext from 'gettext-parser'; | import * as gettext from 'gettext-parser'; | ||||||
|  |  | ||||||
| @@ -25,7 +25,7 @@ export class PoCompiler implements CompilerInterface { | |||||||
| 						msgstr: collection.get(key) | 						msgstr: collection.get(key) | ||||||
| 					}; | 					}; | ||||||
| 					return translations; | 					return translations; | ||||||
| 				}, {}) | 				}, <any>{}) | ||||||
| 			} | 			} | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| @@ -45,7 +45,7 @@ export class PoCompiler implements CompilerInterface { | |||||||
| 			.reduce((values, key) => { | 			.reduce((values, key) => { | ||||||
| 				values[key] = po.translations[this.domain][key].msgstr.pop(); | 				values[key] = po.translations[this.domain][key].msgstr.pop(); | ||||||
| 				return values; | 				return values; | ||||||
| 			}, {}); | 			}, <TranslationType>{}); | ||||||
|  |  | ||||||
| 		return new TranslationCollection(values); | 		return new TranslationCollection(values); | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -1,16 +0,0 @@ | |||||||
| import { Extractor } from './extractor'; |  | ||||||
| import { JsonCompiler } from './compilers/json.compiler'; |  | ||||||
| import { TranslationCollection } from './utils/translation.collection'; |  | ||||||
|  |  | ||||||
| const compiler = new JsonCompiler(); |  | ||||||
| const extractor = new Extractor(); |  | ||||||
|  |  | ||||||
| const dirPath = '/your/project'; |  | ||||||
|  |  | ||||||
| try { |  | ||||||
| 	const collection: TranslationCollection = extractor.process(dirPath); |  | ||||||
| 	const result: string = compiler.compile(collection); |  | ||||||
| 	console.log(result); |  | ||||||
| } catch (e) { |  | ||||||
| 	console.log(`Something went wrong: ${e.toString()}`); |  | ||||||
| } |  | ||||||
| @@ -18,7 +18,7 @@ export class TranslationCollection { | |||||||
| 		const values = keys.reduce((results, key) => { | 		const values = keys.reduce((results, key) => { | ||||||
| 			results[key] = ''; | 			results[key] = ''; | ||||||
| 			return results; | 			return results; | ||||||
| 		}, {}); | 		}, <TranslationType>{}); | ||||||
| 		return new TranslationCollection(Object.assign({}, this.values, values)); | 		return new TranslationCollection(Object.assign({}, this.values, values)); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ | |||||||
|     "compilerOptions": { |     "compilerOptions": { | ||||||
|         "allowSyntheticDefaultImports": true, |         "allowSyntheticDefaultImports": true, | ||||||
|         "noUnusedLocals": true, |         "noUnusedLocals": true, | ||||||
|  |         "noImplicitAny": true, | ||||||
|         "removeComments": true, |         "removeComments": true, | ||||||
|         "declaration": true, |         "declaration": true, | ||||||
|         "target": "ES6", |         "target": "ES6", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user