@appium/docutils 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -5
- package/build/lib/build/mkdocs.d.ts +58 -0
- package/build/lib/build/mkdocs.d.ts.map +1 -0
- package/build/lib/build/mkdocs.js +80 -0
- package/build/lib/build/mkdocs.js.map +1 -0
- package/build/lib/build/typedoc.d.ts +55 -0
- package/build/lib/build/typedoc.d.ts.map +1 -0
- package/build/lib/build/typedoc.js +120 -0
- package/build/lib/build/typedoc.js.map +1 -0
- package/build/lib/build-api.d.ts +18 -0
- package/build/lib/build-api.d.ts.map +1 -0
- package/build/lib/build-api.js +75 -0
- package/build/lib/build-api.js.map +1 -0
- package/build/lib/build.d.ts +21 -0
- package/build/lib/build.d.ts.map +1 -0
- package/build/lib/build.js +71 -0
- package/build/lib/build.js.map +1 -0
- package/build/lib/builder/deploy.d.ts +89 -0
- package/build/lib/builder/deploy.d.ts.map +1 -0
- package/build/lib/builder/deploy.js +102 -0
- package/build/lib/builder/deploy.js.map +1 -0
- package/build/lib/builder/index.d.ts +5 -0
- package/build/lib/builder/index.d.ts.map +1 -0
- package/build/lib/builder/index.js +21 -0
- package/build/lib/builder/index.js.map +1 -0
- package/build/lib/builder/nav.d.ts +81 -0
- package/build/lib/builder/nav.d.ts.map +1 -0
- package/build/lib/builder/nav.js +272 -0
- package/build/lib/builder/nav.js.map +1 -0
- package/build/lib/builder/reference.d.ts +57 -0
- package/build/lib/builder/reference.d.ts.map +1 -0
- package/build/lib/builder/reference.js +129 -0
- package/build/lib/builder/reference.js.map +1 -0
- package/build/lib/builder/site.d.ts +55 -0
- package/build/lib/builder/site.d.ts.map +1 -0
- package/build/lib/builder/site.js +81 -0
- package/build/lib/builder/site.js.map +1 -0
- package/build/lib/cli/command/build.d.ts +178 -0
- package/build/lib/cli/command/build.d.ts.map +1 -0
- package/build/lib/cli/command/build.js +223 -0
- package/build/lib/cli/command/build.js.map +1 -0
- package/build/lib/cli/command/deploy.d.ts +1 -0
- package/build/lib/cli/command/deploy.d.ts.map +1 -0
- package/build/lib/cli/command/deploy.js +2 -0
- package/build/lib/cli/command/deploy.js.map +1 -0
- package/build/lib/cli/command/index.d.ts +4 -0
- package/build/lib/cli/command/index.d.ts.map +1 -0
- package/build/lib/cli/command/index.js +13 -0
- package/build/lib/cli/command/index.js.map +1 -0
- package/build/lib/cli/command/init.d.ts +143 -0
- package/build/lib/cli/command/init.d.ts.map +1 -0
- package/build/lib/cli/command/init.js +164 -0
- package/build/lib/cli/command/init.js.map +1 -0
- package/build/lib/cli/command/validate.d.ts +76 -0
- package/build/lib/cli/command/validate.d.ts.map +1 -0
- package/build/lib/cli/command/validate.js +115 -0
- package/build/lib/cli/command/validate.js.map +1 -0
- package/build/lib/cli/command-init.d.ts +143 -0
- package/build/lib/cli/command-init.d.ts.map +1 -0
- package/build/lib/cli/command-init.js +164 -0
- package/build/lib/cli/command-init.js.map +1 -0
- package/build/lib/cli/command-validate.d.ts +52 -0
- package/build/lib/cli/command-validate.d.ts.map +1 -0
- package/build/lib/cli/command-validate.js +66 -0
- package/build/lib/cli/command-validate.js.map +1 -0
- package/build/lib/cli/config.d.ts +28 -0
- package/build/lib/cli/config.d.ts.map +1 -0
- package/build/lib/cli/config.js +114 -0
- package/build/lib/cli/config.js.map +1 -0
- package/build/lib/cli/index.d.ts +13 -0
- package/build/lib/cli/index.d.ts.map +1 -0
- package/build/lib/cli/index.js +91 -0
- package/build/lib/cli/index.js.map +1 -0
- package/build/lib/cli/init.d.ts +143 -0
- package/build/lib/cli/init.d.ts.map +1 -0
- package/build/lib/cli/init.js +164 -0
- package/build/lib/cli/init.js.map +1 -0
- package/build/lib/cli/options.d.ts +1 -0
- package/build/lib/cli/options.d.ts.map +1 -0
- package/build/lib/cli/options.js +2 -0
- package/build/lib/cli/options.js.map +1 -0
- package/build/lib/cli/validate.d.ts +1 -0
- package/build/lib/cli/validate.d.ts.map +1 -0
- package/build/lib/cli/validate.js +2 -0
- package/build/lib/cli/validate.js.map +1 -0
- package/build/lib/cli.d.ts +10 -0
- package/build/lib/cli.d.ts.map +1 -0
- package/build/lib/cli.js +328 -0
- package/build/lib/cli.js.map +1 -0
- package/build/lib/constants.d.ts +125 -0
- package/build/lib/constants.d.ts.map +1 -0
- package/build/lib/constants.js +133 -0
- package/build/lib/constants.js.map +1 -0
- package/build/lib/error.d.ts +3 -0
- package/build/lib/error.d.ts.map +1 -0
- package/build/lib/error.js +7 -0
- package/build/lib/error.js.map +1 -0
- package/build/lib/fs.d.ts +142 -0
- package/build/lib/fs.d.ts.map +1 -0
- package/build/lib/fs.js +237 -0
- package/build/lib/fs.js.map +1 -0
- package/build/lib/index.d.ts +5 -2
- package/build/lib/index.d.ts.map +1 -1
- package/build/lib/index.js +4 -1
- package/build/lib/index.js.map +1 -1
- package/build/lib/init-task.d.ts +49 -0
- package/build/lib/init-task.d.ts.map +1 -0
- package/build/lib/init-task.js +95 -0
- package/build/lib/init-task.js.map +1 -0
- package/build/lib/init.d.ts +202 -0
- package/build/lib/init.d.ts.map +1 -0
- package/build/lib/init.js +225 -0
- package/build/lib/init.js.map +1 -0
- package/build/lib/io.d.ts +1 -0
- package/build/lib/io.d.ts.map +1 -0
- package/build/lib/io.js +2 -0
- package/build/lib/io.js.map +1 -0
- package/build/lib/logger.d.ts +17 -2
- package/build/lib/logger.d.ts.map +1 -1
- package/build/lib/logger.js +187 -2
- package/build/lib/logger.js.map +1 -1
- package/build/lib/mike.d.ts +3 -0
- package/build/lib/mike.d.ts.map +1 -1
- package/build/lib/mike.js +4 -0
- package/build/lib/mike.js.map +1 -1
- package/build/lib/mkdocs.d.ts +51 -12
- package/build/lib/mkdocs.d.ts.map +1 -1
- package/build/lib/mkdocs.js +64 -32
- package/build/lib/mkdocs.js.map +1 -1
- package/build/lib/model.d.ts +80 -0
- package/build/lib/model.d.ts.map +1 -0
- package/build/lib/model.js +8 -0
- package/build/lib/model.js.map +1 -0
- package/build/lib/nav.d.ts +47 -0
- package/build/lib/nav.d.ts.map +1 -0
- package/build/lib/nav.js +132 -0
- package/build/lib/nav.js.map +1 -0
- package/build/lib/scaffold.d.ts +95 -0
- package/build/lib/scaffold.d.ts.map +1 -0
- package/build/lib/scaffold.js +103 -0
- package/build/lib/scaffold.js.map +1 -0
- package/build/lib/test.d.ts +9 -0
- package/build/lib/test.d.ts.map +1 -0
- package/build/lib/test.js +2 -0
- package/build/lib/test.js.map +1 -0
- package/build/lib/typedoc.d.ts +55 -0
- package/build/lib/typedoc.d.ts.map +1 -0
- package/build/lib/typedoc.js +122 -0
- package/build/lib/typedoc.js.map +1 -0
- package/build/lib/types.d.ts +52 -0
- package/build/lib/types.d.ts.map +1 -0
- package/build/lib/types.js +7 -0
- package/build/lib/types.js.map +1 -0
- package/build/lib/util.d.ts +42 -0
- package/build/lib/util.d.ts.map +1 -0
- package/build/lib/util.js +56 -0
- package/build/lib/util.js.map +1 -0
- package/build/lib/validate.d.ts +218 -0
- package/build/lib/validate.d.ts.map +1 -0
- package/build/lib/validate.js +501 -0
- package/build/lib/validate.js.map +1 -0
- package/build/lib/validation/base-validator.d.ts +218 -0
- package/build/lib/validation/base-validator.d.ts.map +1 -0
- package/build/lib/validation/base-validator.js +453 -0
- package/build/lib/validation/base-validator.js.map +1 -0
- package/build/lib/validation/mkdocs-validator.d.ts +5 -0
- package/build/lib/validation/mkdocs-validator.d.ts.map +1 -0
- package/build/lib/validation/mkdocs-validator.js +54 -0
- package/build/lib/validation/mkdocs-validator.js.map +1 -0
- package/build/lib/validation/python-validator.d.ts +1 -0
- package/build/lib/validation/python-validator.d.ts.map +1 -0
- package/build/lib/validation/python-validator.js +2 -0
- package/build/lib/validation/python-validator.js.map +1 -0
- package/build/lib/validation/python.d.ts +1 -0
- package/build/lib/validation/python.d.ts.map +1 -0
- package/build/lib/validation/python.js +2 -0
- package/build/lib/validation/python.js.map +1 -0
- package/build/lib/validation/validate.d.ts +221 -0
- package/build/lib/validation/validate.d.ts.map +1 -0
- package/build/lib/validation/validate.js +508 -0
- package/build/lib/validation/validate.js.map +1 -0
- package/build/lib/validation/validator.d.ts +220 -0
- package/build/lib/validation/validator.d.ts.map +1 -0
- package/build/lib/validation/validator.js +470 -0
- package/build/lib/validation/validator.js.map +1 -0
- package/lib/builder/deploy.ts +217 -0
- package/lib/builder/index.ts +4 -0
- package/lib/builder/nav.ts +393 -0
- package/lib/builder/reference.ts +191 -0
- package/lib/builder/site.ts +143 -0
- package/lib/cli/command/build.ts +229 -0
- package/lib/cli/command/index.ts +3 -0
- package/lib/cli/command/init.ts +166 -0
- package/lib/cli/command/validate.ts +122 -0
- package/lib/cli/config.ts +89 -0
- package/lib/cli/index.ts +88 -0
- package/lib/constants.ts +150 -0
- package/lib/error.ts +1 -0
- package/lib/fs.ts +274 -0
- package/lib/index.ts +5 -0
- package/lib/init.ts +319 -0
- package/lib/logger.ts +198 -0
- package/lib/mike.js +4 -0
- package/lib/model.ts +92 -0
- package/lib/scaffold.ts +225 -0
- package/lib/util.ts +76 -0
- package/lib/validate.ts +728 -0
- package/package.json +38 -6
- package/requirements.txt +4 -0
- package/tsconfig.json +2 -1
- package/build/tsconfig.tsbuildinfo +0 -1
- package/lib/index.js +0 -2
- package/lib/logger.js +0 -3
- package/lib/mkdocs.js +0 -43
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import {CommandModule, InferredOptionTypes, Options} from 'yargs';
|
|
3
|
+
import {init} from '../../init';
|
|
4
|
+
import logger from '../../logger';
|
|
5
|
+
import {stopwatch} from '../../util';
|
|
6
|
+
|
|
7
|
+
const log = logger.withTag('init');
|
|
8
|
+
|
|
9
|
+
const NAME_GROUP_INIT_MKDOCS = 'MkDocs Config:';
|
|
10
|
+
const NAME_GROUP_INIT_PATHS = 'Paths:';
|
|
11
|
+
const NAME_GROUP_INIT_BEHAVIOR = 'Initialization Behavior:';
|
|
12
|
+
|
|
13
|
+
const opts = {
|
|
14
|
+
copyright: {
|
|
15
|
+
description: 'Copyright notice',
|
|
16
|
+
group: NAME_GROUP_INIT_MKDOCS,
|
|
17
|
+
nargs: 1,
|
|
18
|
+
requiresArg: true,
|
|
19
|
+
type: 'string',
|
|
20
|
+
},
|
|
21
|
+
dir: {
|
|
22
|
+
default: '.',
|
|
23
|
+
defaultDescription: '(current directory)',
|
|
24
|
+
description: 'Directory of package',
|
|
25
|
+
group: NAME_GROUP_INIT_PATHS,
|
|
26
|
+
normalize: true,
|
|
27
|
+
type: 'string',
|
|
28
|
+
},
|
|
29
|
+
'dry-run': {
|
|
30
|
+
describe: 'Do not write any files; show what would be done',
|
|
31
|
+
group: NAME_GROUP_INIT_BEHAVIOR,
|
|
32
|
+
type: 'boolean',
|
|
33
|
+
},
|
|
34
|
+
force: {
|
|
35
|
+
alias: 'f',
|
|
36
|
+
describe: 'Overwrite existing configurations',
|
|
37
|
+
group: NAME_GROUP_INIT_BEHAVIOR,
|
|
38
|
+
type: 'boolean',
|
|
39
|
+
},
|
|
40
|
+
include: {
|
|
41
|
+
alias: 'i',
|
|
42
|
+
array: true,
|
|
43
|
+
coerce: (value: string | string[]) => _.castArray(value),
|
|
44
|
+
description: 'Files to include in compilation (globs OK)',
|
|
45
|
+
nargs: 1,
|
|
46
|
+
requiresArg: true,
|
|
47
|
+
type: 'string',
|
|
48
|
+
},
|
|
49
|
+
mkdocs: {
|
|
50
|
+
default: true,
|
|
51
|
+
description: 'Create mkdocs.yml if needed',
|
|
52
|
+
group: NAME_GROUP_INIT_BEHAVIOR,
|
|
53
|
+
type: 'boolean',
|
|
54
|
+
},
|
|
55
|
+
'mkdocs-yml': {
|
|
56
|
+
defaultDescription: './mkdocs.yml',
|
|
57
|
+
description: 'Path to mkdocs.yml',
|
|
58
|
+
group: NAME_GROUP_INIT_PATHS,
|
|
59
|
+
nargs: 1,
|
|
60
|
+
normalize: true,
|
|
61
|
+
requiresArg: true,
|
|
62
|
+
type: 'string',
|
|
63
|
+
},
|
|
64
|
+
'package-json': {
|
|
65
|
+
defaultDescription: './package.json',
|
|
66
|
+
describe: 'Path to package.json',
|
|
67
|
+
group: NAME_GROUP_INIT_PATHS,
|
|
68
|
+
nargs: 1,
|
|
69
|
+
normalize: true,
|
|
70
|
+
requiresArg: true,
|
|
71
|
+
type: 'string',
|
|
72
|
+
},
|
|
73
|
+
python: {
|
|
74
|
+
default: true,
|
|
75
|
+
description: 'Install Python dependencies if needed',
|
|
76
|
+
group: NAME_GROUP_INIT_BEHAVIOR,
|
|
77
|
+
type: 'boolean',
|
|
78
|
+
},
|
|
79
|
+
'python-path': {
|
|
80
|
+
defaultDescription: '(derived from shell)',
|
|
81
|
+
description: 'Path to python 3 executable',
|
|
82
|
+
group: NAME_GROUP_INIT_PATHS,
|
|
83
|
+
nargs: 1,
|
|
84
|
+
normalize: true,
|
|
85
|
+
requiresArg: true,
|
|
86
|
+
type: 'string',
|
|
87
|
+
},
|
|
88
|
+
'repo-name': {
|
|
89
|
+
defaultDescription: '(derived from --repo-url)',
|
|
90
|
+
description: 'Name of extension repository',
|
|
91
|
+
group: NAME_GROUP_INIT_MKDOCS,
|
|
92
|
+
nargs: 1,
|
|
93
|
+
requiresArg: true,
|
|
94
|
+
type: 'string',
|
|
95
|
+
},
|
|
96
|
+
'repo-url': {
|
|
97
|
+
defaultDescription: '(from package.json)',
|
|
98
|
+
description: 'URL of extension repository',
|
|
99
|
+
group: NAME_GROUP_INIT_MKDOCS,
|
|
100
|
+
nargs: 1,
|
|
101
|
+
requiresArg: true,
|
|
102
|
+
type: 'string',
|
|
103
|
+
},
|
|
104
|
+
'site-description': {
|
|
105
|
+
defaultDescription: '(from package.json)',
|
|
106
|
+
description: 'Site description',
|
|
107
|
+
group: NAME_GROUP_INIT_MKDOCS,
|
|
108
|
+
nargs: 1,
|
|
109
|
+
requiresArg: true,
|
|
110
|
+
type: 'string',
|
|
111
|
+
},
|
|
112
|
+
'site-name': {
|
|
113
|
+
defaultDescription: '(extension package name)',
|
|
114
|
+
description: 'Name of site',
|
|
115
|
+
group: NAME_GROUP_INIT_MKDOCS,
|
|
116
|
+
nargs: 1,
|
|
117
|
+
requiresArg: true,
|
|
118
|
+
type: 'string',
|
|
119
|
+
},
|
|
120
|
+
'tsconfig-json': {
|
|
121
|
+
defaultDescription: './tsconfig.json',
|
|
122
|
+
describe: 'Path to tsconfig.json',
|
|
123
|
+
group: NAME_GROUP_INIT_PATHS,
|
|
124
|
+
nargs: 1,
|
|
125
|
+
normalize: true,
|
|
126
|
+
requiresArg: true,
|
|
127
|
+
type: 'string',
|
|
128
|
+
},
|
|
129
|
+
typedoc: {
|
|
130
|
+
default: true,
|
|
131
|
+
description: 'Create typedoc.json if needed',
|
|
132
|
+
group: NAME_GROUP_INIT_BEHAVIOR,
|
|
133
|
+
type: 'boolean',
|
|
134
|
+
},
|
|
135
|
+
'typedoc-json': {
|
|
136
|
+
defaultDescription: './typedoc.json',
|
|
137
|
+
describe: 'Path to typedoc.json',
|
|
138
|
+
group: NAME_GROUP_INIT_PATHS,
|
|
139
|
+
nargs: 1,
|
|
140
|
+
normalize: true,
|
|
141
|
+
requiresArg: true,
|
|
142
|
+
type: 'string',
|
|
143
|
+
},
|
|
144
|
+
typescript: {
|
|
145
|
+
default: true,
|
|
146
|
+
description: 'Create tsconfig.json if needed',
|
|
147
|
+
group: NAME_GROUP_INIT_BEHAVIOR,
|
|
148
|
+
type: 'boolean',
|
|
149
|
+
},
|
|
150
|
+
} as const;
|
|
151
|
+
opts as Record<string, Options>; // type check
|
|
152
|
+
|
|
153
|
+
type InitOptions = InferredOptionTypes<typeof opts>;
|
|
154
|
+
|
|
155
|
+
const initCommand: CommandModule<{}, InitOptions> = {
|
|
156
|
+
command: 'init',
|
|
157
|
+
describe: 'Initialize package for doc generation',
|
|
158
|
+
builder: opts,
|
|
159
|
+
async handler(args) {
|
|
160
|
+
const done = stopwatch('init');
|
|
161
|
+
await init({...args, overwrite: args.force, cwd: args.dir});
|
|
162
|
+
log.success('Done (%dms)', done());
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
export default initCommand;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import pluralize from 'pluralize';
|
|
2
|
+
import {CommandModule, InferredOptionTypes, Options} from 'yargs';
|
|
3
|
+
import {DocutilsError} from '../../error';
|
|
4
|
+
import {DocutilsValidator, ValidationKind} from '../../validate';
|
|
5
|
+
import logger from '../../logger';
|
|
6
|
+
|
|
7
|
+
const log = logger.withTag('validate');
|
|
8
|
+
|
|
9
|
+
const NAME_GROUP_VALIDATE = 'Validation Behavior:';
|
|
10
|
+
const NAME_GROUP_VALIDATE_PATHS = 'Paths:';
|
|
11
|
+
|
|
12
|
+
const opts = {
|
|
13
|
+
mkdocs: {
|
|
14
|
+
default: true,
|
|
15
|
+
description: 'Validate MkDocs environment',
|
|
16
|
+
group: NAME_GROUP_VALIDATE,
|
|
17
|
+
type: 'boolean',
|
|
18
|
+
},
|
|
19
|
+
'mkdocs-yml': {
|
|
20
|
+
defaultDescription: './mkdocs.yml',
|
|
21
|
+
description: 'Path to mkdocs.yml',
|
|
22
|
+
group: NAME_GROUP_VALIDATE_PATHS,
|
|
23
|
+
nargs: 1,
|
|
24
|
+
normalize: true,
|
|
25
|
+
requiresArg: true,
|
|
26
|
+
type: 'string',
|
|
27
|
+
},
|
|
28
|
+
'npm-path': {
|
|
29
|
+
defaultDescription: '(derived from shell)',
|
|
30
|
+
description: 'Path to npm executable',
|
|
31
|
+
group: NAME_GROUP_VALIDATE_PATHS,
|
|
32
|
+
nargs: 1,
|
|
33
|
+
normalize: true,
|
|
34
|
+
requiresArg: true,
|
|
35
|
+
type: 'string',
|
|
36
|
+
},
|
|
37
|
+
python: {
|
|
38
|
+
default: true,
|
|
39
|
+
description: 'Validate Python 3 environment',
|
|
40
|
+
group: NAME_GROUP_VALIDATE,
|
|
41
|
+
type: 'boolean',
|
|
42
|
+
},
|
|
43
|
+
'python-path': {
|
|
44
|
+
defaultDescription: '(derived from shell)',
|
|
45
|
+
description: 'Path to python 3 executable',
|
|
46
|
+
group: NAME_GROUP_VALIDATE_PATHS,
|
|
47
|
+
nargs: 1,
|
|
48
|
+
normalize: true,
|
|
49
|
+
requiresArg: true,
|
|
50
|
+
type: 'string',
|
|
51
|
+
},
|
|
52
|
+
'tsconfig-json': {
|
|
53
|
+
defaultDescription: './tsconfig.json',
|
|
54
|
+
describe: 'Path to tsconfig.json',
|
|
55
|
+
group: NAME_GROUP_VALIDATE_PATHS,
|
|
56
|
+
nargs: 1,
|
|
57
|
+
normalize: true,
|
|
58
|
+
requiresArg: true,
|
|
59
|
+
type: 'string',
|
|
60
|
+
},
|
|
61
|
+
typedoc: {
|
|
62
|
+
default: true,
|
|
63
|
+
description: 'Validate TypoDoc environment',
|
|
64
|
+
group: NAME_GROUP_VALIDATE,
|
|
65
|
+
type: 'boolean',
|
|
66
|
+
},
|
|
67
|
+
'typedoc-json': {
|
|
68
|
+
defaultDescription: './typedoc.json',
|
|
69
|
+
describe: 'Path to typedoc.json',
|
|
70
|
+
group: NAME_GROUP_VALIDATE_PATHS,
|
|
71
|
+
nargs: 1,
|
|
72
|
+
normalize: true,
|
|
73
|
+
requiresArg: true,
|
|
74
|
+
type: 'string',
|
|
75
|
+
},
|
|
76
|
+
typescript: {
|
|
77
|
+
default: true,
|
|
78
|
+
description: 'Validate TypeScript environment',
|
|
79
|
+
group: NAME_GROUP_VALIDATE,
|
|
80
|
+
type: 'boolean',
|
|
81
|
+
},
|
|
82
|
+
} as const;
|
|
83
|
+
opts as Record<string, Options>;
|
|
84
|
+
type ValidateOptions = InferredOptionTypes<typeof opts>;
|
|
85
|
+
const validateCommand: CommandModule<{}, ValidateOptions> = {
|
|
86
|
+
command: 'validate',
|
|
87
|
+
describe: 'Validate Environment',
|
|
88
|
+
builder: opts,
|
|
89
|
+
async handler(args) {
|
|
90
|
+
if (!args.python && !args.typedoc && !args.typescript && !args.mkdocs) {
|
|
91
|
+
// specifically not a DocutilsError
|
|
92
|
+
throw new Error(
|
|
93
|
+
'No validation targets specified; one or more of --python, --typescript, --typedoc or --mkdocs must be provided'
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
let errorCount = 0;
|
|
98
|
+
const validator = new DocutilsValidator(args)
|
|
99
|
+
.once(DocutilsValidator.BEGIN, (kinds: ValidationKind[]) => {
|
|
100
|
+
log.info(`Validating: ${kinds.join(', ')}`);
|
|
101
|
+
})
|
|
102
|
+
.once(DocutilsValidator.END, (errCount: number) => {
|
|
103
|
+
errorCount = errCount;
|
|
104
|
+
})
|
|
105
|
+
.on(DocutilsValidator.FAILURE, (err: DocutilsError) => {
|
|
106
|
+
log.error(err.message);
|
|
107
|
+
})
|
|
108
|
+
.on(DocutilsValidator.SUCCESS, (msg: string) => {
|
|
109
|
+
log.success(msg);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
await validator.validate();
|
|
113
|
+
|
|
114
|
+
if (errorCount) {
|
|
115
|
+
throw new DocutilsError(
|
|
116
|
+
`Validation failed with ${errorCount} ${pluralize('error', errorCount)}`
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export default validateCommand;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles reading of a config file for docutils
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import loadTs from '@sliphua/lilconfig-ts-loader';
|
|
7
|
+
import {LogLevel} from 'consola';
|
|
8
|
+
import {lilconfig, Loader} from 'lilconfig';
|
|
9
|
+
import _ from 'lodash';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
import YAML from 'yaml';
|
|
12
|
+
import parser from 'yargs-parser';
|
|
13
|
+
import {hideBin} from 'yargs/helpers';
|
|
14
|
+
import {NAME_BIN} from '../constants';
|
|
15
|
+
import logger from '../logger';
|
|
16
|
+
import {relative} from '../util';
|
|
17
|
+
const log = logger.withTag('config');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* `lilconfig` loader for YAML
|
|
21
|
+
*/
|
|
22
|
+
const loadYaml: Loader = _.rearg(YAML.parse, [2, 0, 1]);
|
|
23
|
+
/**
|
|
24
|
+
* `lilconfig` loader for ESM/CJS
|
|
25
|
+
*/
|
|
26
|
+
const loadEsm: Loader = (filepath: string) => import(filepath);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Controls how we load/find a config file.
|
|
30
|
+
*
|
|
31
|
+
* Takes _raw_ args from the CLI, and uses `yargs-parser` to parse them as to not interfere with the
|
|
32
|
+
* main usage of args.
|
|
33
|
+
*
|
|
34
|
+
* We're looking for various things in the CLI args:
|
|
35
|
+
* - `--no-config` - if this is present, we don't load a config file
|
|
36
|
+
* - `--log-level` - if this is present, we set the log level
|
|
37
|
+
* - `--verbose` - same as above
|
|
38
|
+
* - `--config` - if this is present, we load the config file at the given path
|
|
39
|
+
* - `--help`, `--version` - do nothing
|
|
40
|
+
* @param argv Raw CLI args
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
export async function findConfig(argv: string[] = hideBin(process.argv)) {
|
|
44
|
+
const preArgs = parser(argv);
|
|
45
|
+
|
|
46
|
+
if (preArgs.verbose || preArgs.logLevel === 'debug') {
|
|
47
|
+
log.level = LogLevel.Debug;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return preArgs.noConfig || preArgs.help || preArgs.version
|
|
51
|
+
? {}
|
|
52
|
+
: await loadConfig(preArgs.config as string | undefined);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Loads a config file or finds and loads one if none provided
|
|
57
|
+
* @param filepath Config file path, if provided
|
|
58
|
+
* @param cwd Current working directory
|
|
59
|
+
* @returns A config object or an empty object. Could be anything; `yargs` will validate it.
|
|
60
|
+
*/
|
|
61
|
+
export async function loadConfig(filepath?: string, cwd = process.cwd()): Promise<any> {
|
|
62
|
+
const relativePath = relative(cwd);
|
|
63
|
+
const searcher = lilconfig(NAME_BIN, {
|
|
64
|
+
loaders: {
|
|
65
|
+
'.yaml': loadYaml,
|
|
66
|
+
'.yml': loadYaml,
|
|
67
|
+
'.ts': loadTs,
|
|
68
|
+
'.js': loadEsm,
|
|
69
|
+
'.cjs': loadEsm,
|
|
70
|
+
'.mjs': loadEsm,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
const result = filepath
|
|
75
|
+
? await searcher.load(path.normalize(filepath))
|
|
76
|
+
: await searcher.search(cwd);
|
|
77
|
+
if (result === null) {
|
|
78
|
+
log.debug('No config found');
|
|
79
|
+
return {};
|
|
80
|
+
}
|
|
81
|
+
if (result.isEmpty) {
|
|
82
|
+
log.debug('Config loaded at %s but it was empty', result.filepath);
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
const relFilepath = relativePath(result.filepath);
|
|
86
|
+
log.success('Loaded config from %s', relFilepath);
|
|
87
|
+
log.debug('Config contents: %O', result.config);
|
|
88
|
+
return result.config;
|
|
89
|
+
}
|
package/lib/cli/index.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import logger from '../logger';
|
|
3
|
+
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import {hideBin} from 'yargs/helpers';
|
|
6
|
+
import yargs from 'yargs/yargs';
|
|
7
|
+
import {DEFAULT_LOG_LEVEL, LogLevelMap, NAME_BIN} from '../constants';
|
|
8
|
+
import {DocutilsError} from '../error';
|
|
9
|
+
import {build, init, validate} from './command';
|
|
10
|
+
import {findConfig} from './config';
|
|
11
|
+
|
|
12
|
+
const log = logger.withTag('cli');
|
|
13
|
+
export async function main(argv = hideBin(process.argv)) {
|
|
14
|
+
const config = await findConfig(argv);
|
|
15
|
+
|
|
16
|
+
const y = yargs(argv);
|
|
17
|
+
return await y
|
|
18
|
+
.scriptName(NAME_BIN)
|
|
19
|
+
.command(build)
|
|
20
|
+
.command(init)
|
|
21
|
+
.command(validate)
|
|
22
|
+
.options({
|
|
23
|
+
verbose: {
|
|
24
|
+
type: 'boolean',
|
|
25
|
+
describe: 'Alias for --log-level=debug',
|
|
26
|
+
},
|
|
27
|
+
'log-level': {
|
|
28
|
+
alias: 'L',
|
|
29
|
+
choices: ['debug', 'info', 'warn', 'error', 'silent'],
|
|
30
|
+
describe: 'Sets the log level',
|
|
31
|
+
default: DEFAULT_LOG_LEVEL,
|
|
32
|
+
coerce: _.identity as (x: string) => keyof typeof LogLevelMap,
|
|
33
|
+
},
|
|
34
|
+
config: {
|
|
35
|
+
alias: 'c',
|
|
36
|
+
type: 'string',
|
|
37
|
+
describe: 'Path to config file',
|
|
38
|
+
normalize: true,
|
|
39
|
+
nargs: 1,
|
|
40
|
+
requiresArg: true,
|
|
41
|
+
defaultDescription: '(discovered automatically)',
|
|
42
|
+
},
|
|
43
|
+
'no-config': {
|
|
44
|
+
type: 'boolean',
|
|
45
|
+
describe: 'Disable config file discovery',
|
|
46
|
+
},
|
|
47
|
+
})
|
|
48
|
+
.middleware(
|
|
49
|
+
/**
|
|
50
|
+
* Configures logging; `--verbose` implies `--log-level=debug`
|
|
51
|
+
*/
|
|
52
|
+
(argv) => {
|
|
53
|
+
if (argv.verbose) {
|
|
54
|
+
argv.logLevel = 'debug';
|
|
55
|
+
log.debug('Debug logging enabled via --verbose');
|
|
56
|
+
}
|
|
57
|
+
log.level = LogLevelMap[argv.logLevel];
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
.fail(
|
|
61
|
+
/**
|
|
62
|
+
* Custom failure handler so we can log nicely.
|
|
63
|
+
*/
|
|
64
|
+
(msg: string | null, error) => {
|
|
65
|
+
// if it is a DocutilsError, it has nothing to do with the CLI
|
|
66
|
+
if (error instanceof DocutilsError) {
|
|
67
|
+
log.error(error.message);
|
|
68
|
+
} else {
|
|
69
|
+
y.showHelp();
|
|
70
|
+
log.error(msg ?? error.message);
|
|
71
|
+
}
|
|
72
|
+
y.exit(1, error);
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
.config(config)
|
|
76
|
+
// at least one command is required (but not for --version or --help)
|
|
77
|
+
.demandCommand(1)
|
|
78
|
+
// fail if unknown option or command is provided
|
|
79
|
+
.strict()
|
|
80
|
+
.parseAsync();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (require.main === module) {
|
|
84
|
+
// eslint-disable-next-line promise/prefer-await-to-then
|
|
85
|
+
main().catch((err) => {
|
|
86
|
+
log.error('Caught otherwise-unhandled rejection (this is probably a bug):', err);
|
|
87
|
+
});
|
|
88
|
+
}
|
package/lib/constants.ts
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants used across various modules in this package
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import {LogLevel} from 'consola';
|
|
6
|
+
import {readFileSync} from 'node:fs';
|
|
7
|
+
import {fs} from '@appium/support';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import {PackageJson} from 'type-fest';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* CLI executable name
|
|
13
|
+
*/
|
|
14
|
+
export const NAME_BIN = 'appium-docs';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Expected name of the `mkdocs.yml` config file
|
|
18
|
+
*/
|
|
19
|
+
export const NAME_MKDOCS_YML = 'mkdocs.yml';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Default name of the `tsconfig.json` config file
|
|
23
|
+
*/
|
|
24
|
+
export const NAME_TSCONFIG_JSON = 'tsconfig.json';
|
|
25
|
+
/**
|
|
26
|
+
* `python` executable
|
|
27
|
+
*/
|
|
28
|
+
export const NAME_PYTHON = 'python';
|
|
29
|
+
/**
|
|
30
|
+
* Default name of the `typedoc.json` config file
|
|
31
|
+
*/
|
|
32
|
+
export const NAME_TYPEDOC_JSON = 'typedoc.json';
|
|
33
|
+
/**
|
|
34
|
+
* It's `package.json`!
|
|
35
|
+
*/
|
|
36
|
+
export const NAME_PACKAGE_JSON = 'package.json';
|
|
37
|
+
/**
|
|
38
|
+
* Name of the `requirements.txt` file for `pip`
|
|
39
|
+
*/
|
|
40
|
+
export const NAME_REQUIREMENTS_TXT = 'requirements.txt';
|
|
41
|
+
/**
|
|
42
|
+
* Name of the `$schema` property which can be present in JSON files; it may need to be removed to
|
|
43
|
+
* avoid warnings/errors by 3p libs
|
|
44
|
+
*/
|
|
45
|
+
export const NAME_SCHEMA = '$schema';
|
|
46
|
+
/**
|
|
47
|
+
* Name of the `mkdocs` executable
|
|
48
|
+
*/
|
|
49
|
+
export const NAME_MKDOCS = 'mkdocs';
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Name of the `mike` executable
|
|
53
|
+
*/
|
|
54
|
+
export const NAME_MIKE = 'mike';
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Name of the `typedoc` executable
|
|
58
|
+
*/
|
|
59
|
+
export const NAME_TYPEDOC = 'typedoc';
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Name of the `pip` module.
|
|
63
|
+
*
|
|
64
|
+
* @remarks We don't execute the `pip` executable; but rather use `python -m pip` since that seems
|
|
65
|
+
* to work better ... on my computer.
|
|
66
|
+
*/
|
|
67
|
+
export const NAME_PIP = 'pip';
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Name of the `npm` executable, which we use to check for
|
|
71
|
+
*/
|
|
72
|
+
export const NAME_NPM = 'npm';
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The name of the `typescript` package (not the `tsc` executable)
|
|
76
|
+
*/
|
|
77
|
+
export const NAME_TYPESCRIPT = 'typescript';
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Code for a "file not found" error
|
|
81
|
+
*/
|
|
82
|
+
export const NAME_ERR_ENOENT = 'ENOENT';
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Code for a "file already exists" error
|
|
86
|
+
*/
|
|
87
|
+
export const NAME_ERR_EEXIST = 'EEXIST';
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Default log level
|
|
91
|
+
*/
|
|
92
|
+
export const DEFAULT_LOG_LEVEL = 'info';
|
|
93
|
+
/**
|
|
94
|
+
* Blocking I/O
|
|
95
|
+
*/
|
|
96
|
+
export const PKG_ROOT_DIR = fs.findRoot(__dirname);
|
|
97
|
+
/**
|
|
98
|
+
* Blocking I/O
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
export const DOCUTILS_PKG: PackageJson = JSON.parse(
|
|
102
|
+
readFileSync(path.join(PKG_ROOT_DIR, NAME_PACKAGE_JSON), 'utf8')
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Path to the `requirements.txt` file (in this package)
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
export const REQUIREMENTS_TXT_PATH = path.join(PKG_ROOT_DIR, NAME_REQUIREMENTS_TXT);
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The default output path for Typedoc, computed relative to the consuming package's root
|
|
113
|
+
*/
|
|
114
|
+
export const DEFAULT_REL_TYPEDOC_OUT_PATH = path.join('docs', 'reference');
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* The default branch to deploy to
|
|
118
|
+
*/
|
|
119
|
+
export const DEFAULT_DEPLOY_BRANCH = 'gh-pages';
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The default remote to push the deployed branch to
|
|
123
|
+
*/
|
|
124
|
+
export const DEFAULT_DEPLOY_REMOTE = 'origin';
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* The default port for serving docs
|
|
128
|
+
*/
|
|
129
|
+
export const DEFAULT_SERVE_PORT = 8000;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* The default host for serving docs
|
|
133
|
+
*/
|
|
134
|
+
export const DEFAULT_SERVE_HOST = 'localhost';
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Mapping of `@appium/docutils`' log levels to `consola` log levels
|
|
138
|
+
*/
|
|
139
|
+
export const LogLevelMap = {
|
|
140
|
+
silent: LogLevel.Silent,
|
|
141
|
+
error: LogLevel.Error,
|
|
142
|
+
warn: LogLevel.Warn,
|
|
143
|
+
info: LogLevel.Info,
|
|
144
|
+
debug: LogLevel.Debug,
|
|
145
|
+
} as const;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Default site nav header text
|
|
149
|
+
*/
|
|
150
|
+
export const DEFAULT_NAV_HEADER = 'Reference';
|
package/lib/error.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export class DocutilsError extends Error {}
|