1.0.18 • Published 2 years ago

@agds/node-utils v1.0.18

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

@agds/node-utils

版本 :1.0.18

agds系统内部node工具函数库

快速开始

安装

npm i @agds/node-utils

引入

const utils = require('@agds/node-utils');
const { ConvName, FastPath, FastFs, Notice, PresetUtils, GitUtils, NpmUtils, CmdUtils } = utils;

导出

module.exports = { ConvName, FastPath, FastFs, Notice, PresetUtils, GitUtils };

代码演示

const { expect, test, describe } = require('@jest/globals');
const { ConvName, FastFs, FastPath, Notice, PresetUtils, CmdUtils, GitUtils, NpmUtils } = require('@agds/node-utils');
const path = require('path');
const fs = require('fs-extra');
describe('ConvName', () => {
    test('ConvName.initName', () => {
        const convName = ConvName.initName('ConvName-test');
        expect(convName).toMatchObject({
            lineName: 'conv-name-test',
            humpName: 'ConvNameTest',
            lowerHumpName: 'convNameTest',
        });
    });
    test('class ConvName', () => {
        const convName = new ConvName('ConvName-test');
        expect(convName).toMatchObject({
            lineName: 'conv-name-test',
            humpName: 'ConvNameTest',
            lowerHumpName: 'convNameTest',
        });
    });
    test('ConvName.toLine', () => {
        const name = ConvName.toLine('ConvName-test');
        expect(name).toBe('conv-name-test');
    });
    test('ConvName.toLowerHump', () => {
        const name = ConvName.toLowerHump('ConvName-test');
        expect(name).toBe('convNameTest');
    });
    test('ConvName.toUpperHump', () => {
        const name = ConvName.toUpperHump('ConvName-test');
        expect(name).toBe('ConvNameTest');
    });
});

const testText = 'Test';
describe('FastFs', () => {
    test('FastFs.writeFile', async () => {
        const pathName = path.join(__dirname, '.temp/FastFs.writeFile.test');
        await FastFs.writeFile(pathName, testText);
        expect(fs.readFileSync(pathName, { encoding: 'utf-8' })).toBe(testText);
    });
    test('FastFs.writeFileSync', () => {
        const pathName = path.join(__dirname, '.temp/FastFs.writeFileSync.test');
        FastFs.writeFileSync(pathName, testText);
        expect(fs.readFileSync(pathName, { encoding: 'utf-8' })).toBe(testText);
    });
    const statPathName = path.join(__dirname, '../__mock__/index.js');
    const statFalsePathName = path.join(__dirname, '../__mock__/index.jst');

    test('FastFs.getPathStat', async () => {
        const res = await FastFs.getPathStat(statPathName);
        expect(res).toBe(true);
    });
    test('FastFs.getPathStat false', async () => {
        const res = await FastFs.getPathStat(statFalsePathName);
        expect(res).toBe(false);
    });
    test('FastFs.getPathStatSync', () => {
        const res = FastFs.getPathStatSync(statPathName);
        expect(res).toBe(true);
    });
    test('FastFs.getPathStatSync false', () => {
        const res = FastFs.getPathStatSync(statFalsePathName);
        expect(res).toBe(false);
    });
    const obj = {
        a: 'a',
        b: 1,
    };
    test('FastFs.writeJsonFormat&FastFs.readJson', async () => {
        const pathName = path.join(__dirname, '.temp/FastFs.writeJsonFormat.json');
        await FastFs.writeJsonFormat(pathName, obj);
        expect(await FastFs.readJson(pathName)).toMatchObject(obj);
    });
    test('FastFs.writeJsonFormatSync&FastFs.readJsonSync', () => {
        const pathName = path.join(__dirname, '.temp/FastFs.writeJsonFormatSync.json');
        FastFs.writeJsonFormatSync(pathName, obj);
        expect(FastFs.readJsonSync(pathName)).toMatchObject(obj);
    });
    const json = require('../__mock__/json.json');
    const jsonPathName = path.join(__dirname, '../__mock__/json.json');
    test('FastFs.readJson', async () => {
        const res = await FastFs.readJson(jsonPathName);
        expect(res).toMatchObject(json);
    });
    test('FastFs.readJsonSync', () => {
        const res = FastFs.readJsonSync(jsonPathName);
        expect(res).toMatchObject(json);
    });
    test('FastFs parseJson error', () => {
        const jsonPathName = path.join(__dirname, '../__mock__/index.js');
        try {
            FastFs.readJsonSync(jsonPathName);
        } catch (error) {
            expect(error.message).toMatch(jsonPathName);
        }
    });
    test('FastFs.sortDependencies', () => {
        FastFs.sortDependencies(path.join(__dirname, '../__mock__/test-package.json'));
        expect(true).toBe(true);
    });
});

