From 4529de75171f6702f3c277208bdb5b85298e9417 Mon Sep 17 00:00:00 2001 From: Adam Bradley Date: Wed, 2 Sep 2020 09:37:59 -0500 Subject: [PATCH] fix(watch): do not rebuild on docs output target file changes --- src/compiler/config/outputs/validate-docs.ts | 27 +++++++++++++------- src/compiler/fs-watch/fs-watch-rebuild.ts | 18 ++++++++++--- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/compiler/config/outputs/validate-docs.ts b/src/compiler/config/outputs/validate-docs.ts index 70ca43aacf1..9710ebce7c0 100644 --- a/src/compiler/config/outputs/validate-docs.ts +++ b/src/compiler/config/outputs/validate-docs.ts @@ -1,14 +1,19 @@ import type * as d from '../../../declarations'; -import { buildError } from '@utils'; +import { buildError, isFunction, isString } from '@utils'; import { isAbsolute, join } from 'path'; -import { isOutputTargetDocsCustom, isOutputTargetDocsJson, isOutputTargetDocsReadme, isOutputTargetDocsVscode } from '../../output-targets/output-utils'; +import { + isOutputTargetDocsCustom, + isOutputTargetDocsJson, + isOutputTargetDocsReadme, + isOutputTargetDocsVscode, +} from '../../output-targets/output-utils'; import { NOTE } from '../../docs/constants'; export const validateDocs = (config: d.Config, diagnostics: d.Diagnostic[], userOutputs: d.OutputTarget[]) => { const docsOutputs: d.OutputTarget[] = []; // json docs flag - if (typeof config.flags.docsJson === 'string') { + if (isString(config.flags.docsJson)) { docsOutputs.push( validateJsonDocsOutputTarget(config, diagnostics, { type: 'docs-json', @@ -52,7 +57,7 @@ export const validateDocs = (config: d.Config, diagnostics: d.Diagnostic[], user }; const validateReadmeOutputTarget = (config: d.Config, outputTarget: d.OutputTargetDocsReadme) => { - if (typeof outputTarget.dir !== 'string') { + if (!isString(outputTarget.dir)) { outputTarget.dir = config.srcDir; } @@ -67,14 +72,18 @@ const validateReadmeOutputTarget = (config: d.Config, outputTarget: d.OutputTarg return outputTarget; }; -const validateJsonDocsOutputTarget = (config: d.Config, diagnostics: d.Diagnostic[], outputTarget: d.OutputTargetDocsJson) => { - if (typeof outputTarget.file !== 'string') { +const validateJsonDocsOutputTarget = ( + config: d.Config, + diagnostics: d.Diagnostic[], + outputTarget: d.OutputTargetDocsJson, +) => { + if (!isString(outputTarget.file)) { const err = buildError(diagnostics); err.messageText = `docs-json outputTarget missing the "file" option`; } outputTarget.file = join(config.rootDir, outputTarget.file); - if (typeof outputTarget.typesFile === 'string') { + if (isString(outputTarget.typesFile)) { outputTarget.typesFile = join(config.rootDir, outputTarget.typesFile); } else if (outputTarget.typesFile !== null && outputTarget.file.endsWith('.json')) { outputTarget.typesFile = outputTarget.file.replace(/\.json$/, '.d.ts'); @@ -84,7 +93,7 @@ const validateJsonDocsOutputTarget = (config: d.Config, diagnostics: d.Diagnosti }; const validateCustomDocsOutputTarget = (diagnostics: d.Diagnostic[], outputTarget: d.OutputTargetDocsCustom) => { - if (typeof outputTarget.generator !== 'function') { + if (!isFunction(outputTarget.generator)) { const err = buildError(diagnostics); err.messageText = `docs-custom outputTarget missing the "generator" function`; } @@ -94,7 +103,7 @@ const validateCustomDocsOutputTarget = (diagnostics: d.Diagnostic[], outputTarge }; const validateVScodeDocsOutputTarget = (diagnostics: d.Diagnostic[], outputTarget: d.OutputTargetDocsVscode) => { - if (typeof outputTarget.file !== 'string') { + if (!isString(outputTarget.file)) { const err = buildError(diagnostics); err.messageText = `docs-vscode outputTarget missing the "file" path`; } diff --git a/src/compiler/fs-watch/fs-watch-rebuild.ts b/src/compiler/fs-watch/fs-watch-rebuild.ts index 505dcce0df5..622931b7b5f 100644 --- a/src/compiler/fs-watch/fs-watch-rebuild.ts +++ b/src/compiler/fs-watch/fs-watch-rebuild.ts @@ -1,6 +1,7 @@ import type * as d from '../../declarations'; import { basename } from 'path'; import { isString, unique } from '@utils'; +import { isOutputTargetDocsJson, isOutputTargetStats, isOutputTargetDocsVscode } from '../output-targets/output-utils'; export const filesChanged = (buildCtx: d.BuildCtx) => { // files changed include updated, added and deleted @@ -80,9 +81,20 @@ export const updateCacheFromRebuild = (compilerCtx: d.CompilerCtx, buildCtx: d.B export const isWatchIgnorePath = (config: d.Config, path: string) => { if (isString(path)) { - return (config.watchIgnoredRegex as RegExp[]).some(reg => { - return reg.test(path); - }); + const isWatchIgnore = (config.watchIgnoredRegex as RegExp[]).some(reg => reg.test(path)); + if (isWatchIgnore) { + return true; + } + const outputTargets = config.outputTargets; + const ignoreFiles = [ + ...outputTargets.filter(isOutputTargetDocsJson).map(o => o.file), + ...outputTargets.filter(isOutputTargetDocsJson).map(o => o.typesFile), + ...outputTargets.filter(isOutputTargetStats).map(o => o.file), + ...outputTargets.filter(isOutputTargetDocsVscode).map(o => o.file), + ]; + if (ignoreFiles.includes(path)) { + return true; + } } return false; };