Skip to content

Commit

Permalink
chore: change API of option transforms
Browse files Browse the repository at this point in the history
  • Loading branch information
shakyShane committed Sep 17, 2018
1 parent cf0febd commit ef12e9a
Show file tree
Hide file tree
Showing 36 changed files with 336 additions and 249 deletions.
36 changes: 15 additions & 21 deletions lib/bin.ts
Expand Up @@ -8,13 +8,26 @@ import { resolve } from "path";
import { existsSync } from "fs";
import { logger } from "./logger";
import { compile } from "eazy-logger";
import {printErrors} from "./cli/cli-options";

export enum BsErrorLevels {
Fatal = "Fatal"
}

export enum BsErrorTypes {
PathNotFound = "PathNotFound"
PathNotFound = "PathNotFound",
HostAndListenIncompatible = "HostAndListenIncompatible",
}

export type BsErrors = BsError[];
export interface BsError {
type: BsErrorTypes,
level: BsErrorLevels,
errors: BsErrorItem[]
}
export interface BsErrorItem {
error: Error,
meta?(...args): string[]
}

/**
Expand Down Expand Up @@ -212,7 +225,7 @@ function handleIncoming(command, yargs) {
handleCli({ cli: { flags: out, input: out._ } });
}

function pathErrors(input, resolved) {
function pathErrors(input, resolved): BsErrors {
if (!existsSync(resolved)) {
return [
{
Expand All @@ -235,22 +248,3 @@ function pathErrors(input, resolved) {
}
return [];
}

function printErrors(errors) {
return errors
.map(error =>
[
`Error Type: {bold:${error.type}}`,
`Error Level: {bold:${error.level}}`,
error.errors.map(item =>
[
`Error Message: ${item.error.message}`,
item.meta ? item.meta().join("\n") : ""
]
.filter(Boolean)
.join("\n")
)
].join("\n")
)
.join("\n\n");
}
42 changes: 35 additions & 7 deletions lib/cli/cli-options.ts
Expand Up @@ -26,6 +26,8 @@ import {
setOpen,
setUiPort
} from "../options";
import { BsErrors } from "../bin";
import {handleHostOption} from "./transforms/handleHostOption";

const _ = require("../lodash.custom");
const defaultConfig = require("../default-config");
Expand All @@ -35,9 +37,13 @@ const immDefs = fromJS(defaultConfig);
* @param {Object} input
* @returns {Map}
*/
export type BsTempOptions = Map<string, any>;
export type TransformResult = [BsTempOptions, BsErrors];
export type TransformFn = (subject: BsTempOptions) => TransformResult;