describe('FastPath', () => {
    test('FastPath.getCwdPath', () => {
        const res = FastPath.getCwdPath('package.json');
        expect(typeof res === 'string').toBe(true);
    });
    test('FastPath.getHomePath', () => {
        const res = FastPath.getHomePath('cache');
        expect(typeof res === 'string').toBe(true);
    });
    test('FastPath.getagdsHomePath', () => {
        const res = FastPath.getAgdsHomePath('cache');
        expect(typeof res === 'string').toBe(true);
    });
    test('FastPath.convPath', () => {
        const res = FastPath.convPath(__dirname, 'cache');
        expect(typeof res === 'string').toBe(true);
    });
    test('FastPath.convPath root', () => {
        const res = FastPath.convPath(__dirname, '/cache');
        expect(typeof res === 'string').toBe(true);
    });
});
describe('Notice', () => {
    const onConsoleOut = (logMethod, cb, out) => new Promise(resolve => {
        const log = console[logMethod];
        console[logMethod] = function () {
            // log.apply(console, arguments);
            cb.apply(null, arguments);
            resolve();
            console[logMethod] = log;
        };
        out();
    });
    test('Notice.success', () => {
        return onConsoleOut('log', (res) => {
            expect(JSON.stringify(res)).toBe('"\\u001b[42m\\u001b[30m SUCCESS \\u001b[39m\\u001b[49m\\u001b[32m 成功信息\\u001b[39m"');
        }, () => Notice.success('成功信息'));
    });
    test('Notice.error', () => {
        return onConsoleOut('error', (res) => {
            expect(JSON.stringify(res)).toBe('"\\u001b[41m ERROR \\u001b[49m\\u001b[31m 错误信息\\u001b[39m"');
        }, () => Notice.error('错误信息'));
    });
    test('Notice.warn', () => {
        return onConsoleOut('warn', (res) => {
            expect(JSON.stringify(res)).toBe('"\\u001b[43m\\u001b[30m WARN \\u001b[39m\\u001b[49m\\u001b[33m 警告信息\\u001b[39m"');
        }, () => Notice.warn('警告信息'));
    });
    test('Notice.info', () => {
        return onConsoleOut('info', (res) => {
            expect(JSON.stringify(res)).toBe('"\\u001b[44m\\u001b[30m INFO \\u001b[39m\\u001b[49m\\u001b[36m 普通信息\\u001b[39m"');
        }, () => Notice.info('普通信息'));
    });
    test('Notice.getStr', () => {
        const res = Notice.getStr('info', '普通信息颜色文字');
        expect(JSON.stringify(res)).toBe('"\\u001b[36m普通信息颜色文字\\u001b[39m"');
    });
    test('Notice.getBoldStr', () => {
        const res = Notice.getBoldStr('blue', '普通信息颜色文字');
        expect(JSON.stringify(res)).toBe('"\\u001b[1m\\u001b[34m普通信息颜色文字\\u001b[39m\\u001b[22m"');
    });
});

describe('PresetUtils', () => {
    const config = {
        presets: [{
            e: 'e',
            b: ['b'],
            c: 'c',
        }],
        a: 'a',
        c: 'd',
        b: [
            'a',
            'c',
        ],
        modify: (_config) => {
            delete _config.c;
        },
    };
    test('PresetUtils.getDeepPreset', async () => {
        const res = await PresetUtils.getDeepPreset(config);
        expect(res).toMatchObject([
            { e: 'e', b: ['b'], c: 'c' },
            { presets: [{ e: 'e', b: ['b'], c: 'c' }], a: 'a', c: 'd', b: ['a', 'c'] },
        ]);
    });
    test('PresetUtils.getDeepPresetMerge', async () => {
        const res = await PresetUtils.getDeepPresetMerge(config);
        expect(res).toMatchObject({ a: 'a', b: ['b', 'a', 'c'], c: 'd', e: 'e' });
    });
    test('PresetUtils.getDeepPresetMergeAndModify', async () => {
        const res = await PresetUtils.getDeepPresetMergeAndModify(config);
        expect(res).toMatchObject({ a: 'a', b: ['b', 'a', 'c'], e: 'e' });
    });
});

