1+ const fs = require ( "fs" ) ;
2+
13const npm = require ( "npm-stat-api" ) ;
24const Enum = require ( "enum" ) ;
5+ const createCsvWriter = require ( "csv-writer" ) . createArrayCsvWriter ;
36
47const StatDate = require ( "./statdate.js" ) ;
58
@@ -11,15 +14,17 @@ const StatPeriod = new Enum(
1114
1215class WriteNpmStat {
1316 #packageName;
17+ outDir ;
1418
1519 #datePeriod;
1620
17- constructor ( packageName ) {
21+ constructor ( packageName , outDir ) {
1822 if ( ! packageName ) {
1923 throw new Error ( "packageName is a required argument" ) ;
2024 }
2125
2226 this . #packageName = packageName ;
27+ this . outDir = outDir ;
2328
2429 this . #datePeriod = StatPeriod . year ;
2530 }
@@ -79,7 +84,13 @@ class WriteNpmStat {
7984 return new Promise ( ( resolve ) => {
8085 const stats = this . getNpmStat ( startDay , endDay ) ;
8186 stats . then ( ( stats ) => {
82- this . #groupStats( stats , startDay , endDay , postfix ) ;
87+ const processedStats = this . #groupStats(
88+ stats ,
89+ startDay ,
90+ endDay ,
91+ postfix
92+ ) ;
93+ this . #writeStats( processedStats ) ;
8394 return resolve ( ) ;
8495 } ) ;
8596 } ) ;
@@ -120,6 +131,26 @@ class WriteNpmStat {
120131 } ) ;
121132 }
122133 console . log ( processedStats ) ;
134+ return processedStats ;
135+ }
136+
137+ #writeStats( stats ) {
138+ if ( this . outDir ) {
139+ fs . mkdir ( this . outDir , { recursive : true } , ( err ) => {
140+ if ( err ) {
141+ throw err ;
142+ }
143+ for ( const [ key , value ] of Object . entries ( stats ) ) {
144+ const csvWriter = createCsvWriter ( {
145+ path : this . outDir + "/" + key ,
146+ header : [ "date" , "download" ] ,
147+ } ) ;
148+ csvWriter . writeRecords ( value ) . catch ( ( err ) => {
149+ throw err ;
150+ } ) ;
151+ }
152+ } ) ;
153+ }
123154 }
124155}
125156
0 commit comments