|
52 | 52 | let selectedPackages = $state(new Map<string, string>()); |
53 | 53 | let packageDescs = $state(new Map<string, string>()); |
54 | 54 |
|
| 55 | + function pkgKey(name: string, type: string): string { |
| 56 | + return `${type}:${name}`; |
| 57 | + } |
| 58 | +
|
55 | 59 | interface MacOSPref { |
56 | 60 | domain: string; |
57 | 61 | key: string; |
|
63 | 67 | let expandedPrefCats = $state<Set<string>>(new Set()); |
64 | 68 |
|
65 | 69 | const packages = $derived( |
66 | | - Array.from(selectedPackages.entries()).map(([name, type]) => ({ |
67 | | - name, |
68 | | - type, |
69 | | - desc: packageDescs.get(name) || '', |
70 | | - })) |
| 70 | + Array.from(selectedPackages.entries()).map(([key, type]) => { |
| 71 | + const name = key.slice(type.length + 1); |
| 72 | + return { name, type, desc: packageDescs.get(key) || '' }; |
| 73 | + }) |
71 | 74 | ); |
72 | 75 |
|
73 | 76 | const sections = [ |
|
139 | 142 | const p = PRESET_PACKAGES[preset]; |
140 | 143 | if (!p) return; |
141 | 144 | const newMap = new Map<string, string>(); |
142 | | - for (const pkg of p.cli) newMap.set(pkg, 'formula'); |
143 | | - for (const pkg of p.cask) newMap.set(pkg, 'cask'); |
144 | | - if (p.npm) for (const pkg of p.npm) newMap.set(pkg, 'npm'); |
| 145 | + for (const pkg of p.cli) newMap.set(pkgKey(pkg, 'formula'), 'formula'); |
| 146 | + for (const pkg of p.cask) newMap.set(pkgKey(pkg, 'cask'), 'cask'); |
| 147 | + if (p.npm) for (const pkg of p.npm) newMap.set(pkgKey(pkg, 'npm'), 'npm'); |
145 | 148 | selectedPackages = newMap; |
146 | 149 | } |
147 | 150 |
|
|
151 | 154 | } |
152 | 155 |
|
153 | 156 | function togglePackage(name: string, type: string, desc: string = '') { |
| 157 | + const key = pkgKey(name, type); |
154 | 158 | const newMap = new Map(selectedPackages); |
155 | 159 | const newDescs = new Map(packageDescs); |
156 | | - if (newMap.has(name)) { |
157 | | - newMap.delete(name); |
158 | | - newDescs.delete(name); |
| 160 | + if (newMap.has(key)) { |
| 161 | + newMap.delete(key); |
| 162 | + newDescs.delete(key); |
159 | 163 | } else { |
160 | | - newMap.set(name, type); |
161 | | - if (desc) newDescs.set(name, desc); |
| 164 | + newMap.set(key, type); |
| 165 | + if (desc) newDescs.set(key, desc); |
162 | 166 | } |
163 | 167 | selectedPackages = newMap; |
164 | 168 | packageDescs = newDescs; |
|
200 | 204 | const descs = new Map<string, string>(); |
201 | 205 | for (const pkg of data.packages) { |
202 | 206 | if (typeof pkg === 'string') { |
203 | | - map.set(pkg, 'formula'); |
| 207 | + map.set(pkgKey(pkg, 'formula'), 'formula'); |
204 | 208 | } else { |
205 | | - map.set(pkg.name, pkg.type || 'formula'); |
206 | | - if (pkg.desc) descs.set(pkg.name, pkg.desc); |
| 209 | + const t = pkg.type || 'formula'; |
| 210 | + const k = pkgKey(pkg.name, t); |
| 211 | + map.set(k, t); |
| 212 | + if (pkg.desc) descs.set(k, pkg.desc); |
207 | 213 | } |
208 | 214 | } |
209 | 215 | selectedPackages = map; |
|
265 | 271 | const newDescs = new Map<string, string>(); |
266 | 272 | for (const pkg of savedPkgs) { |
267 | 273 | if (typeof pkg === 'string') { |
268 | | - newMap.set(pkg, 'formula'); |
| 274 | + newMap.set(pkgKey(pkg, 'formula'), 'formula'); |
269 | 275 | } else { |
270 | | - newMap.set(pkg.name, pkg.type || 'formula'); |
271 | | - if (pkg.desc) newDescs.set(pkg.name, pkg.desc); |
| 276 | + const t = pkg.type || 'formula'; |
| 277 | + const k = pkgKey(pkg.name, t); |
| 278 | + newMap.set(k, t); |
| 279 | + if (pkg.desc) newDescs.set(k, pkg.desc); |
272 | 280 | } |
273 | 281 | } |
274 | 282 | selectedPackages = newMap; |
|
293 | 301 | return { |
294 | 302 | ...formData, |
295 | 303 | alias: formData.alias.trim() || null, |
296 | | - packages: Array.from(selectedPackages.entries()).map(([name, type]) => ({ |
297 | | - name, |
298 | | - type, |
299 | | - desc: packageDescs.get(name) || '', |
300 | | - })), |
| 304 | + packages: Array.from(selectedPackages.entries()).map(([key, type]) => { |
| 305 | + const name = key.slice(type.length + 1); |
| 306 | + return { name, type, desc: packageDescs.get(key) || '' }; |
| 307 | + }), |
301 | 308 | snapshot: updatedSnapshot, |
302 | 309 | }; |
303 | 310 | } |
|
316 | 323 | const newDescs = new Map<string, string>(); |
317 | 324 | for (const pkg of parsed.packages || []) { |
318 | 325 | if (typeof pkg === 'string') { |
319 | | - newMap.set(pkg, 'formula'); |
| 326 | + newMap.set(pkgKey(pkg, 'formula'), 'formula'); |
320 | 327 | } else { |
321 | | - newMap.set(pkg.name, pkg.type || 'formula'); |
322 | | - if (pkg.desc) newDescs.set(pkg.name, pkg.desc); |
| 328 | + const t = pkg.type || 'formula'; |
| 329 | + const k = pkgKey(pkg.name, t); |
| 330 | + newMap.set(k, t); |
| 331 | + if (pkg.desc) newDescs.set(k, pkg.desc); |
323 | 332 | } |
324 | 333 | } |
325 | 334 | selectedPackages = newMap; |
|
0 commit comments