Skip to content

Commit

Permalink
chore(config): propagate ValidatedConfig to output target validation (#…
Browse files Browse the repository at this point in the history
…3497)

this commit propagates the usage of `ValidatedConfig` throughout the
portion of the code that validates an output target defintion from a
configuration. This is being done following making sys a
required field on ValidatedConfig in 991843a
(#3491), where driving down the number of sys-related violations of
the compile time check is the primary driver. however, this commit
does also lay groundwork for future fields being made required on the
validated config, and require less proliferation of the type in the
future.

all output target validations were updated in this commit. the
validations for the legacy angular output target, and the custom
elements bundle output target. both of the aforementioned targets are
intended to be deprecated/removed in stencil v3. however, the level of
effort required to proliferate the change provides us with a more
accurate count of strictNullChecks violations, and does not require
waiting for a major version bump of stencil to drive the violation
count further
  • Loading branch information
rwaskiewicz authored Aug 5, 2022
1 parent 100e6fc commit 10421be
Show file tree
Hide file tree
Showing 9 changed files with 23 additions and 16 deletions.
2 changes: 1 addition & 1 deletion src/compiler/config/config-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { isAbsolute, join } from 'path';
import { isBoolean } from '@utils';
import type { ConfigFlags } from '../../cli/config-flags';

export const getAbsolutePath = (config: d.Config | d.UnvalidatedConfig, dir: string) => {
export const getAbsolutePath = (config: d.ValidatedConfig, dir: string) => {
if (!isAbsolute(dir)) {
dir = join(config.rootDir, dir);
}
Expand Down
8 changes: 4 additions & 4 deletions src/compiler/config/outputs/validate-angular.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,22 @@ import { isOutputTargetAngular } from '../../output-targets/output-utils';
import { isAbsolute, join } from 'path';
import { OutputTargetAngular } from '../../../declarations';

export const validateAngular = (userConfig: d.Config, userOutputs: d.OutputTarget[]): OutputTargetAngular[] => {
export const validateAngular = (config: d.ValidatedConfig, userOutputs: d.OutputTarget[]): OutputTargetAngular[] => {
const angularOutputTargets = userOutputs.filter(isOutputTargetAngular);
return angularOutputTargets.map((outputTarget) => {
let directivesProxyFile = outputTarget.directivesProxyFile;
if (directivesProxyFile && !isAbsolute(directivesProxyFile)) {
directivesProxyFile = join(userConfig.rootDir, directivesProxyFile);
directivesProxyFile = join(config.rootDir, directivesProxyFile);
}

let directivesArrayFile = outputTarget.directivesArrayFile;
if (directivesArrayFile && !isAbsolute(directivesArrayFile)) {
directivesArrayFile = join(userConfig.rootDir, directivesArrayFile);
directivesArrayFile = join(config.rootDir, directivesArrayFile);
}

let directivesUtilsFile = outputTarget.directivesUtilsFile;
if (directivesUtilsFile && !isAbsolute(directivesUtilsFile)) {
directivesUtilsFile = join(userConfig.rootDir, directivesUtilsFile);
directivesUtilsFile = join(config.rootDir, directivesUtilsFile);
}
return {
type: 'angular',
Expand Down
7 changes: 5 additions & 2 deletions src/compiler/config/outputs/validate-collection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@ import { isOutputTargetDistCollection } from '../../output-targets/output-utils'
* Validate and return DIST_COLLECTION output targets, ensuring that the `dir`
* property is set on them.
*
* @param config the user-supplied configuration object
* @param config a validated configuration object
* @param userOutputs an array of output targets
* @returns an array of validated DIST_COLLECTION output targets
*/
export const validateCollection = (config: d.Config, userOutputs: d.OutputTarget[]): d.OutputTargetDistCollection[] => {
export const validateCollection = (
config: d.ValidatedConfig,
userOutputs: d.OutputTarget[]
): d.OutputTargetDistCollection[] => {
return userOutputs.filter(isOutputTargetDistCollection).map((outputTarget) => {
return {
...outputTarget,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { getAbsolutePath } from '../config-utils';
import { isBoolean } from '@utils';
import { validateCopy } from '../validate-copy';

export const validateCustomElementBundle = (config: d.Config, userOutputs: d.OutputTarget[]) => {
export const validateCustomElementBundle = (config: d.ValidatedConfig, userOutputs: d.OutputTarget[]) => {
return userOutputs.filter(isOutputTargetDistCustomElementsBundle).reduce((arr, o) => {
const outputTarget = {
...o,
Expand Down
4 changes: 2 additions & 2 deletions src/compiler/config/outputs/validate-custom-element.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type {
Config,
OutputTarget,
OutputTargetDistCustomElements,
OutputTargetDistTypes,
OutputTargetCopy,
ValidatedConfig,
} from '../../../declarations';
import { getAbsolutePath } from '../config-utils';
import { COPY, DIST_TYPES, isOutputTargetDistCustomElements } from '../../output-targets/output-utils';
Expand All @@ -20,7 +20,7 @@ import { join } from 'path';
* @returns the validated output target(s)
*/
export const validateCustomElement = (
config: Config,
config: ValidatedConfig,
userOutputs: ReadonlyArray<OutputTarget>
): ReadonlyArray<OutputTargetDistCustomElements | OutputTargetDistTypes | OutputTargetCopy> => {
const defaultDir = 'dist';
Expand Down
6 changes: 5 additions & 1 deletion src/compiler/config/outputs/validate-custom-output.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ import type * as d from '../../../declarations';
import { catchError } from '@utils';
import { COPY, isOutputTargetCustom } from '../../output-targets/output-utils';

export const validateCustomOutput = (config: d.Config, diagnostics: d.Diagnostic[], userOutputs: d.OutputTarget[]) => {
export const validateCustomOutput = (
config: d.ValidatedConfig,
diagnostics: d.Diagnostic[],
userOutputs: d.OutputTarget[]
) => {
return userOutputs.filter(isOutputTargetCustom).map((o) => {
if (o.validate) {
const localDiagnostics: d.Diagnostic[] = [];
Expand Down
4 changes: 2 additions & 2 deletions src/compiler/config/outputs/validate-dist.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { validateCopy } from '../validate-copy';
* @param userOutputs a user-supplied list of output targets.
* @returns a list of OutputTargets which have been validated for us.
*/
export const validateDist = (config: d.Config, userOutputs: d.OutputTarget[]): d.OutputTarget[] => {
export const validateDist = (config: d.ValidatedConfig, userOutputs: d.OutputTarget[]): d.OutputTarget[] => {
const distOutputTargets = userOutputs.filter(isOutputTargetDist);
return distOutputTargets.reduce((outputs: d.OutputTarget[], o: d.OutputTargetDist) => {
const distOutputTarget = validateOutputTargetDist(config, o);
Expand Down Expand Up @@ -121,7 +121,7 @@ export const validateDist = (config: d.Config, userOutputs: d.OutputTarget[]): d
* @returns `Required<d.OutputTargetDist>`, i.e. `d.OutputTargetDist` with all
* optional properties rendered un-optional.
*/
const validateOutputTargetDist = (config: d.Config, o: d.OutputTargetDist): Required<d.OutputTargetDist> => {
const validateOutputTargetDist = (config: d.ValidatedConfig, o: d.OutputTargetDist): Required<d.OutputTargetDist> => {
// we need to create an object with a bunch of default values here so that
// the typescript compiler can infer their types correctly
const outputTarget = {
Expand Down
4 changes: 2 additions & 2 deletions src/compiler/config/outputs/validate-docs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export const validateDocs = (config: d.ValidatedConfig, diagnostics: d.Diagnosti
return docsOutputs;
};

const validateReadmeOutputTarget = (config: d.Config, outputTarget: d.OutputTargetDocsReadme) => {
const validateReadmeOutputTarget = (config: d.ValidatedConfig, outputTarget: d.OutputTargetDocsReadme) => {
if (!isString(outputTarget.dir)) {
outputTarget.dir = config.srcDir;
}
Expand All @@ -73,7 +73,7 @@ const validateReadmeOutputTarget = (config: d.Config, outputTarget: d.OutputTarg
};

const validateJsonDocsOutputTarget = (
config: d.Config,
config: d.ValidatedConfig,
diagnostics: d.Diagnostic[],
outputTarget: d.OutputTargetDocsJson
) => {
Expand Down
2 changes: 1 addition & 1 deletion src/compiler/config/outputs/validate-lazy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { getAbsolutePath } from '../config-utils';
import { isBoolean } from '@utils';
import { join } from 'path';

export const validateLazy = (config: d.Config, userOutputs: d.OutputTarget[]) => {
export const validateLazy = (config: d.ValidatedConfig, userOutputs: d.OutputTarget[]) => {
return userOutputs.filter(isOutputTargetDistLazy).map((o) => {
const dir = getAbsolutePath(config, o.dir || join('dist', config.fsNamespace));
const lazyOutput: d.OutputTargetDistLazy = {
Expand Down

0 comments on commit 10421be

Please sign in to comment.