33'use strict' ;
44
55var cmd = require ( 'commander' ) ;
6+ var async = require ( 'async' ) ;
67var debug = require ( 'debug' ) ( 'httpsnippet' ) ;
78var fs = require ( 'fs' ) ;
89var HTTPSnippet = require ( '../src' ) ;
@@ -22,34 +23,91 @@ if (!cmd.args.length || !cmd.language) {
2223 cmd . help ( ) ;
2324}
2425
25- var output = { } ;
26+ if ( cmd . output ) {
27+ var dir = path . resolve ( cmd . output ) ;
2628
27- cmd . args . map ( function ( file ) {
28- var stats = fs . statSync ( file ) ;
29+ if ( ! fs . existsSync ( dir ) ) {
30+ fs . mkdirSync ( dir ) ;
31+ }
32+ }
2933
30- if ( stats . isFile ( ) ) {
31- var data = fs . readFileSync ( file ) ;
34+ async . waterfall ( [
35+ function isFile ( next ) {
36+ var iterator = function ( item , cb ) {
37+ cb ( fs . statSync ( item ) . isFile ( ) ) ;
38+ } ;
3239
33- var source = JSON . parse ( data ) ;
40+ async . filter ( cmd . args , iterator , function ( results ) {
41+ next ( null , results ) ;
42+ } ) ;
43+ } ,
3444
35- var snippet = new HTTPSnippet ( source ) ;
36- var code = snippet [ cmd . language ] . apply ( snippet ) ;
45+ function read ( files , next ) {
46+ var iterator = function ( file , cb ) {
47+ fs . readFile ( file , cb ) ;
48+ } ;
3749
38- output [ file ] = code ;
39- }
40- } ) ;
50+ async . map ( files , iterator , function ( err , results ) {
51+ next ( err , files , results ) ;
52+ } ) ;
53+ } ,
4154
42- Object . keys ( output ) . map ( function ( file ) {
43- if ( cmd . output ) {
44- var name = path . basename ( file , path . extname ( file ) ) ;
55+ function parse ( files , buffers , next ) {
56+ var iterator = function ( buffer , cb ) {
57+ try {
58+ cb ( null , JSON . parse ( buffer ) ) ;
59+ } catch ( e ) {
60+ debug ( 'failed to parse source json' ) ;
61+ cb ( 'fail' , null ) ;
62+ }
63+ } ;
4564
46- var filename = path . format ( {
47- dir : path . resolve ( cmd . output ) ,
48- base : name + HTTPSnippet . extname ( cmd . language )
65+ async . map ( buffers , iterator , function ( err , results ) {
66+ next ( err , files , results ) ;
4967 } ) ;
68+ } ,
69+
70+ function snippet ( files , sources , next ) {
71+ var iterator = function ( source , cb ) {
72+ var snippet = new HTTPSnippet ( source ) ;
73+ cb ( null , snippet [ cmd . language ] . apply ( snippet ) ) ;
74+ } ;
75+
76+ async . map ( sources , iterator , function ( err , results ) {
77+ next ( err , files , results ) ;
78+ } ) ;
79+ } ,
80+
81+ function writeOutput ( files , snippets , next ) {
82+ if ( cmd . output ) {
83+ var iterator = function ( file ) {
84+ var index = files . indexOf ( file ) ;
85+ var name = path . basename ( file , path . extname ( file ) ) ;
86+
87+ var filename = path . format ( {
88+ dir : dir ,
89+ base : name + HTTPSnippet . extname ( cmd . language )
90+ } ) ;
91+
92+ fs . writeFile ( filename , snippets [ index ] ) ;
93+ } ;
94+
95+ async . each ( files , iterator ) ;
96+ }
97+
98+ next ( null , files , snippets ) ;
99+ } ,
100+
101+ function log ( files , snippets , next ) {
102+ if ( ! cmd . output ) {
103+ var iterator = function ( file ) {
104+ var index = files . indexOf ( file ) ;
105+ console . log ( chalk . cyan . bold . underline ( file ) , chalk . cyan . bold ( ':' ) , '\n' , snippets [ index ] , '\n' ) ;
106+ } ;
50107
51- fs . writeFile ( filename , output [ file ] ) ;
52- } else {
53- console . log ( chalk . cyan . bold . underline ( file ) , chalk . cyan . bold ( ':' ) , '\n' , output [ file ] , '\n' ) ;
108+ async . each ( files , iterator ) ;
109+ }
54110 }
111+ ] , function ( err , files , result ) {
112+ console . log ( result ) ;
55113} ) ;
0 commit comments