template-syncer 1.0.3 → 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/README.md +127 -57
- package/bin/syn.js +37 -83
- package/lib/index.d.ts +4 -116
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +14 -1045
- 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 -32
- 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
|
@@ -0,0 +1,221 @@
|
|
|
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.Scanner = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const glob_1 = require("glob");
|
|
40
|
+
const minimatch_1 = require("minimatch");
|
|
41
|
+
const platform_1 = require("./platform");
|
|
42
|
+
const categorizer_1 = require("./categorizer");
|
|
43
|
+
/**
|
|
44
|
+
* 默认忽略模式
|
|
45
|
+
*/
|
|
46
|
+
const DEFAULT_IGNORE = [
|
|
47
|
+
'node_modules/**',
|
|
48
|
+
'.git/**',
|
|
49
|
+
'dist/**',
|
|
50
|
+
'build/**',
|
|
51
|
+
'out/**',
|
|
52
|
+
'.output/**',
|
|
53
|
+
'coverage/**',
|
|
54
|
+
'.nyc_output/**',
|
|
55
|
+
'.cache/**',
|
|
56
|
+
'.nuxt/**',
|
|
57
|
+
'.next/**',
|
|
58
|
+
'.svelte-kit/**',
|
|
59
|
+
'.vercel/**',
|
|
60
|
+
'.netlify/**',
|
|
61
|
+
'logs/**',
|
|
62
|
+
'*.log',
|
|
63
|
+
'.DS_Store',
|
|
64
|
+
'Thumbs.db',
|
|
65
|
+
'*.tmp',
|
|
66
|
+
'*.temp',
|
|
67
|
+
'*.swp',
|
|
68
|
+
'*~'
|
|
69
|
+
];
|
|
70
|
+
/**
|
|
71
|
+
* 文件扫描器
|
|
72
|
+
*/
|
|
73
|
+
class Scanner {
|
|
74
|
+
constructor(customIgnore = [], customCategories = []) {
|
|
75
|
+
this.ignorePatterns = [...DEFAULT_IGNORE, ...customIgnore];
|
|
76
|
+
this.categorizer = new categorizer_1.Categorizer(customCategories);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 扫描目录
|
|
80
|
+
*/
|
|
81
|
+
async scan(dir) {
|
|
82
|
+
if (!fs.existsSync(dir)) {
|
|
83
|
+
throw new Error(`目录不存在: ${dir}`);
|
|
84
|
+
}
|
|
85
|
+
const files = await (0, glob_1.glob)('**/*', {
|
|
86
|
+
cwd: dir,
|
|
87
|
+
ignore: this.ignorePatterns,
|
|
88
|
+
dot: true,
|
|
89
|
+
nodir: true
|
|
90
|
+
});
|
|
91
|
+
const result = [];
|
|
92
|
+
for (const file of files) {
|
|
93
|
+
const fullPath = path.join(dir, file);
|
|
94
|
+
try {
|
|
95
|
+
const stat = fs.statSync(fullPath);
|
|
96
|
+
if (!stat.isFile())
|
|
97
|
+
continue;
|
|
98
|
+
const { category, icon } = this.categorizer.categorize(file);
|
|
99
|
+
result.push({
|
|
100
|
+
path: file,
|
|
101
|
+
fullPath,
|
|
102
|
+
size: stat.size,
|
|
103
|
+
isBinary: platform_1.platform.isBinary(fullPath),
|
|
104
|
+
category,
|
|
105
|
+
icon
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// 跳过无法访问的文件
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return result.sort((a, b) => a.path.localeCompare(b.path));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 比较两个目录的文件差异
|
|
116
|
+
* @param templateDir 模板目录
|
|
117
|
+
* @param currentDir 当前目录
|
|
118
|
+
* @param detectOrphans 是否检测本地独有文件
|
|
119
|
+
*/
|
|
120
|
+
async compare(templateDir, currentDir, detectOrphans = false) {
|
|
121
|
+
const templateFiles = await this.scan(templateDir);
|
|
122
|
+
const currentFiles = await this.scan(currentDir);
|
|
123
|
+
const currentMap = new Map(currentFiles.map(f => [f.path, f]));
|
|
124
|
+
const templateMap = new Map(templateFiles.map(f => [f.path, f]));
|
|
125
|
+
const changes = [];
|
|
126
|
+
// 检查模板文件
|
|
127
|
+
for (const templateFile of templateFiles) {
|
|
128
|
+
const currentFile = currentMap.get(templateFile.path);
|
|
129
|
+
const templatePath = templateFile.fullPath;
|
|
130
|
+
const currentPath = path.join(currentDir, templateFile.path);
|
|
131
|
+
if (!currentFile) {
|
|
132
|
+
// 新文件
|
|
133
|
+
changes.push({
|
|
134
|
+
...templateFile,
|
|
135
|
+
status: 'new',
|
|
136
|
+
templatePath,
|
|
137
|
+
currentPath,
|
|
138
|
+
selected: true
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// 检查是否有变更
|
|
143
|
+
if (this.hasChanged(templatePath, currentFile.fullPath)) {
|
|
144
|
+
changes.push({
|
|
145
|
+
...templateFile,
|
|
146
|
+
status: 'modified',
|
|
147
|
+
templatePath,
|
|
148
|
+
currentPath: currentFile.fullPath,
|
|
149
|
+
selected: true
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// 检测本地独有文件(可删除)
|
|
155
|
+
if (detectOrphans) {
|
|
156
|
+
for (const currentFile of currentFiles) {
|
|
157
|
+
if (!templateMap.has(currentFile.path)) {
|
|
158
|
+
changes.push({
|
|
159
|
+
...currentFile,
|
|
160
|
+
status: 'deleted',
|
|
161
|
+
templatePath: '',
|
|
162
|
+
currentPath: currentFile.fullPath,
|
|
163
|
+
selected: false // 默认不选中删除
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return changes;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 检查文件是否有变更
|
|
172
|
+
*/
|
|
173
|
+
hasChanged(file1, file2) {
|
|
174
|
+
try {
|
|
175
|
+
const stat1 = fs.statSync(file1);
|
|
176
|
+
const stat2 = fs.statSync(file2);
|
|
177
|
+
// 大小不同肯定有变更
|
|
178
|
+
if (stat1.size !== stat2.size) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
// 比较内容
|
|
182
|
+
const content1 = fs.readFileSync(file1);
|
|
183
|
+
const content2 = fs.readFileSync(file2);
|
|
184
|
+
return !content1.equals(content2);
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* 添加忽略模式
|
|
192
|
+
*/
|
|
193
|
+
addIgnore(pattern) {
|
|
194
|
+
this.ignorePatterns.push(pattern);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 添加分类规则
|
|
198
|
+
*/
|
|
199
|
+
addCategory(rule) {
|
|
200
|
+
this.categorizer.addRule(rule);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* 过滤要删除的文件
|
|
204
|
+
* @param orphans 本地独有文件列表
|
|
205
|
+
* @param deletePatterns 要删除的模式
|
|
206
|
+
* @param protectPatterns 要保护的模式
|
|
207
|
+
*/
|
|
208
|
+
filterOrphans(orphans, deletePatterns = ['**/*'], protectPatterns = []) {
|
|
209
|
+
return orphans.filter(file => {
|
|
210
|
+
// 检查是否匹配保护模式
|
|
211
|
+
const isProtected = protectPatterns.some(pattern => (0, minimatch_1.minimatch)(file.path, pattern, { dot: true }));
|
|
212
|
+
if (isProtected)
|
|
213
|
+
return false;
|
|
214
|
+
// 检查是否匹配删除模式
|
|
215
|
+
const shouldDelete = deletePatterns.some(pattern => (0, minimatch_1.minimatch)(file.path, pattern, { dot: true }));
|
|
216
|
+
return shouldDelete;
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
exports.Scanner = Scanner;
|
|
221
|
+
//# sourceMappingURL=scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/utils/scanner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "template-syncer",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "智能模板同步工具 - 让你的项目与模板仓库保持同步,支持智能合并、差异对比和交互式更新",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -9,13 +9,16 @@
|
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc && node scripts/post-build.js",
|
|
12
|
-
"
|
|
13
|
-
"test": "node test/
|
|
12
|
+
"test": "node test/run-tests.js",
|
|
13
|
+
"test:setup": "node test/setup.js",
|
|
14
|
+
"test:cleanup": "node test/setup.js cleanup",
|
|
15
|
+
"test:reset": "node test/setup.js reset",
|
|
16
|
+
"test:manual": "node test/manual-test.js",
|
|
14
17
|
"start": "node bin/syn.js",
|
|
15
|
-
"dev": "
|
|
18
|
+
"dev": "pnpm build && node bin/syn.js --verbose",
|
|
16
19
|
"dev:watch": "tsc --watch",
|
|
17
|
-
"publish:npm": "
|
|
18
|
-
"prepublishOnly": "
|
|
20
|
+
"publish:npm": "pnpm build && npm publish --registry https://registry.npmjs.org",
|
|
21
|
+
"prepublishOnly": "pnpm build"
|
|
19
22
|
},
|
|
20
23
|
"keywords": [
|
|
21
24
|
"template",
|
|
@@ -46,13 +49,13 @@
|
|
|
46
49
|
"dependencies": {
|
|
47
50
|
"chalk": "^4.1.2",
|
|
48
51
|
"commander": "^14.0.0",
|
|
49
|
-
"glob": "^11.0.
|
|
50
|
-
"inquirer": "^12.
|
|
52
|
+
"glob": "^11.0.0",
|
|
53
|
+
"inquirer": "^12.0.0",
|
|
54
|
+
"minimatch": "^10.0.0"
|
|
51
55
|
},
|
|
52
56
|
"devDependencies": {
|
|
53
|
-
"@types/
|
|
54
|
-
"@types/
|
|
55
|
-
"
|
|
56
|
-
"typescript": "^5.8.3"
|
|
57
|
+
"@types/inquirer": "^9.0.0",
|
|
58
|
+
"@types/node": "^22.0.0",
|
|
59
|
+
"typescript": "^5.7.0"
|
|
57
60
|
}
|
|
58
61
|
}
|