describe('CmdUtils', () => {

    test('CmdUtils.runCommand', () => {
        return CmdUtils.runCommand('cat', [path.join(__dirname, '../__mock__/test-package.json')]).then(() => {
            expect(true).toBe(true);
        });
    });
    test('CmdUtils.runCommand error', () => {
        return CmdUtils.runCommand('aaa').catch((e) => {
            expect(e.message).toMatch('aaa' + '执行失败');
        });
    });
});

describe('GitUtils', () => {
    test('GitUtils.getUser', () => {
        const user = GitUtils.getUser();
        expect(Object.values(user).map(v => typeof v).join(' ')).toBe(new Array(3).fill('string').join(' '));
    });
});

describe('NpmUtils', () => {
    const packageName = '@agds/node-utils';
    const version = '1.0.14';
    test('NpmUtils.getRegistry', () => {
        const res = NpmUtils.getRegistry();
        expect(typeof res).toBe('string');
    });
});

API文档

nodeUtils

nodeUtils.CmdParser

基于commander.js封装的命令行解析工具库

性质: nodeUtils的静态class

CmdParser.optionParseByConfig(program, config)

基于config配置Command实例

性质: CmdParser的静态方法

参数类型描述
programCommandcommand实例
configCmdConfig命令行解析配置

CmdConfig : object

命令行解析配置

性质: optionParseByConfig的类型声明

属性

属性类型描述
cmdstring作为插件时为子命令名称,单独使用时agds-<cmd>为命令行程序名称
descstring描述
aliasstring此命令的别名,只在插件调用时有效
optsArray.<OptConfig>option配置项描述
argsArray.<ArgConfig>option配置项描述

OptConfig : object

命令行option解析配置

性质: optionParseByConfig的类型声明

属性

属性类型描述
optstringoption字段配置
descstring描述
defaultstring | boolean默认值
requiredboolean是否是必填参数

ArgConfig : object

命令行option解析配置

性质: optionParseByConfig的类型声明

属性

属性类型描述
argstringoption字段配置
descstring描述
defaultstring | boolean默认值

CmdParser.cmdParser(options) ⇒ Command

基于配置文件的命令行解析器

性质: CmdParser的静态方法

参数类型描述
optionsobject函数参数
options.rootstring当前命令行npm包根目录
options.isCoreboolean是否是@agds/cli调用
options.cmdstring命令名称,命令调用必填

nodeUtils.CmdUtils

运行命令行的工具集

性质: nodeUtils的静态class

CmdUtils.installDependencies(options, prod, executable) ⇒ Promise.<void>

在项目中执行 npm install

性质: CmdUtils的静态方法

参数类型默认值描述
optionsmodule:child_process~SpawnOptionsspawn函数的选项参数
prodboolean是否只下载生产依赖
executable'npm' | 'yarn' | stringnpm依赖下载工具,可选值:'npm','yarn'或其他node包管理命令

CmdUtils.runCommand(cmd, args, options) ⇒ Promise.<void>

生成一个子进程并运行指定的命令 默认情况下,运行在CWD和'inherit'的stdio 选项与node的child_process.spawn相同

性质: CmdUtils的静态方法

参数类型描述
cmdstring命令
argsArray.<string>参数数组
optionsmodule:child_process~SpawnOptionsspawn函数的选项参数

nodeUtils.ConvName

名称处理工具类,命名格式转换

性质: nodeUtils的静态class

new ConvName(name)

获取三种名称转换结果的集合

参数类型描述
namestirng名称文本

convName.lineName : string

横杠名称

性质: ConvName的instance属性

convName.humpName : string

大驼峰名称

性质: ConvName的instance属性

convName.lowerHumpName : string

小驼峰名称

性质: ConvName的instance属性

