Skip to content

Commit

Permalink
fix(watch): do not rebuild on docs output target file changes
Browse files Browse the repository at this point in the history
  • Loading branch information
adamdbradley committed Sep 2, 2020
1 parent 298d89c commit 4529de7
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 12 deletions.
27 changes: 18 additions & 9 deletions 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',
Expand Down Expand Up @@ -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;
}

Expand All @@ -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');
Expand All @@ -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`;
}
Expand All @@ -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`;
}
Expand Down
18 changes: 15 additions & 3 deletions 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
Expand Down Expand Up @@ -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;
};

0 comments on commit 4529de7

Please sign in to comment.