Perlmint/directory-module-webpack-plugin

View on GitHub
src/option.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Minimatch } from "minimatch";
import { isAbsolute, relative } from "path";
import { normalizePath } from "./util";

export type EmitType = "json-object" | "json-array" | "ts-object";
interface IMultipleEmitOption {
    [globPath: string]: EmitType;
}
export type PluginOption = EmitType | IMultipleEmitOption;
export type InternalOption = Array < [RegExp, EmitType] > ;

export function ConvertOption(context: string | undefined, option: PluginOption) {
    if (typeof option === "string") {
        return ConvertSingleOption(option);
    } else {
        return ConvertMultipleOption(context, option);
    }
}

function ConvertSingleOption(option: EmitType): InternalOption {
    return [
        [new Minimatch("*").makeRe(), option],
        [new Minimatch("**/*").makeRe(), option],
    ];
}

function ConvertMultipleOption(context: string | undefined, option: IMultipleEmitOption) {
    const ret: InternalOption = [];
    for (let key of Object.keys(option)) {
        if (context !== undefined && isAbsolute(key)) {
            key = relative(context, key);
        }
        key = normalizePath(key);
        ret.push([new Minimatch(key).makeRe(), option[key]]);
    }

    return ret;
}