@appium/docutils 1.0.33 → 1.1.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.
@@ -175,9 +175,14 @@ class DocutilsValidator extends node_events_1.EventEmitter {
175
175
  * Validates that the correct version of `mkdocs` is installed
176
176
  */
177
177
  async validateMkDocs() {
178
+ log.debug(`Validating MkDocs version`);
178
179
  const pythonPath = this.pythonPath ?? (await (0, fs_1.findPython)());
179
180
  if (!pythonPath) {
180
- return this.fail(`Could not find ${constants_1.NAME_PYTHON} executable in PATH. If it is installed, check your PATH environment variable.`);
181
+ return this.fail(constants_1.MESSAGE_PYTHON_MISSING);
182
+ }
183
+ const mkdocsInstalled = await (0, fs_1.isMkDocsInstalled)();
184
+ if (!mkdocsInstalled) {
185
+ return this.fail(`Could not find MkDocs executable; please run "${constants_1.NAME_BIN} init"`);
181
186
  }
182
187
  let rawMkDocsVersion;
183
188
  try {
@@ -187,20 +192,18 @@ class DocutilsValidator extends node_events_1.EventEmitter {
187
192
  return this.fail(`Failed to get MkDocs version: ${err}`);
188
193
  }
189
194
  const match = rawMkDocsVersion.match(MKDOCS_VERSION_REGEX);
190
- if (match) {
191
- const version = match[1];
192
- const reqs = await this.parseRequirementsTxt();
193
- const mkDocsPipPkg = lodash_1.default.find(reqs, { name: constants_1.NAME_MKDOCS });
194
- if (!mkDocsPipPkg) {
195
- throw new error_1.DocutilsError(`No ${constants_1.NAME_MKDOCS} package in ${constants_1.REQUIREMENTS_TXT_PATH}. This is a bug.`);
196
- }
197
- const { version: mkDocsReqdVersion } = mkDocsPipPkg;
198
- if (version !== mkDocsReqdVersion) {
199
- return this.fail(`${constants_1.NAME_MKDOCS} is v${version}, but ${constants_1.REQUIREMENTS_TXT_PATH} requires v${mkDocsReqdVersion}`);
200
- }
195
+ if (!match) {
196
+ return this.fail(`Could not parse MkDocs version. Output was ${rawMkDocsVersion}`);
201
197
  }
202
- else {
203
- throw new error_1.DocutilsError(`Could not parse version from MkDocs. This is a bug. Output was ${rawMkDocsVersion}`);
198
+ const version = match[1];
199
+ const reqs = await this.parseRequirementsTxt();
200
+ const mkDocsPipPkg = lodash_1.default.find(reqs, { name: constants_1.NAME_MKDOCS });
201
+ if (!mkDocsPipPkg) {
202
+ throw new error_1.DocutilsError(`No ${constants_1.NAME_MKDOCS} package in ${constants_1.REQUIREMENTS_TXT_PATH}. This is a bug`);
203
+ }
204
+ const { version: mkDocsReqdVersion } = mkDocsPipPkg;
205
+ if (version !== mkDocsReqdVersion) {
206
+ return this.fail(`MkDocs v${version} is installed, but v${mkDocsReqdVersion} is required`);
204
207
  }
205
208
  this.ok('MkDocs install OK');
206
209
  }
@@ -209,10 +212,11 @@ class DocutilsValidator extends node_events_1.EventEmitter {
209
212
  *
210
213
  * It checks if the file exists, if it can be parsed as YAML, and if it has a `site_name` property.
211
214
  */
212
- async validateMkDocsConfig(mkDocsYmlPath) {
213
- mkDocsYmlPath = mkDocsYmlPath ?? this.mkDocsYmlPath ?? (await (0, fs_1.findMkDocsYml)(this.cwd));
215
+ async validateMkDocsConfig() {
216
+ log.debug(`Validating ${constants_1.NAME_MKDOCS_YML}`);
217
+ const mkDocsYmlPath = this.mkDocsYmlPath ?? (await (0, fs_1.findMkDocsYml)(this.cwd));
214
218
  if (!mkDocsYmlPath) {
215
- return this.fail(`Could not find ${constants_1.NAME_MKDOCS_YML} from ${this.cwd}. Run "${constants_1.NAME_BIN} init" to create it`);
219
+ return this.fail(`Could not find ${constants_1.NAME_MKDOCS_YML} from ${this.cwd}; please run "${constants_1.NAME_BIN} init"`);
216
220
  }
217
221
  let mkDocsYml;
218
222
  try {
@@ -236,23 +240,23 @@ class DocutilsValidator extends node_events_1.EventEmitter {
236
240
  * This is required because other validators need `npm exec` to work, which is only available in npm 7+.
237
241
  */
238
242
  async validateNpmVersion() {
243
+ log.debug(`Validating ${constants_1.NAME_NPM} version`);
239
244
  const npmEngineRange = constants_1.DOCUTILS_PKG.engines?.npm;
240
245
  if (!npmEngineRange) {
241
- throw new error_1.DocutilsError('Could not find property engines.npm in package.json. This is a bug');
246
+ throw new error_1.DocutilsError(`Could not find property 'engines.npm' in ${constants_1.NAME_PACKAGE_JSON}. This is a bug`);
247
+ }
248
+ const npmPath = this.npmPath ?? (await (0, fs_1.whichNpm)());
249
+ if (!npmPath) {
250
+ throw new error_1.DocutilsError(`Could not find ${constants_1.NAME_NPM} in PATH. That seems weird, doesn't it?`);
242
251
  }
243
252
  try {
244
- const npmPath = this.npmPath ?? (await (0, fs_1.whichNpm)());
245
- if (!npmPath) {
246
- throw new error_1.DocutilsError(`Could not find ${constants_1.NAME_NPM} in PATH. That seems weird, doesn't it?`);
247
- }
248
- const { stdout: npmVersion } = await (0, teen_process_1.exec)(npmPath, ['-v']);
253
+ const { stdout: npmVersion } = await support_1.npm.exec('-v', [], { cwd: this.cwd });
249
254
  if (!(0, semver_1.satisfies)(npmVersion.trim(), npmEngineRange)) {
250
- this.fail(`${constants_1.NAME_NPM} is version ${npmVersion}, but ${npmEngineRange} is required`);
251
- return;
255
+ return this.fail(`${constants_1.NAME_NPM} v${npmVersion} is installed, but ${npmEngineRange} is required`);
252
256
  }
253
257
  }
254
258
  catch {
255
- return this.fail(`Could not find ${this.npmPath} in PATH. Is it installed?`);
259
+ return this.fail(`Could not retrieve ${constants_1.NAME_NPM} version`);
256
260
  }
257
261
  this.ok(`${constants_1.NAME_NPM} version OK`);
258
262
  }
@@ -263,11 +267,12 @@ class DocutilsValidator extends node_events_1.EventEmitter {
263
267
  * contents of our `requirements.txt`. Versions _must_ match exactly.
264
268
  */
265
269
  async validatePythonDeps() {
266
- let pipListOutput;
270
+ log.debug(`Validating required ${constants_1.NAME_PYTHON} package versions`);
267
271
  const pythonPath = this.pythonPath ?? (await (0, fs_1.findPython)());
268
272
  if (!pythonPath) {
269
- return this.fail(`Could not find ${constants_1.NAME_PYTHON} in PATH. Is it installed?`);
273
+ return this.fail(constants_1.MESSAGE_PYTHON_MISSING);
270
274
  }
275
+ let pipListOutput;
271
276
  try {
272
277
  ({ stdout: pipListOutput } = await (0, teen_process_1.exec)(pythonPath, [
273
278
  '-m',
@@ -278,14 +283,14 @@ class DocutilsValidator extends node_events_1.EventEmitter {
278
283
  ]));
279
284
  }
280
285
  catch {
281
- return this.fail(`Could not find ${constants_1.NAME_PIP} in PATH. Is it installed?`);
286
+ return this.fail(`Could not find ${constants_1.NAME_PIP} installation for Python at ${pythonPath}. Is it installed?`);
282
287
  }
283
288
  let installedPkgs;
284
289
  try {
285
290
  installedPkgs = JSON.parse(pipListOutput);
286
291
  }
287
292
  catch {
288
- throw new error_1.DocutilsError(`Could not parse output of "${constants_1.NAME_PIP} list" as JSON: ${pipListOutput}`);
293
+ return this.fail(`Could not parse output of "${constants_1.NAME_PIP} list" as JSON: ${pipListOutput}`);
289
294
  }
290
295
  const pkgsByName = lodash_1.default.mapValues(lodash_1.default.keyBy(installedPkgs, 'name'), 'version');
291
296
  log.debug('Installed Python packages: %O', pkgsByName);
@@ -297,7 +302,7 @@ class DocutilsValidator extends node_events_1.EventEmitter {
297
302
  if (!version) {
298
303
  missingPackages.push(reqdPkg);
299
304
  }
300
- if (version !== reqdPkg.version) {
305
+ else if (version !== reqdPkg.version) {
301
306
  invalidVersionPackages.push([reqdPkg, { name: reqdPkg.name, version }]);
302
307
  }
303
308
  }
@@ -321,33 +326,39 @@ class DocutilsValidator extends node_events_1.EventEmitter {
321
326
  * Asserts that the Python version is 3.x
322
327
  */
323
328
  async validatePythonVersion() {
329
+ log.debug(`Validating ${constants_1.NAME_PYTHON} version`);
324
330
  const pythonPath = this.pythonPath ?? (await (0, fs_1.findPython)());
325
331
  if (!pythonPath) {
326
- return this.fail(`Could not find ${constants_1.NAME_PYTHON} in PATH. Is it installed?`);
332
+ return this.fail(constants_1.MESSAGE_PYTHON_MISSING);
327
333
  }
328
334
  try {
329
335
  const { stdout } = await (0, teen_process_1.exec)(pythonPath, ['--version']);
330
336
  if (!stdout.includes(PYTHON_VER_STR)) {
331
- return this.fail(`Could not find Python 3.x in PATH; found ${stdout}. Please use --python-path`);
337
+ return this.fail(`Could not find Python 3.x in PATH; found ${stdout}`);
332
338
  }
333
339
  }
334
340
  catch {
335
- return this.fail(`Could not find Python 3.x in PATH.`);
341
+ return this.fail(`Could not retrieve Python version`);
336
342
  }
337
343
  this.ok('Python version OK');
338
344
  }
339
345
  /**
340
- * Asserts that TypeScript is installed, runnable, the correct version, and a parseable `tsconfig.json` exists.
346
+ * Asserts that TypeScript is installed, runnable, and the correct version.
341
347
  */
342
348
  async validateTypeScript() {
349
+ log.debug(`Validating ${constants_1.NAME_TYPESCRIPT} version`);
343
350
  const pkgDir = await this.findPkgDir();
344
351
  if (!pkgDir) {
345
- return this.fail(`Could not find package.json in ${this.cwd}`);
352
+ return this.fail(`Could not find ${constants_1.NAME_PACKAGE_JSON} in ${this.cwd}`);
353
+ }
354
+ const npmPath = this.npmPath ?? (await (0, fs_1.whichNpm)());
355
+ if (!npmPath) {
356
+ throw new error_1.DocutilsError(`Could not find ${constants_1.NAME_NPM} in PATH. That seems weird, doesn't it?`);
346
357
  }
347
358
  let typeScriptVersion;
348
359
  let rawTypeScriptVersion;
349
360
  try {
350
- ({ stdout: rawTypeScriptVersion } = await (0, teen_process_1.exec)(constants_1.NAME_NPM, ['exec', 'tsc', '--', '--version'], {
361
+ ({ stdout: rawTypeScriptVersion } = await support_1.npm.exec('exec', ['tsc', '--', '--version'], {
351
362
  cwd: pkgDir,
352
363
  }));
353
364
  }
@@ -363,10 +374,10 @@ class DocutilsValidator extends node_events_1.EventEmitter {
363
374
  }
364
375
  const reqdTypeScriptVersion = constants_1.DOCUTILS_PKG.dependencies?.typescript;
365
376
  if (!reqdTypeScriptVersion) {
366
- throw new error_1.DocutilsError(`Could not find a dep for ${constants_1.NAME_TYPESCRIPT} in ${constants_1.NAME_PACKAGE_JSON}. This is a bug.`);
377
+ throw new error_1.DocutilsError(`Could not find ${constants_1.NAME_TYPESCRIPT} dependency in ${constants_1.NAME_PACKAGE_JSON}. This is a bug`);
367
378
  }
368
379
  if (!(0, semver_1.satisfies)(typeScriptVersion, reqdTypeScriptVersion)) {
369
- return this.fail(`Found TypeScript version ${typeScriptVersion}, but ${reqdTypeScriptVersion} is required`);
380
+ return this.fail(`TypeScript v${typeScriptVersion} is installed, but v${reqdTypeScriptVersion} is required`);
370
381
  }
371
382
  this.ok('TypeScript install OK');
372
383
  }
@@ -374,21 +385,21 @@ class DocutilsValidator extends node_events_1.EventEmitter {
374
385
  * Validates a `tsconfig.json` file
375
386
  */
376
387
  async validateTypeScriptConfig() {
388
+ log.debug(`Validating ${constants_1.NAME_TSCONFIG_JSON}`);
377
389
  const pkgDir = await this.findPkgDir();
378
390
  if (!pkgDir) {
379
- return this.fail(new error_1.DocutilsError(`Could not find package.json in ${this.cwd}`));
391
+ return this.fail(`Could not find ${constants_1.NAME_PACKAGE_JSON} in ${this.cwd}`);
380
392
  }
381
- const tsconfigJsonPath = (this.tsconfigJsonPath =
382
- this.tsconfigJsonPath ?? node_path_1.default.join(pkgDir, constants_1.NAME_TSCONFIG_JSON));
393
+ const tsconfigJsonPath = this.tsconfigJsonPath ?? node_path_1.default.join(pkgDir, constants_1.NAME_TSCONFIG_JSON);
383
394
  const relTsconfigJsonPath = (0, util_1.relative)(this.cwd, tsconfigJsonPath);
384
395
  try {
385
396
  await (0, fs_1.readJson5)(tsconfigJsonPath);
386
397
  }
387
398
  catch (e) {
388
399
  if (e instanceof SyntaxError) {
389
- return this.fail(new error_1.DocutilsError(`Unparseable ${constants_1.NAME_TSCONFIG_JSON} at ${relTsconfigJsonPath}: ${e}`));
400
+ return this.fail(`Could not parse ${constants_1.NAME_TSCONFIG_JSON} at ${relTsconfigJsonPath}: ${e}`);
390
401
  }
391
- return this.fail(new error_1.DocutilsError(`Missing ${constants_1.NAME_TSCONFIG_JSON} at ${relTsconfigJsonPath}; "${constants_1.NAME_BIN} init" can help`));
402
+ return this.fail(`Could not find ${constants_1.NAME_TSCONFIG_JSON} at ${relTsconfigJsonPath}; please run "${constants_1.NAME_BIN} init"`);
392
403
  }
393
404
  this.ok('TypeScript config OK');
394
405
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../lib/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../lib/validate.ts"],"names":[],"mappings":"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"}
@@ -16,10 +16,9 @@ import {
16
16
  NAME_BIN,
17
17
  NAME_MIKE,
18
18
  NAME_MKDOCS_YML,
19
- NAME_PYTHON,
20
19
  } from '../constants';
21
20
  import {DocutilsError} from '../error';
22
- import {findMike, findMkDocsYml, findPython, readPackageJson} from '../fs';
21
+ import {findMike, findMkDocsYml, isMkDocsInstalled, readPackageJson, requirePython} from '../fs';
23
22
  import {getLogger} from '../logger';
24
23
  import {argify, spawnBackgroundProcess, SpawnBackgroundProcessOpts, stopwatch} from '../util';
25
24
 
@@ -37,6 +36,7 @@ async function doServe(
37
36
  opts: SpawnBackgroundProcessOpts = {},
38
37
  ) {
39
38
  const finalArgs = ['serve', ...args];
39
+ log.debug('Executing %s via: %s %O', NAME_MIKE, mikePath, finalArgs);
40
40
  return spawnBackgroundProcess(mikePath, finalArgs, opts);
41
41
  }
42
42
 
@@ -99,18 +99,17 @@ export async function deploy({
99
99
  }: DeployOpts = {}) {
100
100
  const stop = stopwatch('deploy');
101
101
 
102
- const pythonPath = await findPython();
102
+ await requirePython();
103
103
 
104
- if (!pythonPath) {
105
- throw new DocutilsError(
106
- `Could not find ${NAME_PYTHON}3/${NAME_PYTHON} executable in PATH; please install Python v3`,
107
- );
104
+ const mkdocsInstalled = await isMkDocsInstalled();
105
+ if (!mkdocsInstalled) {
106
+ throw new DocutilsError(`Could not find MkDocs executable; please run "${NAME_BIN} init"`);
108
107
  }
109
108
 
110
109
  mkDocsYmlPath = mkDocsYmlPath ?? (await findMkDocsYml(cwd));
111
110
  if (!mkDocsYmlPath) {
112
111
  throw new DocutilsError(
113
- `Could not find ${NAME_MKDOCS_YML} from ${cwd}; run "${NAME_BIN} init" to create it`,
112
+ `Could not find ${NAME_MKDOCS_YML} from ${cwd}; please run "${NAME_BIN} init"`,
114
113
  );
115
114
  }
116
115
  version = version ?? (await findDeployVersion(packageJsonPath, cwd));
@@ -7,9 +7,9 @@
7
7
 
8
8
  import path from 'node:path';
9
9
  import {exec, TeenProcessExecOptions} from 'teen_process';
10
- import {DEFAULT_SITE_DIR, NAME_BIN, NAME_MKDOCS, NAME_MKDOCS_YML, NAME_PYTHON} from '../constants';
10
+ import {DEFAULT_SITE_DIR, NAME_BIN, NAME_MKDOCS, NAME_MKDOCS_YML} from '../constants';
11
11
  import {DocutilsError} from '../error';
12
- import {findMkDocsYml, findPython, readMkDocsYml} from '../fs';
12
+ import {findMkDocsYml, isMkDocsInstalled, readMkDocsYml, requirePython} from '../fs';
13
13
  import {getLogger} from '../logger';
14
14
  import {relative, spawnBackgroundProcess, SpawnBackgroundProcessOpts, stopwatch} from '../util';
15
15
 
@@ -58,11 +58,11 @@ export async function buildSite({
58
58
  }: BuildMkDocsOpts = {}) {
59
59
  const stop = stopwatch('build-mkdocs');
60
60
 
61
- const pythonPath = await findPython();
62
- if (!pythonPath) {
63
- throw new DocutilsError(
64
- `Could not find ${NAME_PYTHON}3/${NAME_PYTHON} executable in PATH; please install Python v3`,
65
- );
61
+ const pythonPath = await requirePython();
62
+
63
+ const mkdocsInstalled = await isMkDocsInstalled();
64
+ if (!mkdocsInstalled) {
65
+ throw new DocutilsError(`Could not find MkDocs executable; please run "${NAME_BIN} init"`);
66
66
  }
67
67
 
68
68
  mkDocsYmlPath = mkDocsYmlPath
@@ -70,7 +70,7 @@ export async function buildSite({
70
70
  : await findMkDocsYml(cwd);
71
71
  if (!mkDocsYmlPath) {
72
72
  throw new DocutilsError(
73
- `Could not find ${NAME_MKDOCS_YML} from ${cwd}; run "${NAME_BIN} init" to create it`,
73
+ `Could not find ${NAME_MKDOCS_YML} from ${cwd}; please run "${NAME_BIN} init"`,
74
74
  );
75
75
  }
76
76
  const mkdocsArgs = ['-f', mkDocsYmlPath];
package/lib/constants.ts CHANGED
@@ -73,11 +73,6 @@ export const NAME_TYPESCRIPT = 'typescript';
73
73
  */
74
74
  export const NAME_ERR_ENOENT = 'ENOENT';
75
75
 
76
- /**
77
- * Code for a "file already exists" error
78
- */
79
- export const NAME_ERR_EEXIST = 'EEXIST';
80
-
81
76
  /**
82
77
  * Name of the default theme
83
78
  */
@@ -153,3 +148,8 @@ export const DEFAULT_SITE_DIR = 'site';
153
148
  * To ensure backwards compatibility, its environment variable version is used
154
149
  */
155
150
  export const PIP_ENV_VARS = {PIP_BREAK_SYSTEM_PACKAGES: '1'};
151
+
152
+ /**
153
+ * Error message emitted when the path to Python was not found
154
+ */
155
+ export const MESSAGE_PYTHON_MISSING = 'Could not find Python in PATH. Is it installed?';
package/lib/fs.ts CHANGED
@@ -11,7 +11,15 @@ import _pkgDir from 'pkg-dir';
11
11
  import readPkg, {NormalizedPackageJson, PackageJson} from 'read-pkg';
12
12
  import {JsonValue} from 'type-fest';
13
13
  import YAML from 'yaml';
14
- import {NAME_MIKE, NAME_MKDOCS_YML, NAME_NPM, NAME_PACKAGE_JSON, NAME_PYTHON} from './constants';
14
+ import {
15
+ MESSAGE_PYTHON_MISSING,
16
+ NAME_MIKE,
17
+ NAME_MKDOCS,
18
+ NAME_MKDOCS_YML,
19
+ NAME_NPM,
20
+ NAME_PACKAGE_JSON,
21
+ NAME_PYTHON,
22
+ } from './constants';
15
23
  import {DocutilsError} from './error';
16
24
  import {getLogger} from './logger';
17
25
  import {MkDocsYml} from './model';
@@ -152,18 +160,14 @@ export const readJson = _.memoize(
152
160
  );
153
161
 
154
162
  /**
155
- * Writes a file, but will not overwrite an existing file unless `overwrite` is true
156
- *
157
- * Will stringify JSON objects
163
+ * Writes contents to a file. Any JSON objects are stringified
158
164
  * @param filepath - Path to file
159
165
  * @param content - File contents
160
- * @param overwrite - If `true`, overwrite existing files
161
166
  */
162
- export function safeWriteFile(filepath: string, content: JsonValue, overwrite = false) {
167
+ export function writeFileString(filepath: string, content: JsonValue) {
163
168
  const data: string = _.isString(content) ? content : JSON.stringify(content, undefined, 2);
164
169
  return fs.writeFile(filepath, data, {
165
170
  encoding: 'utf8',
166
- flag: overwrite ? 'w' : 'wx',
167
171
  });
168
172
  }
169
173
 
@@ -189,6 +193,28 @@ const whichPython = _.partial(cachedWhich, NAME_PYTHON, {nothrow: true});
189
193
  */
190
194
  const whichPython3 = _.partial(cachedWhich, `${NAME_PYTHON}3`, {nothrow: true});
191
195
 
196
+ /**
197
+ * Check if `mkdocs` is installed
198
+ */
199
+ export const isMkDocsInstalled = _.memoize(async (): Promise<boolean> => {
200
+ // see if it's in PATH
201
+ const mkDocsPath = await cachedWhich(NAME_MKDOCS, {nothrow: true});
202
+ if (mkDocsPath) {
203
+ return true;
204
+ }
205
+ // if it isn't, it should be invokable via `python -m`
206
+ const pythonPath = await findPython();
207
+ if (!pythonPath) {
208
+ return false;
209
+ }
210
+ try {
211
+ await exec(pythonPath, ['-m', NAME_MKDOCS]);
212
+ return true;
213
+ } catch {
214
+ return false;
215
+ }
216
+ });
217
+
192
218
  /**
193
219
  * `mike` cannot be invoked via `python -m`, so we need to find the script.
194
220
  */
@@ -225,6 +251,17 @@ export const findPython = _.memoize(
225
251
  async (): Promise<string | null> => (await whichPython3()) ?? (await whichPython()),
226
252
  );
227
253
 
254
+ /**
255
+ * Check if a path to Python exists, otherwise raise DocutilsError
256
+ */
257
+ export async function requirePython(pythonPath?: string): Promise<string> {
258
+ const foundPythonPath = pythonPath ?? (await findPython());
259
+ if (!foundPythonPath) {
260
+ throw new DocutilsError(MESSAGE_PYTHON_MISSING);
261
+ }
262
+ return foundPythonPath;
263
+ }
264
+
228
265
  /**
229
266
  * Reads an `mkdocs.yml` file, merges inherited configs, and returns the result. The result is cached.
230
267
  *
package/lib/init.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import * as JSON5 from 'json5';
8
- import {NAME_MKDOCS_YML, NAME_TSCONFIG_JSON, NAME_PYTHON, PIP_ENV_VARS, REQUIREMENTS_TXT_PATH} from './constants';
8
+ import {NAME_MKDOCS_YML, NAME_TSCONFIG_JSON, PIP_ENV_VARS, REQUIREMENTS_TXT_PATH} from './constants';
9
9
  import YAML from 'yaml';
10
10
  import {exec} from 'teen_process';
11
11
  import {Simplify} from 'type-fest';
@@ -15,7 +15,7 @@ import type { ScaffoldTask } from './scaffold';
15
15
  import {getLogger} from './logger';
16
16
  import {MkDocsYml, TsConfigJson} from './model';
17
17
  import _ from 'lodash';
18
- import {findPython, stringifyJson5, stringifyYaml} from './fs';
18
+ import {requirePython, stringifyJson5, stringifyYaml} from './fs';
19
19
 
20
20
  /**
21
21
  * Data for the base `mkdocs.yml` file
@@ -139,7 +139,7 @@ export async function initPython({
139
139
  dryRun = false,
140
140
  upgrade = false,
141
141
  }: InitPythonOptions = {}): Promise<void> {
142
- pythonPath = pythonPath ?? (await findPython()) ?? NAME_PYTHON;
142
+ const foundPythonPath = await requirePython(pythonPath);
143
143
 
144
144
  const args = ['-m', 'pip', 'install', '-r', REQUIREMENTS_TXT_PATH];
145
145
  if (upgrade) {
@@ -148,19 +148,19 @@ export async function initPython({
148
148
  if (dryRun) {
149
149
  dryRunLog.info(
150
150
  'Would execute command: %s %s (environment variables: %s)',
151
- pythonPath,
151
+ foundPythonPath,
152
152
  args.join(' '),
153
153
  PIP_ENV_VARS,
154
154
  );
155
155
  } else {
156
156
  log.debug('Executing command: %s %s (environment variables: %s)',
157
- pythonPath,
157
+ foundPythonPath,
158
158
  args.join(' '),
159
159
  PIP_ENV_VARS,
160
160
  );
161
161
  log.info('Installing Python dependencies...');
162
162
  try {
163
- const result = await exec(pythonPath, args, {env: PIP_ENV_VARS, shell: true});
163
+ const result = await exec(foundPythonPath, args, {env: PIP_ENV_VARS, shell: true});
164
164
  const {code, stdout} = result;
165
165
  if (code !== 0) {
166
166
  throw new DocutilsError(`Could not install Python dependencies. Reason: ${stdout}`);
@@ -171,7 +171,7 @@ export async function initPython({
171
171
  );
172
172
  }
173
173
  }
174
- log.success('Installed Python dependencies (or dependencies already installed)');
174
+ log.success('Successfully installed Python dependencies');
175
175
  }
176
176
 
177
177
  /**
package/lib/scaffold.ts CHANGED
@@ -12,8 +12,8 @@ import {JsonValue, JsonObject} from 'type-fest';
12
12
  import {DocutilsError} from './error';
13
13
  import {relative} from './util';
14
14
  import _ from 'lodash';
15
- import {stringifyJson, readPackageJson, safeWriteFile} from './fs';
16
- import {NAME_ERR_ENOENT, NAME_ERR_EEXIST} from './constants';
15
+ import {stringifyJson, readPackageJson, writeFileString} from './fs';
16
+ import {NAME_ERR_ENOENT} from './constants';
17
17
 
18
18
  const log = getLogger('init');
19
19
  const dryRunLog = getLogger('dry-run', log);
@@ -91,7 +91,7 @@ export function createScaffoldTask<Opts extends ScaffoldTaskOptions, T extends J
91
91
  dest = dest ?? path.join(pkgDir, defaultFilename);
92
92
  const relativeDest = relativePath(dest);
93
93
  log.debug('Initializing %s', relativeDest);
94
- let shouldWriteDest = false;
94
+ let destChangesNeeded = false;
95
95
  let isNew = false;
96
96
  let destContent: T;
97
97
  let result: ScaffoldTaskResult<T>;
@@ -103,7 +103,7 @@ export function createScaffoldTask<Opts extends ScaffoldTaskOptions, T extends J
103
103
  if (err.code !== NAME_ERR_ENOENT) {
104
104
  throw err;
105
105
  }
106
- shouldWriteDest = true;
106
+ destChangesNeeded = true;
107
107
  log.debug('Creating new file %s', relativeDest);
108
108
  destContent = {} as T;
109
109
  isNew = true;
@@ -112,9 +112,9 @@ export function createScaffoldTask<Opts extends ScaffoldTaskOptions, T extends J
112
112
  const defaults: T = transform(defaultContent, opts, pkg);
113
113
  const finalDestContent: T = _.defaultsDeep({}, destContent, defaults);
114
114
 
115
- shouldWriteDest = shouldWriteDest || !_.isEqual(destContent, finalDestContent);
115
+ destChangesNeeded = destChangesNeeded || !_.isEqual(destContent, finalDestContent);
116
116
 
117
- if (shouldWriteDest) {
117
+ if (destChangesNeeded) {
118
118
  log.info('Changes needed in %s', relativeDest);
119
119
  log.debug('Original %s: %O', relativeDest, destContent);
120
120
  log.debug('Final %s: %O', relativeDest, finalDestContent);
@@ -126,20 +126,19 @@ export function createScaffoldTask<Opts extends ScaffoldTaskOptions, T extends J
126
126
  return result;
127
127
  }
128
128
 
129
- try {
130
- await safeWriteFile(dest, finalDestContent, overwrite);
131
- if (isNew) {
132
- log.success('Initialized %s', description);
133
- } else {
134
- log.success('Updated %s', description);
135
- }
136
- } catch (e) {
137
- const err = e as NodeJS.ErrnoException;
138
- // this should only be thrown if `force` is false
139
- if (err.code === NAME_ERR_EEXIST) {
140
- log.info(`${relativeDest} already exists; continuing...`);
141
- log.debug(`Tried to apply patch:\n\n${patch}`);
142
- } else {
129
+ if (!isNew && !overwrite) {
130
+ log.info('File %s already exists, continuing (enable overwrite with "--force")', relativeDest);
131
+ log.debug('Tried to apply patch:\n\n%s', patch);
132
+ } else {
133
+ try {
134
+ await writeFileString(dest, finalDestContent);
135
+ if (isNew) {
136
+ log.success('Initialized %s', description);
137
+ } else {
138
+ log.success('Updated %s', description);
139
+ }
140
+ } catch (e) {
141
+ const err = e as NodeJS.ErrnoException;
143
142
  throw new DocutilsError(`Could not write to ${relativeDest}. Reason: ${err.message}`, {
144
143
  cause: err,
145
144
  });