export function merge(input) {
const merged = immDefs.mergeDeep(input);
const transforms = [
const transforms: TransformFn[] = [
addToFilesOption,
addCwdToWatchOptions,
addDefaultIgnorePatterns,
Expand All @@ -62,14 +68,17 @@ export function merge(input) {
fixRewriteRules,
setMiddleware,
setOpen,
setUiPort
setUiPort,
];

const output = transforms.reduce((acc, item) => {
return item.call(null, acc);
}, merged);

// console.log(output.toJSON());
const output = transforms.reduce(
(acc: TransformResult, item: TransformFn) => {
const [current, currentErrors] = acc;
const [result, errors] = item.call(null, current);
return [result, [...currentErrors, ...errors]];
},
[merged, []] as TransformResult
);

return output;
}
Expand Down Expand Up @@ -110,3 +119,22 @@ export function makeFilesArg(value) {
objs: objs
};
}

export function printErrors(errors: BsErrors) {
return errors
.map(error =>
[
`Error Type: ${error.type}`,
`Error Level: ${error.level}`,
error.errors.map(item =>
[
`Error Message: ${item.error.message}`,
item.meta ? item.meta().join("\n") : ""
]
.filter(Boolean)
.join("\n")
)
].join("\n")
)
.join("\n\n");
}
12 changes: 8 additions & 4 deletions lib/cli/transforms/addCwdToWatchOptions.ts
@@ -1,5 +1,9 @@
export function addCwdToWatchOptions(incoming) {
return incoming.updateIn(['watchOptions', 'cwd'], (watchCwd) => {
import {BsTempOptions, TransformResult} from "../cli-options";

export function addCwdToWatchOptions(incoming: BsTempOptions): TransformResult {
const output = incoming.updateIn(['watchOptions', 'cwd'], (watchCwd) => {
return watchCwd || incoming.get('cwd');
})
}
});

return [output, []];
}
9 changes: 6 additions & 3 deletions lib/cli/transforms/addDefaultIgnorePatterns.ts
@@ -1,4 +1,5 @@
import {List} from "immutable";
import {BsTempOptions, TransformResult} from "../cli-options";

const defaultIgnorePatterns = [
/node_modules/,
Expand All @@ -9,12 +10,12 @@ const defaultIgnorePatterns = [
'.idea',
];

export function addDefaultIgnorePatterns(incoming) {
export function addDefaultIgnorePatterns(incoming: BsTempOptions): TransformResult {
if (!incoming.get("watch")) {
return incoming;
return [incoming, []];
}

return incoming.update("watchOptions", watchOptions => {
const output = incoming.update("watchOptions", watchOptions => {
const userIgnored = List([])
.concat(watchOptions.get("ignored"))
.filter(Boolean)
Expand All @@ -26,4 +27,6 @@ export function addDefaultIgnorePatterns(incoming) {
ignored: merged.toList(),
});
});

return [output, []];
}
7 changes: 4 additions & 3 deletions lib/cli/transforms/addToFilesOption.ts
@@ -1,8 +1,9 @@
import {List, Map} from "immutable";
import {BsTempOptions, TransformResult} from "../cli-options";

export function addToFilesOption(incoming) {
export function addToFilesOption(incoming: BsTempOptions): TransformResult {
if (!incoming.get("watch")) {
return incoming;
return [incoming, []];
}

let serverPaths = [];
Expand Down Expand Up @@ -49,5 +50,5 @@ export function addToFilesOption(incoming) {
.concat(files, serverPaths)
.filter(Boolean);
});
return output;
return [output, []];
}
10 changes: 6 additions & 4 deletions lib/cli/transforms/appendServerDirectoryOption.ts
@@ -1,7 +1,9 @@
export function appendServerDirectoryOption(incoming) {
if (!incoming.get('server')) return incoming;
import {BsTempOptions, TransformResult} from "../cli-options";

export function appendServerDirectoryOption(incoming: BsTempOptions): TransformResult {
if (!incoming.get('server')) return [incoming, []];
if (incoming.get('directory')) {
return incoming.setIn(['server', 'directory'], incoming.has('directory'));
return [incoming.setIn(['server', 'directory'], incoming.has('directory')), []];
}
return incoming;
return [incoming, []];
}
10 changes: 6 additions & 4 deletions lib/cli/transforms/appendServerIndexOption.ts
@@ -1,10 +1,12 @@
export function appendServerIndexOption(incoming) {
if (!incoming.get('server')) return incoming;
import {BsTempOptions, TransformResult} from "../cli-options";

export function appendServerIndexOption(incoming: BsTempOptions): TransformResult {
if (!incoming.get('server')) return [incoming, []];
const value = incoming.get('index');

if (value) {
return incoming.setIn(['server', 'index'], value);
return [incoming.setIn(['server', 'index'], value), []];
}

return incoming;
return [incoming, []];
}
9 changes: 6 additions & 3 deletions lib/cli/transforms/copyCLIIgnoreToWatchOptions.ts
@@ -1,10 +1,13 @@
import {List} from "immutable";
import {BsTempOptions, TransformResult} from "../cli-options";

export function copyCLIIgnoreToWatchOptions(incoming) {
export function copyCLIIgnoreToWatchOptions(incoming: BsTempOptions): TransformResult {
if (!incoming.get("ignore")) {
return incoming;
return [incoming, []];
}
return incoming.updateIn(["watchOptions", "ignored"], List([]), ignored => {
const output = incoming.updateIn(["watchOptions", "ignored"], List([]), ignored => {
return List([]).concat(ignored, incoming.get("ignore"));
});

return [output, []];
}
10 changes: 5 additions & 5 deletions lib/cli/transforms/handleExtensionsOption.ts
@@ -1,18 +1,18 @@
import {List} from "immutable";
import {explodeFilesArg} from "../cli-options";
import {BsTempOptions, explodeFilesArg, TransformResult} from "../cli-options";

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

export function handleExtensionsOption(incoming) {
export function handleExtensionsOption(incoming: BsTempOptions): TransformResult {
const value = incoming.get('extensions');
if (_.isString(value)) {
const split = explodeFilesArg(value);
if (split.length) {
return incoming.set('extensions', List(split));
return [incoming.set('extensions', List(split)), []];
}
}
if (List.isList(value)) {
return incoming.set('extensions', value);
return [incoming.set('extensions', value), []];
}
return incoming;
return [incoming, []];
}
6 changes: 3 additions & 3 deletions lib/cli/transforms/handleFilesOption.ts
@@ -1,8 +1,8 @@
import {fromJS} from "immutable";
import {makeFilesArg} from "../cli-options";
import {BsTempOptions, makeFilesArg, TransformResult} from "../cli-options";
import {FilesNamespaces} from "../../types";

export function handleFilesOption(incoming) {
export function handleFilesOption(incoming: BsTempOptions): TransformResult {
const value = incoming.get('files');
const namespaces: FilesNamespaces = {
core: {
Expand All @@ -21,5 +21,5 @@ export function handleFilesOption(incoming) {
namespaces.core.objs = processed.objs;
}

return incoming.set('files', fromJS(namespaces));
return [incoming.set('files', fromJS(namespaces)), []];
}
17 changes: 9 additions & 8 deletions lib/cli/transforms/handleGhostModeOption.ts
@@ -1,6 +1,7 @@
import {fromJS} from "immutable";
import {BsTempOptions, TransformResult} from "../cli-options";

export function handleGhostModeOption(incoming) {
export function handleGhostModeOption(incoming: BsTempOptions): TransformResult {
const value = incoming.get('ghostMode');
var trueAll = {
clicks: true,
Expand All @@ -26,18 +27,18 @@ export function handleGhostModeOption(incoming) {
value === false ||
value === "false"
) {
return incoming.set('ghostMode', fromJS(falseAll));
return [incoming.set('ghostMode', fromJS(falseAll)), []];
}

if (
value === true ||
value === "true"
) {
return incoming.set('ghostMode', fromJS(trueAll));
return [incoming.set('ghostMode', fromJS(trueAll)), []];
}

if (value.get("forms") === false) {
return incoming.set('ghostMode', value.withMutations(function (map) {
return [incoming.set('ghostMode', value.withMutations(function (map) {
map.set(
"forms",
fromJS({
Expand All @@ -46,11 +47,11 @@ export function handleGhostModeOption(incoming) {
toggles: false
})
);
}));
})), []];
}

if (value.get("forms") === true) {
return incoming.set('ghostMode', value.withMutations(function (map) {
return [incoming.set('ghostMode', value.withMutations(function (map) {
map.set(
"forms",
fromJS({
Expand All @@ -59,8 +60,8 @@ export function handleGhostModeOption(incoming) {
toggles: true
})
);
}));
})), []];
}

return incoming;
return [incoming, []];
}
7 changes: 4 additions & 3 deletions lib/cli/transforms/handlePortsOption.ts
@@ -1,9 +1,10 @@
import {Map} from 'immutable';
import {PortsOption} from "../../types";
import {BsTempOptions, TransformResult} from "../cli-options";

export function handlePortsOption(incoming) {
export function handlePortsOption(incoming: BsTempOptions): TransformResult {
const value = incoming.get('ports');
if (!value) return incoming;
if (!value) return [incoming, []];

const obj: PortsOption = {min: null, max: null};

Expand All @@ -21,5 +22,5 @@ export function handlePortsOption(incoming) {
obj.max = value.get("max") || null;
}

return incoming.set('ports', Map(obj));
return [incoming.set('ports', Map(obj)), []];
}
7 changes: 4 additions & 3 deletions lib/cli/transforms/handleProxyOption.ts
@@ -1,14 +1,15 @@
import * as url from 'url';
import {Map} from 'immutable';
import {BrowsersyncProxy} from "../../types";
import {BsTempOptions, TransformResult} from "../cli-options";

export function handleProxyOption(incoming) {
export function handleProxyOption(incoming: BsTempOptions): TransformResult {
let value = incoming.get('proxy');
let mw;
let target;

if (!value || value === true) {
return incoming;
return [incoming, []];
}

if (typeof value !== "string") {
Expand Down Expand Up @@ -40,5 +41,5 @@ export function handleProxyOption(incoming) {

const proxyOutput = value.mergeDeep(out);

return incoming.set('proxy', proxyOutput);
return [incoming.set('proxy', proxyOutput), []];
}

0 comments on commit ef12e9a

Please sign in to comment.