ConvName.toUpperHump(name) ⇒ string

横杠转大驼峰

性质: ConvName的静态方法

参数类型描述
namestring名称文本

ConvName.toLowerHump(name) ⇒ string

横杠转小驼峰

性质: ConvName的静态方法

参数类型描述
namestring名称文本

ConvName.toLine(name) ⇒ string

驼峰转换横杠

性质: ConvName的静态方法

参数类型描述
namestring名称文本

ConvName.initName(name) ⇒ ConvName

获取驼峰和横杠名称

性质: ConvName的静态方法

参数类型描述
namestring名称文本

nodeUtils.FastFs

文件系统操作类,集合了几个使用频率较高的文件操作函数

性质: nodeUtils的静态class

FastFs.writeFile(filename, data) ⇒ Promise.<void>

异步写入数据,不存在的路径自动创建

性质: FastFs的静态方法

参数类型描述
filenamefs.PathLike文件名
dataobject写入的数据(对象)

FastFs.writeFileSync(filename, data) ⇒ void

同步写入数据,不存在的路径自动创建

性质: FastFs的静态方法

参数类型描述
filenamefs.PathLike文件名
dataobject写入的数据(对象)

FastFs.getPathStat(path) ⇒ Promise.<boolean>

异步获取路径是否存在

性质: FastFs的静态方法

参数类型描述
pathfs.PathLike路径

FastFs.getPathStatSync(path) ⇒ boolean

同步获取路径是否存在

性质: FastFs的静态方法

参数类型描述
pathfs.PathLike路径

FastFs.writeJsonFormat(filename, data, space) ⇒ Promise

异步写入符合.json格式的json文件

性质: FastFs的静态方法

参数类型默认值描述
filenamefs.PathLike文件路径
dataany需要写入的数据
spacestring | number2指定缩进用的空白字符串

FastFs.writeJsonFormatSync(filename, data, space) ⇒ void

同步写入符合.json格式的json文件

性质: FastFs的静态方法

参数类型默认值描述
filenamefs.PathLike文件路径
dataany需要写入的数据
spacestring | number2指定缩进用的空白字符串

FastFs.readJson(filename) ⇒ Promise.<object>

异步读取json文件

性质: FastFs的静态方法

参数类型描述
filenamefs.PathLikejson文件路径

FastFs.readJsonSync(filename) ⇒ object

同步读取json文件

性质: FastFs的静态方法

参数类型描述
filenamefs.PathLikejson文件路径

FastFs.sortDependencies(packageJsonFile)

对packageJson的依赖对象进行key的排序

性质: FastFs的静态方法

参数类型描述
packageJsonFilestringpackageJson文件绝对路径

nodeUtils.FastPath

路径工具类,快速获取各类node常用路径,每个方法要求路径都不是绝对路径 如果是绝对路径,就按照绝对路径拼接

性质: nodeUtils的静态class

FastPath.getCwdPath(...paths) ⇒ string

获取运行目录加路径的绝对路径

性质: FastPath的静态方法

参数类型描述
...pathsstring路径

FastPath.getHomePath(...paths) ⇒ string

获取用户目录加路径的绝对路径

性质: FastPath的静态方法

参数类型描述
...pathsstring路径

FastPath.getAgdsHomePath(...paths) ⇒ string

获取用户目录加路径的绝对路径

性质: FastPath的静态方法

参数类型描述
...pathsstring路径

FastPath.convPath(basePath, paths) ⇒ string

基于基础路径拼接追加路径,如果追加路径数组第一个路径是绝对路径,忽略基础路径直接拼接返回 是其他函数的依赖函数

性质: FastPath的静态方法

参数类型描述
basePathstring基础路径
pathsArray.<string>追加路径数组

nodeUtils.GitUtils

Git工具集合

性质: nodeUtils的静态class

GitUtils.gcHasMsg() ⇒ boolean

判断git commit是否传入-m参数 配合yorkie使用,不支持识别husky

性质: GitUtils的静态方法

GitUtils.getUser() ⇒ UserObj

获取当前git用户名称

性质: GitUtils的静态方法 返回值: UserObj - git用户名对象

UserObj : object

git用户名对象

性质: getUser的类型声明

属性

