1 | #! /usr/bin/env node
|
2 | 'use strict';
|
3 |
|
4 | const {version} = require('../package');
|
5 | const doctest = require('..');
|
6 | const program = require('commander');
|
7 | const path = require('path');
|
8 | const glob = require('glob');
|
9 | const fs = require('fs');
|
10 |
|
11 | const DEFAULT_GLOB = '**/*.+(md|markdown)';
|
12 | const DEFAULT_IGNORE = [
|
13 | '**/node_modules/**',
|
14 | '**/bower_components/**'
|
15 | ];
|
16 |
|
17 |
|
18 | const config = {
|
19 | require: {},
|
20 | globals: {},
|
21 | ignore: []
|
22 | };
|
23 |
|
24 |
|
25 | program
|
26 | .name('markdown-doctest')
|
27 | .description('Test all the code in your markdown docs!')
|
28 | .version(version, '-v, --version', 'output the current version')
|
29 | .helpOption('-h, --help', 'output usage informations')
|
30 | .option('-c, --config <path>', 'custom config location', path.join(process.cwd(), '/.markdown-doctest-setup.js'))
|
31 | .parse(process.argv);
|
32 |
|
33 |
|
34 | if (program.config) {
|
35 | const configPath = path.resolve(program.config);
|
36 |
|
37 | if (fs.existsSync(configPath)) {
|
38 | try {
|
39 |
|
40 |
|
41 | Object.assign(config, require(configPath));
|
42 | } catch (e) {
|
43 | console.error(`Cannot resolve "${configPath}"`);
|
44 | process.exit(1);
|
45 | }
|
46 | }
|
47 | }
|
48 |
|
49 |
|
50 | glob(
|
51 | program.args[0] || DEFAULT_GLOB,
|
52 | {
|
53 | ignore: [...config.ignore, ...DEFAULT_IGNORE]
|
54 | },
|
55 | (err, files) => {
|
56 |
|
57 | if (err) {
|
58 | console.trace(err);
|
59 | }
|
60 |
|
61 |
|
62 | const results = doctest.runTests(files, config);
|
63 |
|
64 | console.log('\n');
|
65 | doctest.printResults(results);
|
66 |
|
67 |
|
68 | const failures = results.filter(result => result.status === 'fail');
|
69 | if (failures.length > 0) {
|
70 | process.exit(1);
|
71 | }
|
72 | }
|
73 | );
|