template-syncer 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +138 -40
- package/bin/syn.js +36 -72
- package/lib/index.d.ts +4 -111
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +14 -964
- package/lib/index.js.map +1 -1
- package/lib/package.json +15 -12
- package/lib/syncer.d.ts +65 -0
- package/lib/syncer.d.ts.map +1 -0
- package/lib/syncer.js +413 -0
- package/lib/syncer.js.map +1 -0
- package/lib/types.d.ts +95 -30
- package/lib/types.d.ts.map +1 -1
- package/lib/ui/index.d.ts +4 -0
- package/lib/ui/index.d.ts.map +1 -0
- package/lib/ui/index.js +11 -0
- package/lib/ui/index.js.map +1 -0
- package/lib/ui/logger.d.ts +26 -0
- package/lib/ui/logger.d.ts.map +1 -0
- package/lib/ui/logger.js +60 -0
- package/lib/ui/logger.js.map +1 -0
- package/lib/ui/prompts.d.ts +48 -0
- package/lib/ui/prompts.d.ts.map +1 -0
- package/lib/ui/prompts.js +202 -0
- package/lib/ui/prompts.js.map +1 -0
- package/lib/ui/tree.d.ts +10 -0
- package/lib/ui/tree.d.ts.map +1 -0
- package/lib/ui/tree.js +130 -0
- package/lib/ui/tree.js.map +1 -0
- package/lib/utils/categorizer.d.ts +24 -0
- package/lib/utils/categorizer.d.ts.map +1 -0
- package/lib/utils/categorizer.js +201 -0
- package/lib/utils/categorizer.js.map +1 -0
- package/lib/utils/git.d.ts +36 -0
- package/lib/utils/git.d.ts.map +1 -0
- package/lib/utils/git.js +96 -0
- package/lib/utils/git.js.map +1 -0
- package/lib/utils/index.d.ts +6 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +14 -0
- package/lib/utils/index.js.map +1 -0
- package/lib/utils/merger.d.ts +40 -0
- package/lib/utils/merger.d.ts.map +1 -0
- package/lib/utils/merger.js +223 -0
- package/lib/utils/merger.js.map +1 -0
- package/lib/utils/platform.d.ts +44 -0
- package/lib/utils/platform.d.ts.map +1 -0
- package/lib/utils/platform.js +169 -0
- package/lib/utils/platform.js.map +1 -0
- package/lib/utils/scanner.d.ts +40 -0
- package/lib/utils/scanner.d.ts.map +1 -0
- package/lib/utils/scanner.js +221 -0
- package/lib/utils/scanner.js.map +1 -0
- package/package.json +15 -12
package/lib/ui/tree.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatFileTree = formatFileTree;
|
|
4
|
+
exports.formatGroupedTree = formatGroupedTree;
|
|
5
|
+
/**
|
|
6
|
+
* 构建文件树
|
|
7
|
+
*/
|
|
8
|
+
function buildTree(files) {
|
|
9
|
+
const root = {
|
|
10
|
+
name: '',
|
|
11
|
+
isFile: false,
|
|
12
|
+
children: new Map()
|
|
13
|
+
};
|
|
14
|
+
for (const file of files) {
|
|
15
|
+
const parts = file.path.replace(/\\/g, '/').split('/');
|
|
16
|
+
let current = root;
|
|
17
|
+
for (let i = 0; i < parts.length; i++) {
|
|
18
|
+
const part = parts[i];
|
|
19
|
+
const isLast = i === parts.length - 1;
|
|
20
|
+
if (!current.children.has(part)) {
|
|
21
|
+
current.children.set(part, {
|
|
22
|
+
name: part,
|
|
23
|
+
isFile: isLast,
|
|
24
|
+
file: isLast ? file : undefined,
|
|
25
|
+
children: new Map()
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
current = current.children.get(part);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return root;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 获取状态文本
|
|
35
|
+
*/
|
|
36
|
+
function getStatusText(status) {
|
|
37
|
+
switch (status) {
|
|
38
|
+
case 'new': return '(新增)';
|
|
39
|
+
case 'modified': return '(修改)';
|
|
40
|
+
case 'deleted': return '(删除)';
|
|
41
|
+
default: return '';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 渲染树形结构
|
|
46
|
+
*/
|
|
47
|
+
function renderTree(node, prefix = '', isLast = true, isRoot = true) {
|
|
48
|
+
const lines = [];
|
|
49
|
+
if (!isRoot) {
|
|
50
|
+
const connector = isLast ? '└── ' : '├── ';
|
|
51
|
+
if (node.isFile && node.file) {
|
|
52
|
+
const status = getStatusText(node.file.status);
|
|
53
|
+
const icon = node.file.status === 'deleted' ? '🗑️' : node.file.icon;
|
|
54
|
+
lines.push(`${prefix}${connector}${icon} ${node.name} ${status}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
lines.push(`${prefix}${connector}📁 ${node.name}/`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const children = Array.from(node.children.values());
|
|
61
|
+
// 排序:目录在前,文件在后
|
|
62
|
+
children.sort((a, b) => {
|
|
63
|
+
if (a.isFile === b.isFile)
|
|
64
|
+
return a.name.localeCompare(b.name);
|
|
65
|
+
return a.isFile ? 1 : -1;
|
|
66
|
+
});
|
|
67
|
+
const newPrefix = isRoot ? '' : prefix + (isLast ? ' ' : '│ ');
|
|
68
|
+
children.forEach((child, index) => {
|
|
69
|
+
const childIsLast = index === children.length - 1;
|
|
70
|
+
lines.push(...renderTree(child, newPrefix, childIsLast, false));
|
|
71
|
+
});
|
|
72
|
+
return lines;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 生成文件树字符串
|
|
76
|
+
*/
|
|
77
|
+
function formatFileTree(files) {
|
|
78
|
+
if (files.length === 0)
|
|
79
|
+
return '';
|
|
80
|
+
const tree = buildTree(files);
|
|
81
|
+
const lines = renderTree(tree);
|
|
82
|
+
return lines.join('\n');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 按分类分组并生成树
|
|
86
|
+
*/
|
|
87
|
+
function formatGroupedTree(files) {
|
|
88
|
+
if (files.length === 0)
|
|
89
|
+
return '';
|
|
90
|
+
// 按分类分组
|
|
91
|
+
const groups = new Map();
|
|
92
|
+
for (const file of files) {
|
|
93
|
+
const list = groups.get(file.category) || [];
|
|
94
|
+
list.push(file);
|
|
95
|
+
groups.set(file.category, list);
|
|
96
|
+
}
|
|
97
|
+
const lines = [];
|
|
98
|
+
const categories = Array.from(groups.entries());
|
|
99
|
+
categories.forEach(([category, categoryFiles], catIndex) => {
|
|
100
|
+
const icon = categoryFiles[0].icon;
|
|
101
|
+
const newCount = categoryFiles.filter(f => f.status === 'new').length;
|
|
102
|
+
const modCount = categoryFiles.filter(f => f.status === 'modified').length;
|
|
103
|
+
const delCount = categoryFiles.filter(f => f.status === 'deleted').length;
|
|
104
|
+
// 分类标题
|
|
105
|
+
let stats = `${categoryFiles.length} 个文件`;
|
|
106
|
+
const parts = [];
|
|
107
|
+
if (newCount > 0)
|
|
108
|
+
parts.push(`新增: ${newCount}`);
|
|
109
|
+
if (modCount > 0)
|
|
110
|
+
parts.push(`修改: ${modCount}`);
|
|
111
|
+
if (delCount > 0)
|
|
112
|
+
parts.push(`删除: ${delCount}`);
|
|
113
|
+
if (parts.length > 0)
|
|
114
|
+
stats += `, ${parts.join(', ')}`;
|
|
115
|
+
lines.push(`${icon} ${category} (${stats})`);
|
|
116
|
+
// 构建该分类的文件树
|
|
117
|
+
const tree = buildTree(categoryFiles);
|
|
118
|
+
const treeLines = renderTree(tree);
|
|
119
|
+
// 添加缩进
|
|
120
|
+
treeLines.forEach(line => {
|
|
121
|
+
lines.push(` ${line}`);
|
|
122
|
+
});
|
|
123
|
+
// 分类之间添加空行
|
|
124
|
+
if (catIndex < categories.length - 1) {
|
|
125
|
+
lines.push('');
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return lines.join('\n');
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/ui/tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CategoryRule } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* 文件分类器
|
|
4
|
+
*/
|
|
5
|
+
export declare class Categorizer {
|
|
6
|
+
private rules;
|
|
7
|
+
constructor(customRules?: CategoryRule[]);
|
|
8
|
+
/**
|
|
9
|
+
* 获取文件分类
|
|
10
|
+
*/
|
|
11
|
+
categorize(filePath: string): {
|
|
12
|
+
category: string;
|
|
13
|
+
icon: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* 获取默认分类
|
|
17
|
+
*/
|
|
18
|
+
private getDefaultCategory;
|
|
19
|
+
/**
|
|
20
|
+
* 添加自定义规则
|
|
21
|
+
*/
|
|
22
|
+
addRule(rule: CategoryRule): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=categorizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categorizer.d.ts","sourceRoot":"","sources":["../../src/utils/categorizer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,UAAU,CAAC;AA2IvD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAiB;gBAElB,WAAW,GAAE,YAAY,EAAO;IAM5C;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAahE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;CAIlC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Categorizer = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const minimatch_1 = require("minimatch");
|
|
39
|
+
/**
|
|
40
|
+
* 默认分类规则 (按优先级排序)
|
|
41
|
+
*/
|
|
42
|
+
const DEFAULT_RULES = [
|
|
43
|
+
// 包管理 - 锁文件
|
|
44
|
+
{ match: '**/package-lock.json', category: '包管理', icon: '🔒', priority: 100 },
|
|
45
|
+
{ match: '**/yarn.lock', category: '包管理', icon: '🧶', priority: 100 },
|
|
46
|
+
{ match: '**/pnpm-lock.yaml', category: '包管理', icon: '📦', priority: 100 },
|
|
47
|
+
{ match: '**/bun.lockb', category: '包管理', icon: '🥟', priority: 100 },
|
|
48
|
+
{ match: '**/Cargo.lock', category: '包管理', icon: '🦀', priority: 100 },
|
|
49
|
+
{ match: '**/go.sum', category: '包管理', icon: '🐹', priority: 100 },
|
|
50
|
+
{ match: '**/Gemfile.lock', category: '包管理', icon: '💎', priority: 100 },
|
|
51
|
+
{ match: '**/poetry.lock', category: '包管理', icon: '🐍', priority: 100 },
|
|
52
|
+
{ match: '**/Pipfile.lock', category: '包管理', icon: '🐍', priority: 100 },
|
|
53
|
+
{ match: '**/composer.lock', category: '包管理', icon: '🐘', priority: 100 },
|
|
54
|
+
// 项目配置
|
|
55
|
+
{ match: '**/package.json', category: '项目配置', icon: '📦', priority: 90 },
|
|
56
|
+
{ match: '**/Cargo.toml', category: '项目配置', icon: '🦀', priority: 90 },
|
|
57
|
+
{ match: '**/go.mod', category: '项目配置', icon: '🐹', priority: 90 },
|
|
58
|
+
{ match: '**/pyproject.toml', category: '项目配置', icon: '🐍', priority: 90 },
|
|
59
|
+
{ match: '**/composer.json', category: '项目配置', icon: '🐘', priority: 90 },
|
|
60
|
+
// TypeScript/JavaScript 配置
|
|
61
|
+
{ match: '**/tsconfig*.json', category: 'TypeScript', icon: '🔷', priority: 85 },
|
|
62
|
+
{ match: '**/jsconfig.json', category: 'JavaScript', icon: '🟨', priority: 85 },
|
|
63
|
+
// 构建工具
|
|
64
|
+
{ match: '**/vite.config.*', category: '构建配置', icon: '⚡', priority: 80 },
|
|
65
|
+
{ match: '**/webpack.config.*', category: '构建配置', icon: '📦', priority: 80 },
|
|
66
|
+
{ match: '**/rollup.config.*', category: '构建配置', icon: '🎯', priority: 80 },
|
|
67
|
+
{ match: '**/esbuild.config.*', category: '构建配置', icon: '⚡', priority: 80 },
|
|
68
|
+
{ match: '**/turbo.json', category: '构建配置', icon: '🚀', priority: 80 },
|
|
69
|
+
// 框架配置
|
|
70
|
+
{ match: '**/nuxt.config.*', category: '框架配置', icon: '💚', priority: 80 },
|
|
71
|
+
{ match: '**/next.config.*', category: '框架配置', icon: '⚫', priority: 80 },
|
|
72
|
+
{ match: '**/astro.config.*', category: '框架配置', icon: '🚀', priority: 80 },
|
|
73
|
+
{ match: '**/svelte.config.*', category: '框架配置', icon: '🔥', priority: 80 },
|
|
74
|
+
{ match: '**/angular.json', category: '框架配置', icon: '🅰️', priority: 80 },
|
|
75
|
+
// 代码质量
|
|
76
|
+
{ match: '**/.eslintrc*', category: '代码质量', icon: '🔍', priority: 75 },
|
|
77
|
+
{ match: '**/eslint.config.*', category: '代码质量', icon: '🔍', priority: 75 },
|
|
78
|
+
{ match: '**/.prettierrc*', category: '代码格式化', icon: '💄', priority: 75 },
|
|
79
|
+
{ match: '**/prettier.config.*', category: '代码格式化', icon: '💄', priority: 75 },
|
|
80
|
+
{ match: '**/.stylelintrc*', category: '样式检查', icon: '🎨', priority: 75 },
|
|
81
|
+
{ match: '**/biome.json', category: '代码质量', icon: '🌿', priority: 75 },
|
|
82
|
+
// 测试配置
|
|
83
|
+
{ match: '**/jest.config.*', category: '测试配置', icon: '🃏', priority: 75 },
|
|
84
|
+
{ match: '**/vitest.config.*', category: '测试配置', icon: '🧪', priority: 75 },
|
|
85
|
+
{ match: '**/cypress.config.*', category: '测试配置', icon: '🌀', priority: 75 },
|
|
86
|
+
{ match: '**/playwright.config.*', category: '测试配置', icon: '🎭', priority: 75 },
|
|
87
|
+
// 样式配置
|
|
88
|
+
{ match: '**/tailwind.config.*', category: '样式配置', icon: '🌊', priority: 75 },
|
|
89
|
+
{ match: '**/unocss.config.*', category: '样式配置', icon: '🎨', priority: 75 },
|
|
90
|
+
{ match: '**/postcss.config.*', category: '样式配置', icon: '📮', priority: 75 },
|
|
91
|
+
// 容器化
|
|
92
|
+
{ match: '**/Dockerfile*', category: '容器化', icon: '🐳', priority: 70 },
|
|
93
|
+
{ match: '**/.dockerignore', category: '容器化', icon: '🐳', priority: 70 },
|
|
94
|
+
{ match: '**/docker-compose*.y*ml', category: '容器化', icon: '🐳', priority: 70 },
|
|
95
|
+
{ match: '**/compose*.y*ml', category: '容器化', icon: '🐳', priority: 70 },
|
|
96
|
+
// CI/CD
|
|
97
|
+
{ match: '**/.github/workflows/*.y*ml', category: 'CI/CD', icon: '🔄', priority: 70 },
|
|
98
|
+
{ match: '**/.gitlab-ci.yml', category: 'CI/CD', icon: '🦊', priority: 70 },
|
|
99
|
+
{ match: '**/Jenkinsfile', category: 'CI/CD', icon: '🔧', priority: 70 },
|
|
100
|
+
// Xcode/iOS
|
|
101
|
+
{ match: '**/*.xcodeproj/**', category: 'Xcode 项目', icon: '🍎', priority: 65 },
|
|
102
|
+
{ match: '**/*.xcworkspace/**', category: 'Xcode 工作区', icon: '🍎', priority: 65 },
|
|
103
|
+
{ match: '**/*.xcassets/**', category: '资源文件', icon: '🎨', priority: 60 },
|
|
104
|
+
{ match: '**/Info.plist', category: 'iOS 配置', icon: '🍎', priority: 60 },
|
|
105
|
+
{ match: '**/*.storyboard', category: 'iOS UI', icon: '📱', priority: 55 },
|
|
106
|
+
{ match: '**/*.xib', category: 'iOS UI', icon: '📱', priority: 55 },
|
|
107
|
+
// 版本控制
|
|
108
|
+
{ match: '**/.gitignore', category: '版本控制', icon: '📋', priority: 65 },
|
|
109
|
+
{ match: '**/.gitattributes', category: '版本控制', icon: '📋', priority: 65 },
|
|
110
|
+
// 编辑器配置
|
|
111
|
+
{ match: '**/.editorconfig', category: '编辑器配置', icon: '✏️', priority: 65 },
|
|
112
|
+
{ match: '**/.vscode/**', category: 'VS Code', icon: '💙', priority: 65 },
|
|
113
|
+
// 环境配置
|
|
114
|
+
{ match: '**/.nvmrc', category: '环境配置', icon: '🔧', priority: 60 },
|
|
115
|
+
{ match: '**/.node-version', category: '环境配置', icon: '🔧', priority: 60 },
|
|
116
|
+
{ match: '**/.tool-versions', category: '环境配置', icon: '🔧', priority: 60 },
|
|
117
|
+
{ match: '**/.env*', category: '环境配置', icon: '🌍', priority: 60 },
|
|
118
|
+
// 部署配置
|
|
119
|
+
{ match: '**/vercel.json', category: '部署配置', icon: '▲', priority: 60 },
|
|
120
|
+
{ match: '**/netlify.toml', category: '部署配置', icon: '🌐', priority: 60 },
|
|
121
|
+
{ match: '**/fly.toml', category: '部署配置', icon: '🪁', priority: 60 },
|
|
122
|
+
// 文档
|
|
123
|
+
{ match: '**/README*', category: '文档', icon: '📖', priority: 50 },
|
|
124
|
+
{ match: '**/CHANGELOG*', category: '文档', icon: '📋', priority: 50 },
|
|
125
|
+
{ match: '**/LICENSE*', category: '许可证', icon: '📄', priority: 50 },
|
|
126
|
+
{ match: '**/CONTRIBUTING*', category: '文档', icon: '🤝', priority: 50 },
|
|
127
|
+
{ match: '**/*.md', category: '文档', icon: '📝', priority: 40 },
|
|
128
|
+
// 按扩展名分类 (低优先级)
|
|
129
|
+
{ match: '**/*.vue', category: 'Vue 组件', icon: '💚', priority: 30 },
|
|
130
|
+
{ match: '**/*.tsx', category: 'React 组件', icon: '⚛️', priority: 30 },
|
|
131
|
+
{ match: '**/*.jsx', category: 'React 组件', icon: '⚛️', priority: 30 },
|
|
132
|
+
{ match: '**/*.svelte', category: 'Svelte 组件', icon: '🔥', priority: 30 },
|
|
133
|
+
{ match: '**/*.ts', category: 'TypeScript', icon: '🔷', priority: 20 },
|
|
134
|
+
{ match: '**/*.js', category: 'JavaScript', icon: '🟨', priority: 20 },
|
|
135
|
+
{ match: '**/*.mjs', category: 'JavaScript', icon: '🟨', priority: 20 },
|
|
136
|
+
{ match: '**/*.cjs', category: 'JavaScript', icon: '🟨', priority: 20 },
|
|
137
|
+
{ match: '**/*.py', category: 'Python', icon: '🐍', priority: 20 },
|
|
138
|
+
{ match: '**/*.go', category: 'Go', icon: '🐹', priority: 20 },
|
|
139
|
+
{ match: '**/*.rs', category: 'Rust', icon: '🦀', priority: 20 },
|
|
140
|
+
{ match: '**/*.java', category: 'Java', icon: '☕', priority: 20 },
|
|
141
|
+
{ match: '**/*.rb', category: 'Ruby', icon: '💎', priority: 20 },
|
|
142
|
+
{ match: '**/*.php', category: 'PHP', icon: '🐘', priority: 20 },
|
|
143
|
+
{ match: '**/*.swift', category: 'Swift', icon: '🍎', priority: 20 },
|
|
144
|
+
{ match: '**/*.m', category: 'Objective-C', icon: '🍎', priority: 20 },
|
|
145
|
+
{ match: '**/*.mm', category: 'Objective-C++', icon: '🍎', priority: 20 },
|
|
146
|
+
{ match: '**/*.h', category: 'Header', icon: '📋', priority: 20 },
|
|
147
|
+
{ match: '**/*.css', category: '样式文件', icon: '🎨', priority: 20 },
|
|
148
|
+
{ match: '**/*.scss', category: '样式文件', icon: '🎨', priority: 20 },
|
|
149
|
+
{ match: '**/*.less', category: '样式文件', icon: '🎨', priority: 20 },
|
|
150
|
+
{ match: '**/*.html', category: 'HTML', icon: '🌐', priority: 20 },
|
|
151
|
+
{ match: '**/*.json', category: 'JSON', icon: '📊', priority: 10 },
|
|
152
|
+
{ match: '**/*.y*ml', category: 'YAML', icon: '📄', priority: 10 },
|
|
153
|
+
{ match: '**/*.toml', category: 'TOML', icon: '📄', priority: 10 },
|
|
154
|
+
{ match: '**/*.xml', category: 'XML', icon: '📄', priority: 10 },
|
|
155
|
+
{ match: '**/*.sh', category: 'Shell 脚本', icon: '🐚', priority: 10 },
|
|
156
|
+
{ match: '**/*.bat', category: 'Windows 脚本', icon: '🪟', priority: 10 },
|
|
157
|
+
{ match: '**/*.ps1', category: 'PowerShell', icon: '💙', priority: 10 },
|
|
158
|
+
];
|
|
159
|
+
/**
|
|
160
|
+
* 文件分类器
|
|
161
|
+
*/
|
|
162
|
+
class Categorizer {
|
|
163
|
+
constructor(customRules = []) {
|
|
164
|
+
// 合并规则并按优先级排序
|
|
165
|
+
this.rules = [...customRules, ...DEFAULT_RULES]
|
|
166
|
+
.sort((a, b) => (b.priority || 0) - (a.priority || 0));
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* 获取文件分类
|
|
170
|
+
*/
|
|
171
|
+
categorize(filePath) {
|
|
172
|
+
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
173
|
+
for (const rule of this.rules) {
|
|
174
|
+
if ((0, minimatch_1.minimatch)(normalizedPath, rule.match, { dot: true })) {
|
|
175
|
+
return { category: rule.category, icon: rule.icon };
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// 默认分类
|
|
179
|
+
return this.getDefaultCategory(filePath);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 获取默认分类
|
|
183
|
+
*/
|
|
184
|
+
getDefaultCategory(filePath) {
|
|
185
|
+
const fileName = path.basename(filePath);
|
|
186
|
+
// 隐藏文件
|
|
187
|
+
if (fileName.startsWith('.')) {
|
|
188
|
+
return { category: '配置文件', icon: '⚙️' };
|
|
189
|
+
}
|
|
190
|
+
return { category: '其他文件', icon: '📄' };
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* 添加自定义规则
|
|
194
|
+
*/
|
|
195
|
+
addRule(rule) {
|
|
196
|
+
this.rules.unshift(rule);
|
|
197
|
+
this.rules.sort((a, b) => (b.priority || 0) - (a.priority || 0));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.Categorizer = Categorizer;
|
|
201
|
+
//# sourceMappingURL=categorizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categorizer.js","sourceRoot":"","sources":["../../src/utils/categorizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git 操作工具
|
|
3
|
+
*/
|
|
4
|
+
export declare class Git {
|
|
5
|
+
private verbose;
|
|
6
|
+
constructor(verbose?: boolean);
|
|
7
|
+
/**
|
|
8
|
+
* 执行 Git 命令
|
|
9
|
+
*/
|
|
10
|
+
private exec;
|
|
11
|
+
/**
|
|
12
|
+
* 测试仓库连接
|
|
13
|
+
*/
|
|
14
|
+
testConnection(repo: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* 克隆仓库
|
|
17
|
+
*/
|
|
18
|
+
clone(repo: string, dest: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* 获取所有分支
|
|
21
|
+
*/
|
|
22
|
+
getBranches(cwd: string): string[];
|
|
23
|
+
/**
|
|
24
|
+
* 切换分支
|
|
25
|
+
*/
|
|
26
|
+
checkout(branch: string, cwd: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* 创建备份 (stash)
|
|
29
|
+
*/
|
|
30
|
+
backup(message?: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* 删除 .git 目录
|
|
33
|
+
*/
|
|
34
|
+
removeGitDir(dir: string): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,UAAQ;IAI3B;;OAEG;IACH,OAAO,CAAC,IAAI;IAeZ;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASrC;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKvC;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAclC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI3C;;OAEG;IACH,MAAM,CAAC,OAAO,SAAyB,GAAG,OAAO;IAWjD;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAIhC"}
|
package/lib/utils/git.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Git = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const platform_1 = require("./platform");
|
|
6
|
+
/**
|
|
7
|
+
* Git 操作工具
|
|
8
|
+
*/
|
|
9
|
+
class Git {
|
|
10
|
+
constructor(verbose = false) {
|
|
11
|
+
this.verbose = verbose;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 执行 Git 命令
|
|
15
|
+
*/
|
|
16
|
+
exec(cmd, cwd) {
|
|
17
|
+
try {
|
|
18
|
+
return (0, child_process_1.execSync)(cmd, {
|
|
19
|
+
cwd,
|
|
20
|
+
encoding: 'utf8',
|
|
21
|
+
stdio: this.verbose ? 'inherit' : 'pipe'
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (this.verbose && error instanceof Error) {
|
|
26
|
+
console.error(`Git 命令失败: ${error.message}`);
|
|
27
|
+
}
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 测试仓库连接
|
|
33
|
+
*/
|
|
34
|
+
testConnection(repo) {
|
|
35
|
+
try {
|
|
36
|
+
(0, child_process_1.execSync)(`git ls-remote --heads "${repo}"`, { stdio: 'ignore' });
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 克隆仓库
|
|
45
|
+
*/
|
|
46
|
+
clone(repo, dest) {
|
|
47
|
+
platform_1.platform.removeDir(dest);
|
|
48
|
+
this.exec(`git clone "${repo}" "${dest}"`);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 获取所有分支
|
|
52
|
+
*/
|
|
53
|
+
getBranches(cwd) {
|
|
54
|
+
try {
|
|
55
|
+
const output = (0, child_process_1.execSync)('git branch -r', { cwd, encoding: 'utf8' });
|
|
56
|
+
return output
|
|
57
|
+
.split('\n')
|
|
58
|
+
.map(line => line.trim())
|
|
59
|
+
.filter(line => line && !line.includes('HEAD'))
|
|
60
|
+
.map(line => line.replace('origin/', ''))
|
|
61
|
+
.filter(Boolean);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 切换分支
|
|
69
|
+
*/
|
|
70
|
+
checkout(branch, cwd) {
|
|
71
|
+
this.exec(`git checkout ${branch}`, cwd);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 创建备份 (stash)
|
|
75
|
+
*/
|
|
76
|
+
backup(message = 'Template sync backup') {
|
|
77
|
+
try {
|
|
78
|
+
(0, child_process_1.execSync)(`git add . && git stash push -m "${message}"`, {
|
|
79
|
+
stdio: this.verbose ? 'inherit' : 'ignore'
|
|
80
|
+
});
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 删除 .git 目录
|
|
89
|
+
*/
|
|
90
|
+
removeGitDir(dir) {
|
|
91
|
+
const gitDir = require('path').join(dir, '.git');
|
|
92
|
+
platform_1.platform.removeDir(gitDir);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.Git = Git;
|
|
96
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":";;;AAAA,iDAAyC;AACzC,yCAAsC;AAEtC;;GAEG;AACH,MAAa,GAAG;IAGd,YAAY,OAAO,GAAG,KAAK;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,IAAI,CAAC,GAAW,EAAE,GAAY;QACpC,IAAI,CAAC;YACH,OAAO,IAAA,wBAAQ,EAAC,GAAG,EAAE;gBACnB,GAAG;gBACH,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;aACzC,CAAW,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3C,OAAO,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY;QACzB,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,0BAA0B,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAY,EAAE,IAAY;QAC9B,mBAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAW;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,eAAe,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACpE,OAAO,MAAM;iBACV,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;iBAC9C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;iBACxC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAc,EAAE,GAAW;QAClC,IAAI,CAAC,IAAI,CAAC,gBAAgB,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,GAAG,sBAAsB;QACrC,IAAI,CAAC;YACH,IAAA,wBAAQ,EAAC,mCAAmC,OAAO,GAAG,EAAE;gBACtD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;aAC3C,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,GAAW;QACtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjD,mBAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF;AA1FD,kBA0FC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Scanner = exports.Git = exports.Merger = exports.Categorizer = exports.platform = void 0;
|
|
4
|
+
var platform_1 = require("./platform");
|
|
5
|
+
Object.defineProperty(exports, "platform", { enumerable: true, get: function () { return platform_1.platform; } });
|
|
6
|
+
var categorizer_1 = require("./categorizer");
|
|
7
|
+
Object.defineProperty(exports, "Categorizer", { enumerable: true, get: function () { return categorizer_1.Categorizer; } });
|
|
8
|
+
var merger_1 = require("./merger");
|
|
9
|
+
Object.defineProperty(exports, "Merger", { enumerable: true, get: function () { return merger_1.Merger; } });
|
|
10
|
+
var git_1 = require("./git");
|
|
11
|
+
Object.defineProperty(exports, "Git", { enumerable: true, get: function () { return git_1.Git; } });
|
|
12
|
+
var scanner_1 = require("./scanner");
|
|
13
|
+
Object.defineProperty(exports, "Scanner", { enumerable: true, get: function () { return scanner_1.Scanner; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AACZ,qCAAoC;AAA3B,kGAAA,OAAO,OAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { MergeStrategy } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* 文件合并器
|
|
4
|
+
*/
|
|
5
|
+
export declare class Merger {
|
|
6
|
+
private strategies;
|
|
7
|
+
constructor(customStrategies?: Record<string, MergeStrategy>);
|
|
8
|
+
/**
|
|
9
|
+
* 获取文件的合并策略
|
|
10
|
+
*/
|
|
11
|
+
getStrategy(filePath: string): MergeStrategy;
|
|
12
|
+
/**
|
|
13
|
+
* 合并文件
|
|
14
|
+
*/
|
|
15
|
+
merge(templatePath: string, currentPath: string, targetPath: string): {
|
|
16
|
+
success: boolean;
|
|
17
|
+
message: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* 智能合并
|
|
21
|
+
*/
|
|
22
|
+
private smartMerge;
|
|
23
|
+
/**
|
|
24
|
+
* 合并 package.json
|
|
25
|
+
*/
|
|
26
|
+
private mergePackageJson;
|
|
27
|
+
/**
|
|
28
|
+
* 合并普通 JSON 文件
|
|
29
|
+
*/
|
|
30
|
+
private mergeJson;
|
|
31
|
+
/**
|
|
32
|
+
* 深度合并对象
|
|
33
|
+
*/
|
|
34
|
+
private deepMerge;
|
|
35
|
+
/**
|
|
36
|
+
* 设置合并策略
|
|
37
|
+
*/
|
|
38
|
+
setStrategy(pattern: string, strategy: MergeStrategy): void;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=merger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merger.d.ts","sourceRoot":"","sources":["../../src/utils/merger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,UAAU,CAAgC;gBAEtC,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAM;IAUhE;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa;IAK5C;;OAEG;IACH,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAkB3G;;OAEG;IACH,OAAO,CAAC,UAAU;IA0BlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqFxB;;OAEG;IACH,OAAO,CAAC,SAAS;IAwBjB;;OAEG;IACH,OAAO,CAAC,SAAS;IA2BjB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;CAG5D"}
|