mAAdhaTTah/brookjs

View on GitHub
packages/brookjs-cli/src/glob/index.ts

Summary

Maintainability
C
1 day
Test Coverage
import path from 'path';
import Kefir, { Stream } from 'kefir';
import { Delta, Maybe } from 'brookjs-types';
import { sampleByAction } from 'brookjs-flow';
import { createAsyncAction, ActionType } from 'typesafe-actions';
import glob from 'glob';
 
export const actions = {
lint: createAsyncAction(
'GLOB_LINT_REQUESTED',
'GLOB_LINT_SUCCEEDED',
'GLOB_LINT_FAILED',
)<void, string[], Error>(),
format: createAsyncAction(
'GLOB_FORMAT_REQUESTED',
'GLOB_FORMAT_SUCCEEDED',
'GLOB_FORMAT_FAILED',
)<void, string[], Error>(),
};
 
export type State = {
cwd: string;
rc: Maybe<{ dir?: string }>;
};
 
export const selectLintGlob = (cwd: string, dir: string) =>
path.join(cwd, dir, '**/*.{js,jsx,mjs,ts,tsx}');
 
export const selectFormatGlob = (cwd: string, dir: string) =>
path.join(cwd, dir, '**/*.{js,jsx,mjs,ts,tsx}');
 
export type Action = ActionType<typeof actions>;
 
export const delta: Delta<Action, State> = (action$, state$) => {
Similar blocks of code found in 2 locations. Consider refactoring.
const lint$ = state$
.thru(sampleByAction(action$, actions.lint.request))
.flatMap(state =>
service(selectLintGlob(state.cwd, state.rc?.dir ?? 'src'))
.map(files => actions.lint.success(files))
.flatMapErrors(err => Kefir.constant(actions.lint.failure(err))),
);
 
Similar blocks of code found in 2 locations. Consider refactoring.
const format$ = state$
.thru(sampleByAction(action$, actions.format.request))
.flatMap(state =>
service(selectFormatGlob(state.cwd, state.rc?.dir ?? 'src'))
.map(files => actions.format.success(files))
.flatMapErrors(err => Kefir.constant(actions.format.failure(err))),
);
 
return Kefir.merge<Action, never>([lint$, format$]);
};
 
export const service = (target: string): Stream<string[], Error> =>
Kefir.fromNodeCallback(cb => glob(target, cb));