UNPKG

@toktokhan-dev/node

Version:

A Node.js utility library built by TOKTOKHAN.DEV

625 lines (601 loc) 18.7 kB
import prettier from 'prettier'; import { Obj } from '@toktokhan-dev/universal'; import { SpawnSyncOptionsWithBufferEncoding, ChildProcess } from 'child_process'; import { Ora } from 'ora'; import fs from 'fs'; import path from 'path'; import { Options as Options$1 } from 'boxen'; interface CheckFileAccessParam { /** * 체크할 파일 경로 */ filename: string; /** * 포함할 파일 경로 glob 패턴 */ include?: string[]; /** * 제외할 파일 경로 glob 패턴 */ ignored?: string[]; } /** * 파일 접근 권한을 확인합니다. * * @category Utils/Fs */ declare const checkFileAccess: ({ filename, include, ignored, }: CheckFileAccessParam) => boolean; interface ExtendedPrettierOptions extends prettier.Options { configPath?: string | ('auto' & {}); } /** * 주어진 문자열을 prettier를 사용하여 서식을 맞춥니다. * * @category Utils/String * * @param string - 서식을 맞출 문자열입니다. * @param options - prettier의 옵션입니다. * @returns 서식을 맞춘 결과를 반환합니다. */ declare function prettierString(string: string, options?: ExtendedPrettierOptions): Promise<string>; /** * 주어진 파일의 내용을 prettier를 사용하여 서식을 맞춥니다. * * @category Utils/String * * @param outputPath - 서식을 맞출 파일의 경로입니다. * @param options - prettier의 옵션입니다. */ declare function prettierFile(outputPath: string, options?: ExtendedPrettierOptions): Promise<void>; /** * 코드를 파일로 생성하는 함수입니다. * * @category Utils/Fs * * @param config - 코드 파일 생성에 필요한 설정 객체 * @param config.outputPath - 생성된 코드 파일의 경로 * @param config.prettier - 코드 파일을 포맷팅할 때 사용할 Prettier 옵션 (선택 사항) * @param code - 생성할 코드 문자열 * * @example * ```typescript * // 코드 파일 생성 예시 * const code = 'const message = "Hello, world!";' * * await generateCodeFile({ * outputPath: 'output/example.js', * }, code) * * await generateCodeFile({ * outputPath: 'output/example.js', * })(code) * * const genExample = generateCodeFile({ * outputPath: 'output/example.js', * prettier: { semi: false, singleQuote: true }, * }) * * await genExample(code) * ``` */ declare const generateCodeFile: { (config: { outputPath: string; prettier?: ExtendedPrettierOptions; }): (code: string) => Promise<void>; (config: { outputPath: string; prettier?: ExtendedPrettierOptions; }, code: string): Promise<void>; }; /** * 동기적으로 파일을 읽어오는 함수입니다. * * @category Utils/Fs * * @param encoding - 파일의 인코딩 유형 * @param path - 읽을 파일의 경로 * @returns 파일의 내용을 문자열로 반환합니다. * * @example * ```typescript * // 파일을 동기적으로 읽어오는 예시 * const content = readFileSync('utf-8', 'example.txt'); * const content = readFileSync('utf-8')('example.txt'); * * ``` */ declare const readFileSync: { (encoding: BufferEncoding, path: string): string; (encoding: BufferEncoding): (path: string) => string; }; /** * 주어진 경로에 해당하는 디렉터리를 재설정하는 함수입니다. * 주어진 경로의 디렉터리를 먼저 재귀적으로 제거한 후, 새로운 디렉터리를 생성합니다. * * @category Utils/Fs * * @param path - 디렉터리를 재설정할 경로 */ declare const resetDirSync: (path: string) => void; /** * 주어진 경로의 디렉터리 또는 파일을 재귀적으로 제거하는 함수입니다. * @category Utils/Fs * * @param path - 제거할 디렉터리 또는 파일의 경로 */ declare const removeAll: (path: string) => void; /** * 주어진 JSON 파일을 읽어 파싱하여 객체로 반환하는 함수입니다. * * @category Utils/Fs * * @typeParam T - 반환될 객체의 타입 * @param path - 읽을 JSON 파일의 경로 * @returns JSON 파일을 파싱한 객체 * * @example * ```typescript * // JSON 파일을 읽어 객체로 반환하는 예시 * const data = json<{ name: string; age: number }>('data.json'); * ``` */ declare const json: <T extends Obj = Obj>(path: string) => T; /** * YAML 파일을 읽어 파싱하여 객체로 반환하는 함수입니다. * * @category Utils/Fs * * @typeParam T - 반환될 객체의 타입 * @param path - 읽을 YAML 파일의 경로 * @returns YAML 파일을 파싱한 객체 * @example * ```typescript * // YAML 파일을 읽어 객체로 반환하는 예시 * const data = yaml<{ name: string; age: number }>('data.yaml'); * ``` */ declare const yaml: <T extends Obj = Obj>(path: string) => T; /** * 주어진 파일 경로의 모든 하위 경로를 반환합니다. * * @category Utils/Fs * @param path - 파일 경로. 이 경로의 모든 하위 경로가 반환됩니다. * * @example * ```typescript * const paths = await getFilePaths('./src'); * console.log(paths); // ['./src/index.ts', './src/utils.ts', ...] * ``` */ declare const getFilePaths: (path: string) => Promise<string[]>; /** * execa를 사용하여 주어진 명령어를 실행합니다. * * @category Utils/Process * * @param cmd - 실행할 명령어입니다. * @param args - 명령어에 전달할 인수들입니다. * @param options - execa 옵션입니다. * @returns execaChildProcess 객체를 반환합니다. * * @example * ```typescript * // execa를 사용하여 명령어를 실행하는 예시 * const result = $(cmd, args, options); * ``` */ declare function $(cmd: string, args: string[], options?: SpawnSyncOptionsWithBufferEncoding): ChildProcess; /** * 로딩 상태를 보여주면서 비동기 작업을 실행합니다. * * @category Utils/Process * * @param title - 로딩 상태 메시지의 제목입니다. * @param description - 로딩 상태 메시지의 설명입니다. * @param callback - 비동기 작업을 수행하는 함수입니다. 로딩 상태를 갱신하기 위해 `spinner` 객체를 전달받습니다. * @param options - 옵션 객체로, 오류 발생 시 처리 방법을 지정합니다. * @param options.onError - 오류가 발생했을 때 실행할 콜백 함수입니다. * @returns 비동기 작업의 결과를 반환합니다. * * @example * ```typescript * // 로딩 상태를 보여주면서 비동기 작업을 실행하는 예시 * const result = await withLoading( * 'Loading', * 'Some description', * async (spinner) => { * // 비동기 작업 수행 * }, * { * onError: (err) => { * // 오류 처리 * }, * } * ); * ``` */ declare function withLoading<T, E = any>(title: string, description: string, callback: (spinner: Ora) => T, options?: { onError: (err: E) => void; }): Promise<T | undefined>; /** * 현재 작업 디렉터리(CWD)의 경로를 계산하여 반환하는 함수입니다. * * @category Utils/Path * * @param paths - 작업 디렉터리에 추가될 하위 경로들 * @returns 현재 작업 디렉터리(CWD)의 경로 * * @example * ```typescript * // 현재 작업 디렉터리의 경로를 계산하는 예시 * const filePath = cwd('src', 'components', 'Button'); * ``` */ declare const cwd: (...paths: string[]) => string; /** * 주어진 디렉터리부터 상위 디렉터리에 있는 package.json 파일의 경로를 기준으로 * 상대 경로를 사용하여 디렉터리를 생성하는 함수를 반환합니다. * * @category Utils/Path * * @param dir - 상위 디렉터리에 있는 package.json 파일을 찾을 시작 디렉터리의 경로 * @returns 생성된 디렉터리의 경로를 반환하는 함수 * * @example * ```typescript * // 주어진 디렉터리부터 상위 디렉터리의 package.json 파일을 찾아 상대 경로를 사용하여 디렉터리를 생성하는 함수를 생성하는 예시 * const createRootDir = createPackageRoot(__dirname); * const myDir = createRootDir('src', 'components', 'Button'); * ``` */ declare const createPackageRoot: (dir: string) => (...paths: string[]) => string; /** * * @category Utils/Path * * 현재 모듈의 디렉터리를 기준으로 package.json 파일의 상위 디렉터리에 있는 package.json 파일의 경로를 기준으로 * 상대 경로를 사용하여 디렉터리를 생성하는 함수입니다. * * @example * ```typescript * // 현재 모듈의 디렉터리를 기준으로 디렉터리를 생성하는 함수를 생성하는 예시 * const myDir = packageRoot('src', 'components', 'Button'); * ``` */ declare const packageRoot: (...paths: string[]) => string; /** * 주어진 디렉터리에서 파일을 검색하여 해당 파일의 경로를 반환하는 함수입니다. * * @category Utils/Path * * @param dir - 검색할 디렉터리의 경로 * @param filename - 검색할 파일의 이름 * @returns 해당 파일의 경로, 찾지 못한 경우 null 반환 * * @example * ```typescript * // 주어진 디렉터리에서 파일을 검색하는 예시 * const filePath = findFile('src/components', 'index.js'); * ``` */ declare const findFile: (dir: string, filename: string) => string | null; /** * 주어진 디렉터리부터 상위 디렉터리까지 파일을 검색하여 해당 파일의 경로를 반환하는 함수입니다. * * @category Utils/Path * * @param dir - 검색을 시작할 디렉터리의 경로 * @param filename - 검색할 파일의 이름 * @returns 해당 파일의 경로, 찾지 못한 경우 null 반환 * * @example * ```typescript * // 주어진 디렉터리부터 상위 디렉터리까지 파일을 검색하는 예시 * const filePath = findFileToTop('src/components', 'index.js'); * ``` */ declare const findFileToTop: (dir: string, filename: string) => string | null; /** * 주어진 디렉터리부터 하위 디렉터리까지 파일을 검색하여 해당 파일의 경로를 반환하는 함수입니다. * * @category Utils/Path * * @param dir - 검색을 시작할 디렉터리의 경로 * @param filename - 검색할 파일의 이름 * @returns 해당 파일의 경로, 찾지 못한 경우 null 반환 * * @example * ```typescript * // 주어진 디렉터리부터 하위 디렉터리까지 파일을 검색하는 예시 * const filePath = findFileToBottom('src', 'index.js'); * ``` */ declare const findFileToBottom: (dir: string, filename: string) => string | null; /** * 주어진 디렉터리 내의 모든 파일 및 디렉터리에 대해 지정된 작업을 수행하는 함수입니다. * * @category Utils/Path * * @param param - 각 파일 또는 디렉터리에 대해 실행할 작업과 설정 * @param TPath - 작업을 수행할 디렉터리의 경로 * * @example * ```typescript * // 주어진 디렉터리 내의 모든 파일 및 디렉터리에 대해 작업을 수행하는 예시 * forEachFiles({ * each: (file) => console.log(file.name), * recursive: true, * filter: (file) => file.isDirectory(), * }, 'src'); * ``` */ declare const forEachFiles: { (param: { each: (file: fs.Dirent) => void; recursive?: boolean; filter?: (file: fs.Dirent) => boolean; }, TPath: string): void; (param: { each: (file: fs.Dirent) => void; recursive?: boolean; filter?: (file: fs.Dirent) => boolean; }, path: string): void; (param: { each: (file: fs.Dirent) => void; recursive?: boolean; filter?: (file: fs.Dirent) => boolean; }): (TPath: string) => void; }; /** * 주어진 대상 경로를 기준 경로와 결합하여 새 경로를 생성합니다. * * @category Utils/Path * * @param target - 대상 경로입니다. * @param base - 기준 경로입니다. * @returns 대상 경로와 기준 경로를 결합한 새 경로를 반환합니다. * * @example * ```typescript * // 주어진 대상 경로를 기준 경로와 결합하여 새 경로를 생성하는 예시 * const resolvePath = pathOf('file.txt'); * const result = resolvePath('/home/user'); // '/home/user/file.txt' * ``` */ declare const pathOf: { (target: string): (base: string) => string; (target: string, base: string): string; }; /** * 주어진 기준 경로를 대상 경로와 결합하여 새 경로를 생성합니다. * * @category Utils/Path * * @param base - 기준 경로입니다. * @param target - 대상 경로입니다. * @returns 기준 경로와 대상 경로를 결합한 새 경로를 반환합니다. * * @example * ```typescript * // 주어진 기준 경로를 대상 경로와 결합하여 새 경로를 생성하는 예시 * const resolvePath = pathOn('/home/user'); * const result = resolvePath('file.txt'); // '/home/user/file.txt' * ``` */ declare const pathOn: { (base: string): (target: string) => string; (base: string, target: string): string; }; type Options<T = string> = { includingPattern?: string[]; ignoredPattern?: string[]; recursive?: boolean; basePath?: string; formatKey?: (str: string, util: { toUpperSnakeCase: (str: string) => string; toPascalCase: (str: string) => string; }) => string; formatValue?: (data: { key: string; path: string; wholePath: string; info: path.ParsedPath; }) => T; }; type PathObj<T = string> = { [x in string]: T | PathObj<T>; }; declare const convertFilePathToObject: { <T>(params: Options<T>, targetPath: string): PathObj<T>; <T>(params: Options<T>): (targetPath: string) => PathObj<T>; }; /** * 성공 메시지를 생성하는 함수입니다. * * @category Utils/Logger * * @param value - 성공 메시지에 추가할 값 * @returns 성공 메시지 문자열 * * @example * ```typescript * // 성공 메시지를 생성하는 예시 * const message = success('Operation completed successfully.'); * ``` */ declare const success: (value: string) => string; /** * 오류 메시지를 생성하는 함수입니다. * * @category Utils/Logger * * @param value - 오류 메시지에 추가할 값 * @returns 오류 메시지 문자열 * * @example * ```typescript * // 오류 메시지를 생성하는 예시 * const message = error('An error occurred.'); * ``` */ declare const error: (value: string) => string; /** * 정보 메시지를 생성하는 함수입니다. * * @category Utils/Logger * * @param value - 정보 메시지에 추가할 값 * @returns 정보 메시지 문자열 * * @example * ```typescript * // 정보 메시지를 생성하는 예시 * const message = info('Additional information.'); * ``` */ declare const info: (value: string) => string; /** * 성공 로그를 출력하는 함수입니다. * * @category Utils/Logger * * @param title - 로그 제목 * @param value - 로그 값 * @returns 입력된 값 * * @example * ```typescript * // 성공 로그를 출력하는 예시 * successLog('Operation', result); * successLog('Operation')(result); * ``` */ declare const successLog: { <T>(title: string, value: T): T; <T>(title: string): (value: T) => T; }; /** * 오류 로그를 출력하는 함수입니다. * * @category Utils/Logger * * @param title - 로그 제목 * @param value - 로그 값 * @returns 입력된 값 * * @example * ```typescript * // 오류 로그를 출력하는 예시 * errorLog('Error', errorMessage); * errorLog('Error')(errorMessage); * ``` */ declare const errorLog: { <T>(title: string, value: T): T; <T>(title: string): (value: T) => T; }; /** * 정보 로그를 출력하는 함수입니다. * * @category Utils/Logger * * @param title - 로그 제목 * @param value - 로그 값 * @returns 입력된 값 * * @example * ```typescript * // 정보 로그를 출력하는 예시 * infoLog('Information', infoMessage); * infoLog('Information')(infoMessage); * ``` */ declare const infoLog: { <T>(title: string, value: T): T; <T>(title: string): (value: T) => T; }; /** * 존재 로그를 출력하는 함수입니다. * * @category Utils/Logger * * @param value - 존재 로그에 추가할 값 * @returns - * * @example * ```typescript * // 존재 로그를 출력하는 예시 * existLog('File exists.'); * ``` */ declare const existLog: (value: string) => void; /** * 생성 로그를 출력하는 함수입니다. * * @category Utils/Logger * * @param value - 생성 로그에 추가할 값 * @returns - * * @example * ```typescript * // 생성 로그를 출력하는 예시 * generateLog('File generated successfully.'); * ``` */ declare const generateLog: (value: string) => void; /** * Prettier 로그를 출력하는 함수입니다. * * @category Utils/Logger * * @param value - Prettier 로그에 추가할 값 * @returns - * * @example * ```typescript * // Prettier 로그를 출력하는 예시 * prettierLog('Code formatted successfully.'); * ``` */ declare const prettierLog: (value: string) => void; /** * box형태의 로그를 출력하는 함수입니다. * * @category Utils/Logger * @param value - box 로그에 추가할 값 * * @returns - * * @example * ```typescript * // Box 로그를 출력하는 예시 * boxLog(['box log 1', 'box log 2'], {title: 'Toktokhan'}) * ┌ Toktokhan_Dev ┐ * │ │ * │ box log 1 │ * │ box log 2 │ * │ │ * └───────────────┘ * ``` */ declare const boxLog: (value: string[], options: Options$1) => void; /** * 지정된 변수 이름과 데이터를 사용하여 내보낼 상수를 렌더링합니다. * * @category Utils/Render * * @param varName - 상수의 변수 이름입니다. * @param data - 상수의 데이터입니다. * @returns 렌더링된 상수를 반환합니다. * @throws {Error} 대상 템플릿을 찾을 수 없을 때 발생합니다. * * @example * ```typescript * // 내보낼 상수를 렌더링하는 예시 * const renderedConst = renderExportConst('myConst', 'someData'); * ``` */ declare const renderExportConst: (varName: string, data: string) => string; export { $, type CheckFileAccessParam, type ExtendedPrettierOptions, boxLog, checkFileAccess, convertFilePathToObject, createPackageRoot, cwd, error, errorLog, existLog, findFile, findFileToBottom, findFileToTop, forEachFiles, generateCodeFile, generateLog, getFilePaths, info, infoLog, json, packageRoot, pathOf, pathOn, prettierFile, prettierLog, prettierString, readFileSync, removeAll, renderExportConst, resetDirSync, success, successLog, withLoading, yaml };