Skip to content

Commit 338054b

Browse files
committed
writenpmstat.js: add writeStats()
1 parent a644527 commit 338054b

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@
3030
"homepage": "https://github.com/veghdev/write-npmstat#readme",
3131
"dependencies": {
3232
"npm-stat-api": "^1.0.0",
33-
"enum": "^3.0.0"
33+
"enum": "^3.0.0",
34+
"csv-writer": "^1.6.0"
3435
},
3536
"devDependencies": {
3637
"npm-run-all": "^4.1.5",

src/writenpmstat.js

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
const fs = require("fs");
2+
13
const npm = require("npm-stat-api");
24
const Enum = require("enum");
5+
const createCsvWriter = require("csv-writer").createArrayCsvWriter;
36

47
const StatDate = require("./statdate.js");
58

@@ -11,15 +14,17 @@ const StatPeriod = new Enum(
1114

1215
class 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

Comments
 (0)