tanmi-dock 0.7.2 → 0.7.3-beta.1

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.
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Podfile 操作工具
3
+ * 用于自动修改 CocoaPods Podfile 以添加本地 pod 依赖
4
+ */
5
+ import fs from 'fs/promises';
6
+ import path from 'path';
7
+ import { withFileLock } from './lock.js';
8
+ import * as logger from './logger.js';
9
+ // tanmi-dock 标记块
10
+ const MARKER_START = '# === tanmi-dock pods start ===';
11
+ const MARKER_END = '# === tanmi-dock pods end ===';
12
+ const MARKER_COMMENT = '# Auto-generated by tanmi-dock. Do not edit manually.';
13
+ /**
14
+ * 查找项目中的 Podfile
15
+ * @param projectPath 项目路径
16
+ * @param maxDepth 最大搜索深度
17
+ * @returns Podfile 路径列表,按深度排序(浅层在前)
18
+ */
19
+ export async function findPodfiles(projectPath, maxDepth = 3) {
20
+ const podfiles = [];
21
+ async function search(dir, depth) {
22
+ if (depth > maxDepth)
23
+ return;
24
+ try {
25
+ const entries = await fs.readdir(dir, { withFileTypes: true });
26
+ for (const entry of entries) {
27
+ if (entry.isFile() && entry.name === 'Podfile') {
28
+ podfiles.push({ path: path.join(dir, entry.name), depth });
29
+ continue;
30
+ }
31
+ if (!entry.isDirectory())
32
+ continue;
33
+ // 跳过不需要搜索的目录
34
+ if (entry.name.startsWith('.') ||
35
+ entry.name === 'node_modules' ||
36
+ entry.name === 'build' ||
37
+ entry.name === 'dist' ||
38
+ entry.name === 'Pods' ||
39
+ entry.name.endsWith('.xcodeproj') ||
40
+ entry.name.endsWith('.xcworkspace')) {
41
+ continue;
42
+ }
43
+ await search(path.join(dir, entry.name), depth + 1);
44
+ }
45
+ }
46
+ catch {
47
+ // 忽略无法访问的目录
48
+ }
49
+ }
50
+ await search(projectPath, 0);
51
+ // 按深度排序,浅层优先
52
+ return podfiles.sort((a, b) => a.depth - b.depth).map((p) => p.path);
53
+ }
54
+ /**
55
+ * 解析 Podfile 中已存在的 tanmi-dock pods
56
+ * @param content Podfile 内容
57
+ * @returns 已存在的 pod 名称到路径的映射
58
+ */
59
+ export function parseTanmiDockPods(content) {
60
+ const pods = new Map();
61
+ // 查找 tanmi-dock 块
62
+ const startIdx = content.indexOf(MARKER_START);
63
+ const endIdx = content.indexOf(MARKER_END);
64
+ if (startIdx === -1 || endIdx === -1 || startIdx >= endIdx) {
65
+ return pods;
66
+ }
67
+ const block = content.slice(startIdx, endIdx);
68
+ // 解析 pod 声明: pod 'name', :path => 'path'
69
+ const podRegex = /pod\s+['"]([^'"]+)['"]\s*,\s*:path\s*=>\s*['"]([^'"]+)['"]/g;
70
+ let match;
71
+ while ((match = podRegex.exec(block)) !== null) {
72
+ pods.set(match[1], match[2]);
73
+ }
74
+ return pods;
75
+ }
76
+ /**
77
+ * 生成 tanmi-dock pods 块
78
+ * @param pods Pod 配置列表
79
+ * @returns 生成的块内容
80
+ */
81
+ function generatePodBlock(pods) {
82
+ if (pods.length === 0) {
83
+ return '';
84
+ }
85
+ const lines = [MARKER_START, MARKER_COMMENT, ''];
86
+ for (const pod of pods) {
87
+ lines.push(` pod '${pod.libName}', :path => '${pod.podPath}'`);
88
+ }
89
+ lines.push('', MARKER_END);
90
+ return lines.join('\n');
91
+ }
92
+ /**
93
+ * 查找第一个 target 块的位置
94
+ * @param content Podfile 内容
95
+ * @returns 第一个 target 块的起始位置,未找到返回 -1
96
+ */
97
+ function findFirstTargetPosition(content) {
98
+ // 匹配 target 'xxx' do 或 target "xxx" do,允许前面有空格
99
+ const targetRegex = /^[ \t]*target\s+['"][^'"]+['"]\s+do\b/m;
100
+ const match = targetRegex.exec(content);
101
+ return match ? match.index : -1;
102
+ }
103
+ /**
104
+ * 创建 Podfile 备份
105
+ * @param podfilePath Podfile 路径
106
+ * @returns 备份文件路径
107
+ */
108
+ async function createBackup(podfilePath) {
109
+ const backupPath = `${podfilePath}.tanmi-backup`;
110
+ await fs.copyFile(podfilePath, backupPath);
111
+ return backupPath;
112
+ }
113
+ /**
114
+ * 修改 Podfile 添加/更新 pods
115
+ * @param podfilePath Podfile 路径
116
+ * @param pods 要添加的 Pod 配置列表
117
+ * @returns 修改结果
118
+ */
119
+ export async function modifyPodfile(podfilePath, pods) {
120
+ // 使用自定义锁文件,避免和 CocoaPods 的 Podfile.lock 冲突
121
+ return withFileLock(podfilePath, async () => {
122
+ const content = await fs.readFile(podfilePath, 'utf-8');
123
+ const result = {
124
+ podfilePath,
125
+ added: [],
126
+ updated: [],
127
+ skipped: [],
128
+ backupPath: null,
129
+ };
130
+ if (pods.length === 0) {
131
+ return result;
132
+ }
133
+ // 解析已存在的 pods
134
+ const existingPods = parseTanmiDockPods(content);
135
+ // 分类:添加、更新、跳过
136
+ const podsToWrite = [];
137
+ for (const pod of pods) {
138
+ const existingPath = existingPods.get(pod.libName);
139
+ if (existingPath === undefined) {
140
+ // 新添加
141
+ result.added.push(pod.libName);
142
+ podsToWrite.push(pod);
143
+ }
144
+ else if (existingPath !== pod.podPath) {
145
+ // 路径不同,需要更新
146
+ result.updated.push(pod.libName);
147
+ podsToWrite.push(pod);
148
+ }
149
+ else {
150
+ // 完全相同,跳过
151
+ result.skipped.push(pod.libName);
152
+ podsToWrite.push(pod); // 仍然需要保留在块中
153
+ }
154
+ }
155
+ // 保留已存在但不在本次 pods 列表中的条目
156
+ for (const [libName, podPath] of existingPods) {
157
+ if (!pods.find((p) => p.libName === libName)) {
158
+ podsToWrite.push({ libName, podPath });
159
+ }
160
+ }
161
+ // 生成新块
162
+ const newBlock = generatePodBlock(podsToWrite);
163
+ // 创建备份
164
+ result.backupPath = await createBackup(podfilePath);
165
+ // 修改内容
166
+ let newContent;
167
+ const startIdx = content.indexOf(MARKER_START);
168
+ const endIdx = content.indexOf(MARKER_END);
169
+ if (startIdx !== -1 && endIdx !== -1 && startIdx < endIdx) {
170
+ // 已有 tanmi-dock 块,替换
171
+ newContent = content.slice(0, startIdx) + newBlock + content.slice(endIdx + MARKER_END.length);
172
+ }
173
+ else {
174
+ // 没有 tanmi-dock 块,需要插入
175
+ // 在第一个 target 块之前插入
176
+ const targetPos = findFirstTargetPosition(content);
177
+ if (targetPos > 0) {
178
+ // 在第一个 target 之前插入
179
+ newContent = content.slice(0, targetPos) + newBlock + '\n\n' + content.slice(targetPos);
180
+ }
181
+ else if (targetPos === 0) {
182
+ // target 在文件开头
183
+ newContent = newBlock + '\n\n' + content;
184
+ }
185
+ else {
186
+ // 没有 target 块,在文件末尾添加
187
+ newContent = content.trimEnd() + '\n\n' + newBlock + '\n';
188
+ }
189
+ }
190
+ // 写入文件
191
+ await fs.writeFile(podfilePath, newContent, 'utf-8');
192
+ logger.debug(`Podfile 已修改: ${podfilePath}`);
193
+ return result;
194
+ }, { lockfilePath: podfilePath + '.tanmi-lock' });
195
+ }
196
+ /**
197
+ * 从 Podfile 中移除 tanmi-dock 块
198
+ * @param podfilePath Podfile 路径
199
+ * @returns 是否成功移除
200
+ */
201
+ export async function removeTanmiDockBlock(podfilePath) {
202
+ // 使用自定义锁文件,避免和 CocoaPods 的 Podfile.lock 冲突
203
+ return withFileLock(podfilePath, async () => {
204
+ const content = await fs.readFile(podfilePath, 'utf-8');
205
+ const startIdx = content.indexOf(MARKER_START);
206
+ const endIdx = content.indexOf(MARKER_END);
207
+ if (startIdx === -1 || endIdx === -1 || startIdx >= endIdx) {
208
+ return false;
209
+ }
210
+ // 创建备份
211
+ await createBackup(podfilePath);
212
+ // 移除块(包括前后可能的空行)
213
+ let removeStart = startIdx;
214
+ let removeEnd = endIdx + MARKER_END.length;
215
+ // 移除块前的空行
216
+ while (removeStart > 0 && content[removeStart - 1] === '\n') {
217
+ removeStart--;
218
+ }
219
+ // 移除块后的空行
220
+ while (removeEnd < content.length && content[removeEnd] === '\n') {
221
+ removeEnd++;
222
+ }
223
+ const newContent = content.slice(0, removeStart) + '\n' + content.slice(removeEnd);
224
+ await fs.writeFile(podfilePath, newContent, 'utf-8');
225
+ logger.debug(`已从 Podfile 移除 tanmi-dock 块: ${podfilePath}`);
226
+ return true;
227
+ }, { lockfilePath: podfilePath + '.tanmi-lock' });
228
+ }
229
+ /**
230
+ * 恢复 Podfile 备份
231
+ * @param podfilePath Podfile 路径
232
+ * @returns 是否成功恢复
233
+ */
234
+ export async function restoreBackup(podfilePath) {
235
+ const backupPath = `${podfilePath}.tanmi-backup`;
236
+ try {
237
+ await fs.access(backupPath);
238
+ await fs.copyFile(backupPath, podfilePath);
239
+ await fs.unlink(backupPath);
240
+ logger.debug(`已恢复 Podfile 备份: ${podfilePath}`);
241
+ return true;
242
+ }
243
+ catch {
244
+ return false;
245
+ }
246
+ }
247
+ export default {
248
+ findPodfiles,
249
+ parseTanmiDockPods,
250
+ modifyPodfile,
251
+ removeTanmiDockBlock,
252
+ restoreBackup,
253
+ };
254
+ //# sourceMappingURL=podfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"podfile.js","sourceRoot":"","sources":["../../src/utils/podfile.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tanmi-dock",
3
- "version": "0.7.2",
3
+ "version": "0.7.3-beta.1",
4
4
  "description": "集中型第三方库链接管理工具",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",