{"bugs":{"url":"https://github.com/huarse/cli-base/issues"},"dist":{"shasum":"40297a98f50ca75d56d3a02a251b250556fe0c0a","tarball":"https://registry.npmjs.org/@irim/cli-base/-/cli-base-1.1.15-beta.1.tgz","fileCount":53,"integrity":"sha512-hJVE4YCkjEt9VwOpNeAOh4ldm7JT0+QYrH3kwf862qGvBoBU3Cn28Ah6hrBirkqtyUUUh+yErTOMSyHeWdrH1w==","signatures":[{"sig":"MEUCIEXY4QVrjwX2oLyjgPRGKa/cM+PBw4N92cLPqTCQNNH+AiEAv4UBcj8AdNRb9fLxFruGTynwQZscgtHRsXD2nfqoaUk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":69919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmq8bCRA9TVsSAnZWagAAdYkP/1zgoLgP9Dpv9hqyS9/Y\ns9fk0ZakA+DH1xGyi3Zgf0XjgYTH0ZNqqjyL3THkBlbnHxZW3hGv5hr0aTAa\n8pBspgXQixFvi1h7AuRcZr7h/nSAkvckcyXefKqfL2QlmQnLXetg8Ei0zTsX\nolb/YEcy52NZZywKWTz73NiMmc5tPNEU/gRleJ1ecQR9eK0h/KJ2kMzqnZBX\nlFgbtUGk80ATAsR/t9pjkMhyqMW8lqk+UtSm56xaR+KPsNxqHfzCzucxsmLN\nJI50KWVsYttYdVxMd1QP8hzSFeiKiO5Vu3E0yiU4dkBkdl/Y8vzkYgMEoB9K\nFrLRDpXgTtOWRuN6hS2kP9A35qlSdzdxrWzy5zsYNpLz8H+zcfaACQ4vSAxb\nKtEhT21ImCLBIZCFJRBSiKp/1JCYlYGuUzHxYrpIGVLson6hLsaM+uwha8Va\n7avYgr/SOu/kTMIVs3CVSPq6V7AU4XZgMHBWH9/4bYtkwXnWdEOU0RETSrd/\n7HzrAK4jb8phQbifjqm/WqK49wbIK4llIFe77va5o7zWk4Mlpqfq5Lh2/46Y\nZZ/CZK48sNT/NuwmmzDRaReA9wbgAH62zOt0tKcypYWLXL8PXhqB+pquVGGb\n7grfGmsxd9QrCBd9IKvv0yJ8LCG3T2uNRXoLuCBql4n075PCtMktkJ+NGQWR\ntnR7\r\n=+bin\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./lib/index.js","name":"@irim/cli-base","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS","pre-commit":"npm run lint && npm run test"}},"types":"./types/index.d.ts","author":{"name":"CAIHUAZHI","email":"huarse@gmail.com"},"readme":"# CLI BASE TOOLS\n\n![version](https://img.shields.io/npm/v/@irim/cli-base)\n![license](https://img.shields.io/npm/l/@irim/cli-base)\n![downloads](https://img.shields.io/npm/dw/@irim/cli-base)\n\nNode Cli 基础方法库\n\n## Getting Started\n\n- `$ npm install @irim/cli-base --save`\n\n```ts\nimport { consts, utils, files } from '@irim/cli-base';\nconst { print } = utils;\n\nprint('debug', 'hello', 'world');\n```\n\n## API\n\n### 1. consts 静态常量\n\n| 属性名   | 描述                | 类型      |\n| -------- | ------------------- | --------- |\n| HOMEPATH | 用户 home 目录      | `string`  |\n| IS_WIN   | 是否是 windows 系统 | `boolean` |\n\n### 2. utils 一些常用的方法\n\n| 方法名          | 描述                                 | 参数定义                                                                 | 返回值                         |\n| --------------- | ------------------------------------ | ------------------------------------------------------------------------ | ------------------------------ |\n| progressBar     | 返回一个进度条 string                | `recent: number, total?: number, label?: string`                         | `string`                       |\n| print           | 带颜色级别的 console.log             | `type: 'debug'|'info'|'success'|'warn'|'error', ...msgs: BaseType[]`     | `(filepath: string) => any`    |\n| printJSON       | 打印单层的 JSON                      | `json: Record<string, BaseType>`                                         | `void`                         |\n| parseProperties | 解析 .properties 文件，返回一个 JSON | `file: string`                                                           | `Promise<Record<string, any>>` |\n| templateRender  | 最简单的模板渲染                     | `tpl: string, data: Record<string, any> = {}`                            | `string`                       |\n| confirm         | node 控制台二次确认                  | `message: string, defaultValue = false`                                  | `Promise<boolean>`             |\n| select          | node 控制台用户选择                  | `message: string, options: SelectOptions<T>[], defaultValue: T`          | `Promise<T>`                   |\n| multi           | node 控制台用户多选                  | `message: string, options: SelectOptions<T>[], defaultValue: T[]`        | `Promise<T[]>`                 |\n| input           | node 控制台用户输入                  | `message: string, defaultValue?: string, validator = (v: string) => any` | `Promise<string>`              |\n| password        | node 控制台密码输入                  | `message: string, defaultValue?: string, validator = (v: string) => any` | `Promise<string>`              |\n| holding         | node 控制台进入等待状态，按回车继续  | `tips = '按回车继续...'`                                                 | `Promise<boolean>`             |\n| exec            | 执行 shell 命令，返回执行结果        | `command: string, cwd = process.cwd()`                                   | `Promise<any>`                 |\n| execSync        | 同步执行 shell 命令                  | `command: string, cwd = process.cwd()`                                   | `SpawnSyncReturns`             |\n\n其中 `input` 和 `password` 方法的第 3 个参数是校验方法，入参是输入的值，如果返回 false 或 Error（支持 Promise），则表示校验失败，例如：\n\n```ts\nutils.input('请输入用户名', null, async (value) => {\n  // 直接校验\n  return value === 'zhangsan'; \n\n  // 返回自定义错误文案\n  return value === 'zhangsan' ? true : new Error('校验失败！');\n\n  // 远程校验\n  return await request(`api/validate?name=${value}`);\n});\n```\n\n#### 扩展的类型定义\n\n```ts\n/**\n * 基本类型，不算 object、null、undefined\n */\nexport type BaseType = string | number | boolean | symbol;\n```\n\n### 3. files 文件操作相关的常用方法\n\n| 方法名          | 描述                                                      | 参数定义                                                                                        | 返回值                   |\n| --------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------ |\n| fileIterator    | 遍历目录文件，执行 callback                               | 见下文                                                                                          | `Promise<any>`           |\n| dirSyncIterator | 遍历目录文件，同步到目标目录，并对每一个文件执行 callback | 见下文                                                                                          | `Promise<any>`           |\n| getFileCount    | 统计目录中的文件数量                                      | `src: string, exclude?: RegExp`                                                                 | `Promise<number>`        |\n| copyDir         | 逐个复制目录中的文件                                      | `options: OptionShape`                                                                          | `Promise<any>`           |\n| clearDir        | 清空目录(有二次确认)                                      | `options: ClearOptions`                                                                         | `Promise<boolean>`       |\n| findInFolder    | 从目录中查找内容符合条件的文件                            | `src: string, callback: (filePath: string, content: string) => boolean, options: SearchOptions` | `Promise<SearchResult[]` |\n\n#### 扩展的类型定义\n\n```ts\n// 遍历文件目录，执行 callback\nexport async function fileIterator(\n  /** 目录路径 */\n  src: string,\n  /** 执行到文件时的回调，如果返回 false 或 async false，则遍历中止 */\n  fileCallback: (filePath: string, fileRelativePath: string) => any,\n  /** 执行到目录时的回调 */\n  dirCallback?: (dirRelativePath: string) => any,\n  /** 忽略的文件 */\n): Promise<any>;\n\n// 遍历文件目录，同步到目标目录，并对每一个文件执行 callback\nexport async function dirSyncIterator(\n  /** 源文件目录 */\n  source: string,\n  /** 目标目录 */\n  target: string,\n  /** 执行到文件时的回调 */\n  callback: (sourceFile: string, targetFile: string) => any,\n  /** 忽略的文件 */\n  exclude?: RegExp\n): Promise<any>\n\n// copyDir 方法的参数\nexport interface OptionShape {\n  /** 文件来源目录 */\n  src: string;\n  /** 目标目录 */\n  dist: string;\n  /** 文件内容替换规则  */\n  replacer?: { holder: RegExp; value: string }[];\n  /** 忽略的文件 */\n  exclude?: RegExp;\n  /** 只读文件（不读取&替换的文件） */\n  readonlyFile?: RegExp;\n  /** 文件名替换方法 */\n  fileNameTransfer?: (name: string) => string;\n  /** 文件内容格式化方法 */\n  contentFormatter?: (content: string, src: string) => Promise<string>;\n}\n\n// clearDir 方法的参数 \nexport interface ClearOptions {\n  /** 要清除的目录 */\n  src: string;\n  /** 是否有二次确认 */\n  confirm?: boolean;\n  /** 二次确认文案 */\n  confirmText?: string;\n  /** 忽略的文件 */\n  exclude?: RegExp;\n}\n\n// findInFolder 方法的参数\nexport interface SearchOptions {\n  /** 是否找到所有文件，默认 false，即找到第 1 个就返回 */\n  all?: boolean;\n  /** 如果指定了 include，则只处理匹配的文件 */\n  include?: RegExp;\n  /** 匹配规则的文件跳过 */\n  exclude?: RegExp;\n  /** 文件大小限制(byte)，超过大小的文件不遍历 */\n  limit?: number;\n  /** 读取文件的编码，默认是 utf-8 */\n  encoding?: BufferEncoding;\n}\n\nexport interface SearchResult {\n  filePath: string;\n  fileRelativePath: string;\n  fileSize: number;\n}\n```\n\n## CHANGELOG\n\n<!-- - **version**: change logs -->\n- **1.0.0** 发布 1.0 版本，整合并优化 已有能力\n- **1.0.4** 优化文档，迁移代码仓库\n- **1.1.0** 去掉 `BaseAction` ，简化架构\n- **1.1.7** 增强 `utils.print` 方法，可以将日志输出到本地\n- **1.1.9** 新增 `utils.multi` 方法，可以用于多选\n- **1.1.11** 优化 `files.copyDir` 方法，修改默认的配置项\n- **1.1.14** 新增 `utils.promiseTimer` 方法，可以将 promise 方法封装成带超时机制的方法\n\n## LICENSE\n\nBSD-3-Clause License\n\n## Contact Us\n\n[CAIHUAZHI](mailto:huarse@gmail.com)\n","gitHead":"d1211d479a2d986420910363c13172d890c14441","license":"BSD-3-Clause","scripts":{"lint":"eslint --fix --ext .js,.ts ./src","test":"jest --config=config/jest.config.js","build":"npm run build:lib && npm run build:esm","clear":"rm -rf lib esm types","prebuild":"npm run lint && npm run clear","build:esm":"tsc --outDir esm --module ES6 --target ES2019","build:lib":"tsc --outDir lib --module CommonJS --target ES2019","test:watch":"jest --config=config/jest.config.js --watch","build:watch":"tsc --outDir lib --module CommonJS --target ES2019 --watch","prepublishOnly":"npm run build"},"_npmUser":{"name":"huarse","email":"huarse@gmail.com"},"homepage":"https://github.com/huarse/cli-base#readme","keywords":["cli-base"],"repository":{"url":"git+ssh://git@github.com/huarse/cli-base.git","type":"git"},"_npmVersion":"6.14.12","description":"Base Module for Command Line Tools","directories":{},"maintainers":[{"name":"huarse","email":"huarse@gmail.com"}],"_nodeVersion":"14.16.1","dependencies":{"ora":"^5.4.0","chalk":"^4.1.1","fs-extra":"^9.1.0","inquirer":"^7.3.3","properties":"^1.2.1","cross-spawn":"^7.0.3","single-line-log":"^1.1.2"},"publishConfig":{"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^26.6.3","husky":"~4.3.8","eslint":"~7.25.0","typescript":"^4.2.4","@babel/core":"^7.13.16","@types/jest":"^26.0.22","@types/node":"^14.14.41","@commitlint/cli":"~12.1.1","@types/fs-extra":"^9.0.11","@types/inquirer":"^7.3.1","@babel/preset-env":"^7.13.15","@types/cross-spawn":"^6.0.2","@babel/preset-typescript":"^7.13.0","@typescript-eslint/parser":"~4.22.0","@commitlint/config-conventional":"~12.1.1","@typescript-eslint/eslint-plugin":"~4.22.0"},"_npmOperationalInternal":{"tmp":"tmp/cli-base_1.1.15-beta.1_1620750106704_0.7561635572476275","host":"s3://npm-registry-packages"},"_id":"@irim/cli-base@1.1.15-beta.1","version":"1.1.15-beta.1"}