UNPKG

file-routing-expressjs

Version:

A dependency-free, flexible, system-based file routing for Express.

1 lines 3.84 kB
{"version":3,"sources":["../../src/helpers/validators.ts"],"sourcesContent":["import fs from \"fs\";\nimport { RequestHandler } from \"express\";\nimport { RouteErrorHandler, ExpressMethod } from \"../types\";\nimport { JAVASCRIPT_FILES_EXTENSION_REGEX } from \"../constants/regex\";\nimport { EXPRESS_METHODS_ARRAY } from \"../constants\";\nimport { resolveTarget } from \"./resolvers\";\n\nconst VALID_OUTPUT_TYPES = [\"tree\", \"table\", \"json\"] as const;\n\nexport function isFunction(value: any): value is Function {\n return typeof value === \"function\";\n}\n\nexport function isRequestHandler(handler: any): handler is RequestHandler {\n return isFunction(handler);\n}\n\nexport function isErrorHandler(handler: any): handler is RouteErrorHandler {\n return isFunction(handler) && handler.length === 4;\n}\n\nexport function filenameIsJSorTS(filename: string) {\n return !!filename.match(JAVASCRIPT_FILES_EXTENSION_REGEX);\n}\n\nexport function pathExistsAndIsFile(path: string) {\n return fs.existsSync(path) && fs.statSync(path).isFile();\n}\n\nexport function fileExistsAndIsJSorTS(filePath: string) {\n return !!filePath.match(JAVASCRIPT_FILES_EXTENSION_REGEX) && pathExistsAndIsFile(filePath);\n}\n\nexport function methodIsExpressMethod(method: string): method is ExpressMethod {\n return EXPRESS_METHODS_ARRAY.includes(method as ExpressMethod);\n}\n\nexport function isDefined<T>(value: T): value is NonNullable<T> {\n return value !== null && value !== undefined;\n}\n\nexport function isNotDefined<T>(value: T): value is Extract<T, null | undefined> {\n return value === null || value === undefined;\n}\n\nexport function isObject(value: unknown): value is object {\n return isDefined(value) && typeof value === \"object\";\n}\n\nexport function validateCLIList<T extends string = string>(value: string | undefined, allowed: T[] | Readonly<T[]>, name: string): T[] {\n if (!value) return [];\n \n const list = value.split(\",\").map(v => v.trim()).filter(Boolean);\n \n for (const item of list) {\n if (!allowed.includes(item as T)) {\n throw new Error(`Invalid ${name} value: ${item}`);\n }\n }\n \n return list as T[];\n}\n\nexport function normalizeCLIOptions(options: Record<string, any>) {\n const output = options.output ?? \"tree\";\n const target = resolveTarget(options.target);\n\n if (!VALID_OUTPUT_TYPES.includes(output)) {\n throw new Error(`Invalid output: ${output}`);\n }\n\n return {\n target,\n output: output as typeof VALID_OUTPUT_TYPES[number],\n };\n}"],"mappings":"AAAA,OAAO,QAAQ;AAGf,SAAS,wCAAwC;AACjD,SAAS,6BAA6B;AACtC,SAAS,qBAAqB;AAE9B,MAAM,qBAAqB,CAAC,QAAQ,SAAS,MAAM;AAE5C,SAAS,WAAW,OAA+B;AACtD,SAAO,OAAO,UAAU;AAC5B;AAEO,SAAS,iBAAiB,SAAyC;AACtE,SAAO,WAAW,OAAO;AAC7B;AAEO,SAAS,eAAe,SAA4C;AACvE,SAAO,WAAW,OAAO,KAAK,QAAQ,WAAW;AACrD;AAEO,SAAS,iBAAiB,UAAkB;AAC/C,SAAO,CAAC,CAAC,SAAS,MAAM,gCAAgC;AAC5D;AAEO,SAAS,oBAAoB,MAAc;AAC9C,SAAO,GAAG,WAAW,IAAI,KAAK,GAAG,SAAS,IAAI,EAAE,OAAO;AAC3D;AAEO,SAAS,sBAAsB,UAAkB;AACpD,SAAO,CAAC,CAAC,SAAS,MAAM,gCAAgC,KAAK,oBAAoB,QAAQ;AAC7F;AAEO,SAAS,sBAAsB,QAAyC;AAC3E,SAAO,sBAAsB,SAAS,MAAuB;AACjE;AAEO,SAAS,UAAa,OAAmC;AAC5D,SAAO,UAAU,QAAQ,UAAU;AACvC;AAEO,SAAS,aAAgB,OAAiD;AAC7E,SAAO,UAAU,QAAQ,UAAU;AACvC;AAEO,SAAS,SAAS,OAAiC;AACtD,SAAO,UAAU,KAAK,KAAK,OAAO,UAAU;AAChD;AAEO,SAAS,gBAA2C,OAA2B,SAA8B,MAAmB;AACnI,MAAI,CAAC,MAAO,QAAO,CAAC;AAEpB,QAAM,OAAO,MAAM,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAE/D,aAAW,QAAQ,MAAM;AACvB,QAAI,CAAC,QAAQ,SAAS,IAAS,GAAG;AAChC,YAAM,IAAI,MAAM,WAAW,IAAI,WAAW,IAAI,EAAE;AAAA,IAClD;AAAA,EACF;AAEA,SAAO;AACX;AAEO,SAAS,oBAAoB,SAA8B;AA/DlE;AAgEE,QAAM,UAAS,aAAQ,WAAR,YAAkB;AACjC,QAAM,SAAS,cAAc,QAAQ,MAAM;AAE3C,MAAI,CAAC,mBAAmB,SAAS,MAAM,GAAG;AACxC,UAAM,IAAI,MAAM,mBAAmB,MAAM,EAAE;AAAA,EAC7C;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;","names":[]}