Skip to content

Commit ef12e9a

Browse files
committed
chore: change API of option transforms
1 parent cf0febd commit ef12e9a

36 files changed

Lines changed: 336 additions & 249 deletions

lib/bin.ts

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,26 @@ import { resolve } from "path";
88
import { existsSync } from "fs";
99
import { logger } from "./logger";
1010
import { compile } from "eazy-logger";
11+
import {printErrors} from "./cli/cli-options";
1112

1213
export enum BsErrorLevels {
1314
Fatal = "Fatal"
1415
}
1516

1617
export enum BsErrorTypes {
17-
PathNotFound = "PathNotFound"
18+
PathNotFound = "PathNotFound",
19+
HostAndListenIncompatible = "HostAndListenIncompatible",
20+
}
21+
22+
export type BsErrors = BsError[];
23+
export interface BsError {
24+
type: BsErrorTypes,
25+
level: BsErrorLevels,
26+
errors: BsErrorItem[]
27+
}
28+
export interface BsErrorItem {
29+
error: Error,
30+
meta?(...args): string[]
1831
}
1932

2033
/**
@@ -212,7 +225,7 @@ function handleIncoming(command, yargs) {
212225
handleCli({ cli: { flags: out, input: out._ } });
213226
}
214227

215-
function pathErrors(input, resolved) {
228+
function pathErrors(input, resolved): BsErrors {
216229
if (!existsSync(resolved)) {
217230
return [
218231
{
@@ -235,22 +248,3 @@ function pathErrors(input, resolved) {
235248
}
236249
return [];
237250
}
238-
239-
function printErrors(errors) {
240-
return errors
241-
.map(error =>
242-
[
243-
`Error Type: {bold:${error.type}}`,
244-
`Error Level: {bold:${error.level}}`,
245-
error.errors.map(item =>
246-
[
247-
`Error Message: ${item.error.message}`,
248-
item.meta ? item.meta().join("\n") : ""
249-
]
250-
.filter(Boolean)
251-
.join("\n")
252-
)
253-
].join("\n")
254-
)
255-
.join("\n\n");
256-
}

lib/cli/cli-options.ts

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import {
2626
setOpen,
2727
setUiPort
2828
} from "../options";
29+
import { BsErrors } from "../bin";
30+
import {handleHostOption} from "./transforms/handleHostOption";
2931

3032
const _ = require("../lodash.custom");
3133
const defaultConfig = require("../default-config");
@@ -35,9 +37,13 @@ const immDefs = fromJS(defaultConfig);
3537
* @param {Object} input
3638
* @returns {Map}
3739
*/
40+
export type BsTempOptions = Map<string, any>;
41+
export type TransformResult = [BsTempOptions, BsErrors];
42+
export type TransformFn = (subject: BsTempOptions) => TransformResult;
43+
3844
export function merge(input) {
3945
const merged = immDefs.mergeDeep(input);
40-
const transforms = [
46+
const transforms: TransformFn[] = [
4147
addToFilesOption,
4248
addCwdToWatchOptions,
4349
addDefaultIgnorePatterns,
@@ -62,14 +68,17 @@ export function merge(input) {
6268
fixRewriteRules,
6369
setMiddleware,
6470
setOpen,
65-
setUiPort
71+
setUiPort,
6672
];
6773

68-
const output = transforms.reduce((acc, item) => {
69-
return item.call(null, acc);
70-
}, merged);
71-
72-
// console.log(output.toJSON());
74+
const output = transforms.reduce(
75+
(acc: TransformResult, item: TransformFn) => {
76+
const [current, currentErrors] = acc;
77+
const [result, errors] = item.call(null, current);
78+
return [result, [...currentErrors, ...errors]];
79+
},
80+
[merged, []] as TransformResult
81+
);
7382

7483
return output;
7584
}
@@ -110,3 +119,22 @@ export function makeFilesArg(value) {
110119
objs: objs
111120
};
112121
}
122+
123+
export function printErrors(errors: BsErrors) {
124+
return errors
125+
.map(error =>
126+
[
127+
`Error Type: ${error.type}`,
128+
`Error Level: ${error.level}`,
129+
error.errors.map(item =>
130+
[
131+
`Error Message: ${item.error.message}`,
132+
item.meta ? item.meta().join("\n") : ""
133+
]
134+
.filter(Boolean)
135+
.join("\n")
136+
)
137+
].join("\n")
138+
)
139+
.join("\n\n");
140+
}
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
export function addCwdToWatchOptions(incoming) {
2-
return incoming.updateIn(['watchOptions', 'cwd'], (watchCwd) => {
1+
import {BsTempOptions, TransformResult} from "../cli-options";
2+
3+
export function addCwdToWatchOptions(incoming: BsTempOptions): TransformResult {
4+
const output = incoming.updateIn(['watchOptions', 'cwd'], (watchCwd) => {
35
return watchCwd || incoming.get('cwd');
4-
})
5-
}
6+
});
7+
8+
return [output, []];
9+
}

lib/cli/transforms/addDefaultIgnorePatterns.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {List} from "immutable";
2+
import {BsTempOptions, TransformResult} from "../cli-options";
23

34
const defaultIgnorePatterns = [
45
/node_modules/,
@@ -9,12 +10,12 @@ const defaultIgnorePatterns = [
910
'.idea',
1011
];
1112

12-
export function addDefaultIgnorePatterns(incoming) {
13+
export function addDefaultIgnorePatterns(incoming: BsTempOptions): TransformResult {
1314
if (!incoming.get("watch")) {
14-
return incoming;
15+
return [incoming, []];
1516
}
1617

17-
return incoming.update("watchOptions", watchOptions => {
18+
const output = incoming.update("watchOptions", watchOptions => {
1819
const userIgnored = List([])
1920
.concat(watchOptions.get("ignored"))
2021
.filter(Boolean)
@@ -26,4 +27,6 @@ export function addDefaultIgnorePatterns(incoming) {
2627
ignored: merged.toList(),
2728
});
2829
});
30+
31+
return [output, []];
2932
}

lib/cli/transforms/addToFilesOption.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import {List, Map} from "immutable";
2+
import {BsTempOptions, TransformResult} from "../cli-options";
23

3-
export function addToFilesOption(incoming) {
4+
export function addToFilesOption(incoming: BsTempOptions): TransformResult {
45
if (!incoming.get("watch")) {
5-
return incoming;
6+
return [incoming, []];
67
}
78

89
let serverPaths = [];
@@ -49,5 +50,5 @@ export function addToFilesOption(incoming) {
4950
.concat(files, serverPaths)
5051
.filter(Boolean);
5152
});
52-
return output;
53+
return [output, []];
5354
}
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
export function appendServerDirectoryOption(incoming) {
2-
if (!incoming.get('server')) return incoming;
1+
import {BsTempOptions, TransformResult} from "../cli-options";
2+
3+
export function appendServerDirectoryOption(incoming: BsTempOptions): TransformResult {
4+
if (!incoming.get('server')) return [incoming, []];
35
if (incoming.get('directory')) {
4-
return incoming.setIn(['server', 'directory'], incoming.has('directory'));
6+
return [incoming.setIn(['server', 'directory'], incoming.has('directory')), []];
57
}
6-
return incoming;
8+
return [incoming, []];
79
}
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
export function appendServerIndexOption(incoming) {
2-
if (!incoming.get('server')) return incoming;
1+
import {BsTempOptions, TransformResult} from "../cli-options";
2+
3+
export function appendServerIndexOption(incoming: BsTempOptions): TransformResult {
4+
if (!incoming.get('server')) return [incoming, []];
35
const value = incoming.get('index');
46

57
if (value) {
6-
return incoming.setIn(['server', 'index'], value);
8+
return [incoming.setIn(['server', 'index'], value), []];
79
}
810

9-
return incoming;
11+
return [incoming, []];
1012
}
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import {List} from "immutable";
2+
import {BsTempOptions, TransformResult} from "../cli-options";
23

3-
export function copyCLIIgnoreToWatchOptions(incoming) {
4+
export function copyCLIIgnoreToWatchOptions(incoming: BsTempOptions): TransformResult {
45
if (!incoming.get("ignore")) {
5-
return incoming;
6+
return [incoming, []];
67
}
7-
return incoming.updateIn(["watchOptions", "ignored"], List([]), ignored => {
8+
const output = incoming.updateIn(["watchOptions", "ignored"], List([]), ignored => {
89
return List([]).concat(ignored, incoming.get("ignore"));
910
});
11+
12+
return [output, []];
1013
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import {List} from "immutable";
2-
import {explodeFilesArg} from "../cli-options";
2+
import {BsTempOptions, explodeFilesArg, TransformResult} from "../cli-options";
33

44
const _ = require("../../lodash.custom");
55

6-
export function handleExtensionsOption(incoming) {
6+
export function handleExtensionsOption(incoming: BsTempOptions): TransformResult {
77
const value = incoming.get('extensions');
88
if (_.isString(value)) {
99
const split = explodeFilesArg(value);
1010
if (split.length) {
11-
return incoming.set('extensions', List(split));
11+
return [incoming.set('extensions', List(split)), []];
1212
}
1313
}
1414
if (List.isList(value)) {
15-
return incoming.set('extensions', value);
15+
return [incoming.set('extensions', value), []];
1616
}
17-
return incoming;
17+
return [incoming, []];
1818
}

lib/cli/transforms/handleFilesOption.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {fromJS} from "immutable";
2-
import {makeFilesArg} from "../cli-options";
2+
import {BsTempOptions, makeFilesArg, TransformResult} from "../cli-options";
33
import {FilesNamespaces} from "../../types";
44

5-
export function handleFilesOption(incoming) {
5+
export function handleFilesOption(incoming: BsTempOptions): TransformResult {
66
const value = incoming.get('files');
77
const namespaces: FilesNamespaces = {
88
core: {
@@ -21,5 +21,5 @@ export function handleFilesOption(incoming) {
2121
namespaces.core.objs = processed.objs;
2222
}
2323

24-
return incoming.set('files', fromJS(namespaces));
24+
return [incoming.set('files', fromJS(namespaces)), []];
2525
}

0 commit comments

Comments
 (0)