UNPKG

1.94 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const program = require('commander');
4const SitemapGenerator = require('sitemap-generator');
5const chalk = require('chalk');
6
7const pkg = require('./package.json');
8
9function sitemapFactory() {
10 program
11 .version(pkg.version)
12 .usage('[options] <url> <filepath>')
13 .option('-q, --query', 'consider query string')
14 .option('-v, --verbose', 'print details when crawling')
15 .parse(process.argv);
16
17 // display help if no url/filepath provided
18 if (program.args.length < 2) {
19 program.help();
20 process.exit();
21 }
22
23 const generator = SitemapGenerator(program.args[0], {
24 stripQuerystring: !program.query,
25 filepath: program.args[1],
26 });
27
28 let added = 0;
29 let ignored = 0;
30 let errored = 0;
31
32 // add event listeners to crawler if verbose mode enabled
33 if (program.verbose) {
34 generator.on('add', url => {
35 added += 1;
36 console.log('[', chalk.green('ADD'), ']', chalk.gray(url));
37 });
38
39 generator.on('ignore', url => {
40 ignored += 1;
41 console.log('[', chalk.cyan('IGN'), ']', chalk.gray(url));
42 });
43
44 generator.on('error', error => {
45 errored += 1;
46 console.error(
47 '[',
48 chalk.red('ERR'),
49 ']',
50 chalk.gray(error.url, ` (${error.code})`)
51 );
52 });
53 }
54
55 generator.on('done', () => {
56 // show stats if dry mode
57 if (program.verbose) {
58 const message =
59 'Added %s pages, ignored %s pages, encountered %s errors.';
60 const stats = [chalk.white(message), added, ignored, errored];
61
62 // no results => site not found
63 if (added === 0 && errored === 0 && ignored === 0) {
64 console.error(
65 chalk.red('Site "%s" could not be found'),
66 program.args[0]
67 );
68 // exit with error
69 process.exit(1);
70 } else {
71 console.log.apply(this, stats);
72 }
73 }
74
75 process.exit(0);
76 });
77
78 generator.start();
79}
80
81sitemapFactory();