Skip to content

Commit

Permalink
refactor(config): organise types and runtime validations
Browse files Browse the repository at this point in the history
  • Loading branch information
JamieMason committed Feb 10, 2023
1 parent 903bfc7 commit 3cc9655
Show file tree
Hide file tree
Showing 35 changed files with 403 additions and 429 deletions.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@
"glob": "8.1.0",
"minimatch": "6.1.6",
"read-yaml-file": "2.1.0",
"semver": "7.3.8"
"semver": "7.3.8",
"zod": "3.20.6"
},
"devDependencies": {
"@types/fs-extra": "11.0.1",
Expand Down
7 changes: 5 additions & 2 deletions src/bin-fix-mismatches/fix-mismatches-cli.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import type { Disk } from '../lib/disk';
import { getContext } from '../lib/get-context';
import type { Config } from '../lib/get-context/get-config/config';
import { writeIfChanged } from '../lib/write-if-changed';
import type { TConfig } from '../types';
import { fixMismatches } from './fix-mismatches';

export function fixMismatchesCli(input: Partial<Config.All>, disk: Disk): void {
export function fixMismatchesCli(
input: Partial<TConfig.Cli>,
disk: Disk,
): void {
writeIfChanged(fixMismatches(getContext(input, disk)));
}
4 changes: 2 additions & 2 deletions src/bin-format/format-cli.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { Disk } from '../lib/disk';
import { getContext } from '../lib/get-context';
import type { Config } from '../lib/get-context/get-config/config';
import { writeIfChanged } from '../lib/write-if-changed';
import type { TConfig } from '../types';
import { format } from './format';

export function formatCli(input: Partial<Config.All>, disk: Disk): void {
export function formatCli(input: Partial<TConfig.Cli>, disk: Disk): void {
writeIfChanged(format(getContext(input, disk)));
}
4 changes: 2 additions & 2 deletions src/bin-lint-semver-ranges/lint-semver-ranges-cli.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import type { Disk } from '../lib/disk';
import { exitIfInvalid } from '../lib/exit-if-invalid';
import { getContext } from '../lib/get-context';
import type { Config } from '../lib/get-context/get-config/config';
import type { TConfig } from '../types';
import { lintSemverRanges } from './lint-semver-ranges';

export function lintSemverRangesCli(
input: Partial<Config.All>,
input: Partial<TConfig.Cli>,
disk: Disk,
): void {
exitIfInvalid(lintSemverRanges(getContext(input, disk)));
Expand Down
4 changes: 2 additions & 2 deletions src/bin-list-mismatches/list-mismatches-cli.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import type { Disk } from '../lib/disk';
import { exitIfInvalid } from '../lib/exit-if-invalid';
import { getContext } from '../lib/get-context';
import type { Config } from '../lib/get-context/get-config/config';
import type { TConfig } from '../types';
import { listMismatches } from './list-mismatches';

export function listMismatchesCli(
input: Partial<Config.All>,
input: Partial<TConfig.Cli>,
disk: Disk,
): void {
exitIfInvalid(listMismatches(getContext(input, disk)));
Expand Down
4 changes: 2 additions & 2 deletions src/bin-list/list-cli.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { Disk } from '../lib/disk';
import { exitIfInvalid } from '../lib/exit-if-invalid';
import { getContext } from '../lib/get-context';
import type { Config } from '../lib/get-context/get-config/config';
import type { TConfig } from '../types';
import { list } from './list';

export function listCli(input: Partial<Config.All>, disk: Disk): void {
export function listCli(input: Partial<TConfig.Cli>, disk: Disk): void {
exitIfInvalid(list(getContext(input, disk)));
}
4 changes: 2 additions & 2 deletions src/bin-set-semver-ranges/set-semver-ranges-cli.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import type { Disk } from '../lib/disk';
import { getContext } from '../lib/get-context';
import type { Config } from '../lib/get-context/get-config/config';
import { writeIfChanged } from '../lib/write-if-changed';
import type { TConfig } from '../types';
import { setSemverRanges } from './set-semver-ranges';

export function setSemverRangesCli(
input: Partial<Config.All>,
input: Partial<TConfig.Cli>,
disk: Disk,
): void {
writeIfChanged(setSemverRanges(getContext(input, disk)));
Expand Down
6 changes: 2 additions & 4 deletions src/constants.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import type { Config } from './lib/get-context/get-config/config';

/** Single source of truth, intended to aid testing or to override */
export const CWD = process.env.MOCK_CWD || process.cwd();

Expand Down Expand Up @@ -41,7 +39,7 @@ export const RANGE = {
PATCH: '~',
} as const;

export const DEFAULT_CONFIG: Config.RcFile = {
export const DEFAULT_CONFIG = {
dev: true,
filter: '.',
indent: ' ',
Expand All @@ -65,4 +63,4 @@ export const DEFAULT_CONFIG: Config.RcFile = {
sortFirst: ['name', 'description', 'version', 'author'],
source: [],
versionGroups: [],
};
} as const;
6 changes: 3 additions & 3 deletions src/lib/disk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ import { sync as globSync } from 'glob';
import { join } from 'path';
import { sync as readYamlSync } from 'read-yaml-file';
import { CWD } from '../constants';
import type { Config } from './get-context/get-config/config';
import type { TConfig } from '../types';
import { verbose } from './log';

export type Disk = {
process: {
exit: (code: number) => void;
};
globSync: (pattern: string) => string[];
readConfigFileSync: (configPath?: string) => Partial<Config.RcFile>;
readConfigFileSync: (configPath?: string) => Partial<TConfig.SyncpackRc>;
readFileSync: (filePath: string) => string;
readYamlFileSync: <T = unknown>(filePath: string) => T;
removeSync: (filePath: string) => void;
Expand All @@ -42,7 +42,7 @@ export const disk: Disk = {
cwd: CWD,
});
},
readConfigFileSync(configPath?: string): Partial<Config.RcFile> {
readConfigFileSync(configPath?: string): Partial<TConfig.SyncpackRc> {
verbose('readConfigFileSync(', configPath, ')');
try {
const result = configPath ? client.load(configPath) : client.search();
Expand Down
165 changes: 0 additions & 165 deletions src/lib/get-context/get-config/config.ts

This file was deleted.

42 changes: 42 additions & 0 deletions src/lib/get-context/get-config/get-dependency-types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { isBoolean } from 'expect-more';
import { ALL_DEPENDENCY_TYPES } from '../../../constants';
import type { TConfig } from '../../../types';

export function getDependencyTypes(
fromCli: Partial<TConfig.Cli>,
resolved: TConfig.Public,
): TConfig.Private['dependencyTypes'] {
const dependencyTypes: TConfig.Private['dependencyTypes'] = [];
const hasTypeOverride =
isBoolean(fromCli.dev) ||
isBoolean(fromCli.overrides) ||
isBoolean(fromCli.peer) ||
isBoolean(fromCli.pnpmOverrides) ||
isBoolean(fromCli.prod) ||
isBoolean(fromCli.resolutions) ||
isBoolean(fromCli.workspace);

if (hasTypeOverride) {
resolved.dev = Boolean(fromCli.dev);
resolved.overrides = Boolean(fromCli.overrides);
resolved.peer = Boolean(fromCli.peer);
resolved.pnpmOverrides = Boolean(fromCli.pnpmOverrides);
resolved.prod = Boolean(fromCli.prod);
resolved.resolutions = Boolean(fromCli.resolutions);
resolved.workspace = Boolean(fromCli.workspace);
}

resolved.dev && dependencyTypes.push('devDependencies');
resolved.overrides && dependencyTypes.push('overrides');
resolved.peer && dependencyTypes.push('peerDependencies');
resolved.pnpmOverrides && dependencyTypes.push('pnpmOverrides');
resolved.prod && dependencyTypes.push('dependencies');
resolved.resolutions && dependencyTypes.push('resolutions');
resolved.workspace && dependencyTypes.push('workspace');

if (dependencyTypes.length === 0) {
dependencyTypes.push(...ALL_DEPENDENCY_TYPES);
}

return dependencyTypes;
}

0 comments on commit 3cc9655

Please sign in to comment.