属性类型描述
namestring名字
emailstring电子邮箱
allstring{name}<{email}>

nodeUtils.Notice

基于chalk封装的控制台输出静态函数类

性质: nodeUtils的静态class

ChalkType : 'success' | 'error' | 'warn' | 'info' | string

chalk类型以及别名

性质: Notice的类型声明

Notice.success(msg) ⇒ void

控制台输出成功信息

性质: Notice的静态方法

参数类型描述
msgstring成功信息

Notice.error(msg) ⇒ void

控制台输出错误信息

性质: Notice的静态方法

参数类型描述
msgstring错误信息文本

Notice.warn(msg) ⇒ void

控制台输出警告信息

性质: Notice的静态方法

参数类型描述
msgstring警告信息文本

Notice.info(msg) ⇒ void

控制台输出信息

性质: Notice的静态方法

参数类型描述
msgstring信息文本

Notice.getStr(type, msg) ⇒ chalk

获取各种颜色的字体

性质: Notice的静态方法

参数类型描述
typeChalkTypechalk类型
msgstring文本

Notice.getBoldStr(type, msg) ⇒ chalk

获取各种颜色的粗体字体

性质: Notice的静态方法

参数类型描述
typeChalkTypechalk类型
msgstring文本

nodeUtils.NpmUtils

npm工具集合

性质: nodeUtils的静态class

NpmUtils.getRegistry() ⇒ string

获取当前项目的npm镜像地址

性质: NpmUtils的静态方法

NpmUtils.getPackageInfo(packageName, version) ⇒ Promise

获取npm包的所有版本的所有信息

性质: NpmUtils的静态方法

参数类型描述
packageNamestring包名
versionstring版本或tag

NpmUtils.getPackageInfoWithVersion(packageName, version) ⇒ Promise

获取指定版本包信息

性质: NpmUtils的静态方法 返回值: Promise - 对应版本包信息

参数类型默认值描述
packageNamestring包名
versionstring"latest"版本或者版本tag

NpmUtils.downloadPackage(options) ⇒ string

下载npm包到本地

性质: NpmUtils的静态方法 返回值: string - 包下载的本地路径

参数类型描述
optionsobject下载配置
options.outputDirstring输出目录
options.packageNamestring包名
options.versionstring版本或者版本tag
options.autoInstallboolean | InstallOption自动下载npm包依赖或者自动下载配置

InstallOption : object

下载配置

性质: downloadPackage的类型声明

属性

属性类型默认值描述
prodbooleantrue是否只下载生产依赖

nodeUtils.PresetUtils

支持presets预设的配置生成工具

性质: nodeUtils的静态class

Config : object

支持preset的配置对象

性质: PresetUtils的类型声明

属性

属性类型描述
presetsArray.<Config>预设配置数组
modifyConfigModify将默认配置和preset合并后生成的config再次处理的钩子

ConfigModify ⇒ Config

性质: PresetUtils的类型声明

参数类型描述
configConfig将默认配置和preset合并后生成的config

PresetUtils.getDeepPreset(config) ⇒ Promise.<Array.<Config>>

递归获取配置对象presets数组,返回一维数组

性质: PresetUtils的静态方法

参数类型描述
configConfig配置对象

PresetUtils.getDeepPresetMerge(config) ⇒ Config

递归获取配置对象presets数组,并使用merge合并

性质: PresetUtils的静态方法

参数类型描述
configConfig配置对象

PresetUtils.getDeepPresetMergeAndModify(config) ⇒ Config

递归获取配置对象presets数组,并使用merge合并,最后调用config.modify函数

性质: PresetUtils的静态方法

参数类型描述
configConfig配置对象

命令行使用文档

Usage: agds-gc-has-msg [options]

判断git commit命令是否传入-m参数

Options:
  -v,--version  查看版本号
  -h, --help    查看帮助信息

配合git hooks【prepare-commit-msg】和【commitizen】使用,避免git commit已经传入-m参数时调用commitizen界面

文档查看:git@gitee.com:agile-development-system/node-utils
@agds/node-utils@1.0.16 /Users/jinyang/code/ads/node-utils/node_modules/@agds/node-utils

许可证

MIT License Copyright (c) 2021 锦阳

请维护者喝杯咖啡

加入钉钉群讨论或加入开发