t-comm
Version:
专业、稳定、纯粹的工具库
111 lines (110 loc) • 4.17 kB
TypeScript
/**
* 生成 PascalCase 匹配正则(前后必须是非单词字符)
* @param {string} value - kebab-case 名称
* @returns {RegExp}
* @example
* ```ts
* const reg = getComponentPascalReg('press-icon');
* 'use <PressIcon/>'.match(reg); // ['PressIcon']
* ```
*/
export declare function getComponentPascalReg(value: string): RegExp;
/**
* 生成三阶段重命名配置(plus -> temp, key -> plus, temp -> key)
* @param {string[]} rawList - 组件名列表,如 ['dialog', 'icon']
* @param {string[]} [extraList=[]] - 额外需要重命名的组件名列表
* @returns {{ renameConfig: Object, renameConfig2: Object, renameConfig3: Object }}
* @example
* ```ts
* const { renameConfig, renameConfig2, renameConfig3 } = getThreeStageRenameConfig(['dialog', 'icon']);
* // renameConfig: { 'press-dialog-plus': '<random>', 'press-icon-plus': '<random>' }
* // renameConfig2: { 'press-dialog': 'press-dialog-plus', 'press-icon': 'press-icon-plus' }
* // renameConfig3: { '<random>': 'press-dialog', '<random>': 'press-icon' }
* ```
*/
export declare function getThreeStageRenameConfig(rawList: string[], extraList?: string[]): {
renameConfig: Record<string, string>;
renameConfig2: Record<string, string>;
renameConfig3: Record<string, string>;
};
/**
* 生成 meta config(如 component-config.json)的 PascalCase 替换规则
* @param {string[]} rawList - 组件名列表
* @param {string[]} dirList - 目标文件 glob 列表
* @returns {Array<{ list: Array, dirList: string[] }>}
* @example
* ```ts
* const rules = getMetaConfigPascalReplaceRules(
* ['dialog', 'icon'],
* ['src/component-config.json'],
* );
* // rules 为三阶段替换规则数组,供 batchReplaceFileContent 使用
* ```
*/
export declare function getMetaConfigPascalReplaceRules(rawList: string[], dirList: string[]): {
list: [string, string][];
dirList: string[];
}[];
/**
* 生成文件内容的三阶段替换规则(kebab-case + PascalCase + 类名)
* @param {string[]} rawList - 组件名列表
* @param {string[]} dirList - 目标文件 glob 列表
* @param {Object} [options={}] - 可选配置
* @param {string[]} [options.needClassReplaceList=[]] - 需要额外替换类名的组件列表
* @returns {Array<{ list: Array, dirList: string[] }>}
* @example
* ```ts
* const rules = getComponentContentReplaceRules(
* ['dialog', 'icon'],
* ['src/**\/*.{ts,vue,less}'],
* { needClassReplaceList: ['icon'] },
* );
* batchReplaceFileContent(rules);
* ```
*/
export declare function getComponentContentReplaceRules(rawList: string[], dirList: string[], options?: {
needClassReplaceList?: string[];
}): {
list: [string | RegExp, string][];
dirList: string[];
}[];
/**
* 批量替换文件内容(性能优化版)
* 将同 dirList 的规则合并,每个文件只读写一次
* @param {Array<{ list: Array, dirList: string|string[] }>} replaceList - 替换规则列表
* @example
* ```ts
* batchReplaceFileContent([
* {
* list: [
* ['<PressIconPlus', '<PressIcon'],
* [/press-icon-plus/g, 'press-icon'],
* ],
* dirList: ['src/**\/*.vue'],
* },
* ]);
* // 同 dirList 的规则会被合并,避免重复读写
* ```
*/
export declare function batchReplaceFileContent(replaceList: Array<{
list: Array<[string | RegExp, string]>;
dirList: string | string[];
}>): void;
/**
* 批量重命名文件和文件夹(同步版本)
* @param {string} dirPath - 要处理的目录路径
* @param {Object} renameConfig - 重命名配置对象 { 旧名称: 新名称 }
* @param {boolean} [recursive=true] - 是否递归处理子目录
* @example
* ```ts
* batchRenameDirEntries('src/components', {
* 'press-icon-plus': 'press-icon',
* 'press-dialog-plus': 'press-dialog',
* });
* // 递归将 src/components 下名为 press-icon-plus、press-dialog-plus 的文件/文件夹重命名
*
* // 只重命名当前层、不递归
* batchRenameDirEntries('src/components', { 'a': 'b' }, false);
* ```
*/
export declare function batchRenameDirEntries(dirPath: string, renameConfig: Record<string, string>, recursive?: boolean): void;