tanmi-dock 0.4.0-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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +302 -0
  3. package/dist/commands/clean.d.ts +10 -0
  4. package/dist/commands/clean.d.ts.map +1 -0
  5. package/dist/commands/clean.js +215 -0
  6. package/dist/commands/clean.js.map +1 -0
  7. package/dist/commands/config.d.ts +10 -0
  8. package/dist/commands/config.d.ts.map +1 -0
  9. package/dist/commands/config.js +105 -0
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/doctor.d.ts +7 -0
  12. package/dist/commands/doctor.d.ts.map +1 -0
  13. package/dist/commands/doctor.js +127 -0
  14. package/dist/commands/doctor.js.map +1 -0
  15. package/dist/commands/init.d.ts +7 -0
  16. package/dist/commands/init.d.ts.map +1 -0
  17. package/dist/commands/init.js +153 -0
  18. package/dist/commands/init.js.map +1 -0
  19. package/dist/commands/link.d.ts +7 -0
  20. package/dist/commands/link.d.ts.map +1 -0
  21. package/dist/commands/link.js +522 -0
  22. package/dist/commands/link.js.map +1 -0
  23. package/dist/commands/migrate.d.ts +7 -0
  24. package/dist/commands/migrate.d.ts.map +1 -0
  25. package/dist/commands/migrate.js +137 -0
  26. package/dist/commands/migrate.js.map +1 -0
  27. package/dist/commands/projects.d.ts +7 -0
  28. package/dist/commands/projects.d.ts.map +1 -0
  29. package/dist/commands/projects.js +126 -0
  30. package/dist/commands/projects.js.map +1 -0
  31. package/dist/commands/repair.d.ts +7 -0
  32. package/dist/commands/repair.d.ts.map +1 -0
  33. package/dist/commands/repair.js +256 -0
  34. package/dist/commands/repair.js.map +1 -0
  35. package/dist/commands/status.d.ts +7 -0
  36. package/dist/commands/status.d.ts.map +1 -0
  37. package/dist/commands/status.js +172 -0
  38. package/dist/commands/status.js.map +1 -0
  39. package/dist/commands/unlink.d.ts +7 -0
  40. package/dist/commands/unlink.d.ts.map +1 -0
  41. package/dist/commands/unlink.js +104 -0
  42. package/dist/commands/unlink.js.map +1 -0
  43. package/dist/commands/verify.d.ts +7 -0
  44. package/dist/commands/verify.d.ts.map +1 -0
  45. package/dist/commands/verify.js +190 -0
  46. package/dist/commands/verify.js.map +1 -0
  47. package/dist/core/codepac.d.ts +79 -0
  48. package/dist/core/codepac.d.ts.map +1 -0
  49. package/dist/core/codepac.js +188 -0
  50. package/dist/core/codepac.js.map +1 -0
  51. package/dist/core/config.d.ts +70 -0
  52. package/dist/core/config.d.ts.map +1 -0
  53. package/dist/core/config.js +210 -0
  54. package/dist/core/config.js.map +1 -0
  55. package/dist/core/guard.d.ts +18 -0
  56. package/dist/core/guard.d.ts.map +1 -0
  57. package/dist/core/guard.js +82 -0
  58. package/dist/core/guard.js.map +1 -0
  59. package/dist/core/linker.d.ts +76 -0
  60. package/dist/core/linker.d.ts.map +1 -0
  61. package/dist/core/linker.js +263 -0
  62. package/dist/core/linker.js.map +1 -0
  63. package/dist/core/parser.d.ts +43 -0
  64. package/dist/core/parser.d.ts.map +1 -0
  65. package/dist/core/parser.js +133 -0
  66. package/dist/core/parser.js.map +1 -0
  67. package/dist/core/platform.d.ts +100 -0
  68. package/dist/core/platform.d.ts.map +1 -0
  69. package/dist/core/platform.js +193 -0
  70. package/dist/core/platform.js.map +1 -0
  71. package/dist/core/registry.d.ts +181 -0
  72. package/dist/core/registry.d.ts.map +1 -0
  73. package/dist/core/registry.js +443 -0
  74. package/dist/core/registry.js.map +1 -0
  75. package/dist/core/store.d.ts +77 -0
  76. package/dist/core/store.d.ts.map +1 -0
  77. package/dist/core/store.js +226 -0
  78. package/dist/core/store.js.map +1 -0
  79. package/dist/core/transaction.d.ts +106 -0
  80. package/dist/core/transaction.d.ts.map +1 -0
  81. package/dist/core/transaction.js +295 -0
  82. package/dist/core/transaction.js.map +1 -0
  83. package/dist/index.d.ts +3 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +84 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/types/index.d.ts +174 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +47 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/utils/disk.d.ts +57 -0
  92. package/dist/utils/disk.d.ts.map +1 -0
  93. package/dist/utils/disk.js +313 -0
  94. package/dist/utils/disk.js.map +1 -0
  95. package/dist/utils/exit-codes.d.ts +42 -0
  96. package/dist/utils/exit-codes.d.ts.map +1 -0
  97. package/dist/utils/exit-codes.js +91 -0
  98. package/dist/utils/exit-codes.js.map +1 -0
  99. package/dist/utils/fs-utils.d.ts +44 -0
  100. package/dist/utils/fs-utils.d.ts.map +1 -0
  101. package/dist/utils/fs-utils.js +107 -0
  102. package/dist/utils/fs-utils.js.map +1 -0
  103. package/dist/utils/global-lock.d.ts +28 -0
  104. package/dist/utils/global-lock.d.ts.map +1 -0
  105. package/dist/utils/global-lock.js +89 -0
  106. package/dist/utils/global-lock.js.map +1 -0
  107. package/dist/utils/lock.d.ts +26 -0
  108. package/dist/utils/lock.d.ts.map +1 -0
  109. package/dist/utils/lock.js +68 -0
  110. package/dist/utils/lock.js.map +1 -0
  111. package/dist/utils/logger.d.ts +98 -0
  112. package/dist/utils/logger.d.ts.map +1 -0
  113. package/dist/utils/logger.js +190 -0
  114. package/dist/utils/logger.js.map +1 -0
  115. package/dist/utils/prompt.d.ts +32 -0
  116. package/dist/utils/prompt.d.ts.map +1 -0
  117. package/dist/utils/prompt.js +131 -0
  118. package/dist/utils/prompt.js.map +1 -0
  119. package/package.json +73 -0
@@ -0,0 +1,443 @@
1
+ /**
2
+ * 注册表管理
3
+ * 注册表文件位置: ~/.tanmi-dock/registry.json
4
+ */
5
+ import fs from 'fs/promises';
6
+ import crypto from 'crypto';
7
+ import { getRegistryPath } from './platform.js';
8
+ import { ensureConfigDir } from './config.js';
9
+ import { withFileLock } from '../utils/lock.js';
10
+ import { EMPTY_REGISTRY } from '../types/index.js';
11
+ /**
12
+ * 注册表管理器
13
+ */
14
+ class RegistryManager {
15
+ static instance;
16
+ registry = { ...EMPTY_REGISTRY };
17
+ loaded = false;
18
+ constructor() { }
19
+ static getInstance() {
20
+ if (!RegistryManager.instance) {
21
+ RegistryManager.instance = new RegistryManager();
22
+ }
23
+ return RegistryManager.instance;
24
+ }
25
+ /**
26
+ * 加载注册表(支持懒加载,多次调用只加载一次)
27
+ */
28
+ async load() {
29
+ // 避免重复加载
30
+ if (this.loaded)
31
+ return;
32
+ try {
33
+ const registryPath = getRegistryPath();
34
+ const content = await fs.readFile(registryPath, 'utf-8');
35
+ this.registry = JSON.parse(content);
36
+ }
37
+ catch {
38
+ this.registry = { ...EMPTY_REGISTRY };
39
+ }
40
+ this.loaded = true;
41
+ }
42
+ /**
43
+ * 强制重新加载(用于需要刷新数据的场景)
44
+ */
45
+ async reload() {
46
+ this.loaded = false;
47
+ await this.load();
48
+ }
49
+ /**
50
+ * 检查注册表文件是否存在(轻量级,不加载完整数据)
51
+ */
52
+ async exists() {
53
+ try {
54
+ await fs.access(getRegistryPath());
55
+ return true;
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }
61
+ /**
62
+ * 获取统计信息(轻量级,只读取必要数据)
63
+ */
64
+ async getStats() {
65
+ // 如果已加载,直接计算
66
+ if (this.loaded) {
67
+ const totalSize = Object.values(this.registry.libraries).reduce((sum, lib) => sum + lib.size, 0);
68
+ return {
69
+ projectCount: Object.keys(this.registry.projects).length,
70
+ libraryCount: Object.keys(this.registry.libraries).length,
71
+ totalSize,
72
+ };
73
+ }
74
+ // 未加载时,读取并解析
75
+ try {
76
+ const content = await fs.readFile(getRegistryPath(), 'utf-8');
77
+ const data = JSON.parse(content);
78
+ const totalSize = Object.values(data.libraries).reduce((sum, lib) => sum + lib.size, 0);
79
+ return {
80
+ projectCount: Object.keys(data.projects).length,
81
+ libraryCount: Object.keys(data.libraries).length,
82
+ totalSize,
83
+ };
84
+ }
85
+ catch {
86
+ return { projectCount: 0, libraryCount: 0, totalSize: 0 };
87
+ }
88
+ }
89
+ /**
90
+ * 检查是否已加载
91
+ */
92
+ isLoaded() {
93
+ return this.loaded;
94
+ }
95
+ /**
96
+ * 保存注册表(带文件锁保护)
97
+ */
98
+ async save() {
99
+ await ensureConfigDir();
100
+ const registryPath = getRegistryPath();
101
+ await withFileLock(registryPath, async () => {
102
+ await fs.writeFile(registryPath, JSON.stringify(this.registry, null, 2), 'utf-8');
103
+ });
104
+ }
105
+ /**
106
+ * 确保已加载
107
+ */
108
+ ensureLoaded() {
109
+ if (!this.loaded) {
110
+ throw new Error('Registry not loaded. Call load() first.');
111
+ }
112
+ }
113
+ // ========== 项目管理 ==========
114
+ /**
115
+ * 获取项目信息
116
+ */
117
+ getProject(pathHash) {
118
+ this.ensureLoaded();
119
+ return this.registry.projects[pathHash];
120
+ }
121
+ /**
122
+ * 通过路径获取项目
123
+ */
124
+ getProjectByPath(path) {
125
+ const hash = this.hashPath(path);
126
+ return this.getProject(hash);
127
+ }
128
+ /**
129
+ * 添加项目
130
+ */
131
+ addProject(info) {
132
+ this.ensureLoaded();
133
+ const hash = this.hashPath(info.path);
134
+ this.registry.projects[hash] = info;
135
+ }
136
+ /**
137
+ * 更新项目
138
+ */
139
+ updateProject(pathHash, updates) {
140
+ this.ensureLoaded();
141
+ const project = this.registry.projects[pathHash];
142
+ if (project) {
143
+ this.registry.projects[pathHash] = { ...project, ...updates };
144
+ }
145
+ }
146
+ /**
147
+ * 移除项目
148
+ */
149
+ removeProject(pathHash) {
150
+ this.ensureLoaded();
151
+ const project = this.registry.projects[pathHash];
152
+ if (project) {
153
+ // 移除库的引用
154
+ for (const dep of project.dependencies) {
155
+ const libKey = this.getLibraryKey(dep.libName, dep.commit);
156
+ this.removeReference(libKey, pathHash);
157
+ }
158
+ delete this.registry.projects[pathHash];
159
+ }
160
+ }
161
+ /**
162
+ * 列出所有项目
163
+ */
164
+ listProjects() {
165
+ this.ensureLoaded();
166
+ return Object.values(this.registry.projects);
167
+ }
168
+ // ========== 库管理 ==========
169
+ /**
170
+ * 获取库 key
171
+ */
172
+ getLibraryKey(libName, commit) {
173
+ return `${libName}:${commit}`;
174
+ }
175
+ /**
176
+ * 获取库信息
177
+ */
178
+ getLibrary(key) {
179
+ this.ensureLoaded();
180
+ return this.registry.libraries[key];
181
+ }
182
+ /**
183
+ * 添加库
184
+ */
185
+ addLibrary(info) {
186
+ this.ensureLoaded();
187
+ const key = this.getLibraryKey(info.libName, info.commit);
188
+ this.registry.libraries[key] = info;
189
+ }
190
+ /**
191
+ * 更新库
192
+ */
193
+ updateLibrary(key, updates) {
194
+ this.ensureLoaded();
195
+ const lib = this.registry.libraries[key];
196
+ if (lib) {
197
+ this.registry.libraries[key] = { ...lib, ...updates };
198
+ }
199
+ }
200
+ /**
201
+ * 移除库
202
+ */
203
+ removeLibrary(key) {
204
+ this.ensureLoaded();
205
+ delete this.registry.libraries[key];
206
+ }
207
+ /**
208
+ * 列出所有库
209
+ */
210
+ listLibraries() {
211
+ this.ensureLoaded();
212
+ return Object.values(this.registry.libraries);
213
+ }
214
+ /**
215
+ * 获取无引用的库
216
+ */
217
+ getUnreferencedLibraries() {
218
+ this.ensureLoaded();
219
+ return this.listLibraries().filter((lib) => lib.referencedBy.length === 0);
220
+ }
221
+ // ========== Store 管理 (新版,按平台) ==========
222
+ /**
223
+ * 获取 Store key (lib:commit:platform)
224
+ */
225
+ getStoreKey(libName, commit, platform) {
226
+ return `${libName}:${commit}:${platform}`;
227
+ }
228
+ /**
229
+ * 获取 Store 条目
230
+ */
231
+ getStore(key) {
232
+ this.ensureLoaded();
233
+ return this.registry.stores[key];
234
+ }
235
+ /**
236
+ * 添加 Store 条目
237
+ */
238
+ addStore(entry) {
239
+ this.ensureLoaded();
240
+ const key = this.getStoreKey(entry.libName, entry.commit, entry.platform);
241
+ this.registry.stores[key] = entry;
242
+ }
243
+ /**
244
+ * 更新 Store 条目
245
+ */
246
+ updateStore(key, updates) {
247
+ this.ensureLoaded();
248
+ const entry = this.registry.stores[key];
249
+ if (entry) {
250
+ this.registry.stores[key] = { ...entry, ...updates };
251
+ }
252
+ }
253
+ /**
254
+ * 移除 Store 条目
255
+ */
256
+ removeStore(key) {
257
+ this.ensureLoaded();
258
+ delete this.registry.stores[key];
259
+ }
260
+ /**
261
+ * 列出所有 Store 条目
262
+ */
263
+ listStores() {
264
+ this.ensureLoaded();
265
+ return Object.values(this.registry.stores);
266
+ }
267
+ /**
268
+ * 获取无引用的 Store 条目
269
+ */
270
+ getUnreferencedStores() {
271
+ this.ensureLoaded();
272
+ return this.listStores().filter((entry) => entry.usedBy.length === 0);
273
+ }
274
+ /**
275
+ * 获取可清理的 unused 库(无引用超过指定天数)
276
+ * @param unusedDays 无引用天数阈值
277
+ */
278
+ getUnusedStores(unusedDays) {
279
+ this.ensureLoaded();
280
+ const threshold = Date.now() - unusedDays * 24 * 60 * 60 * 1000;
281
+ return this.listStores().filter((entry) => entry.usedBy.length === 0 &&
282
+ entry.unlinkedAt !== undefined &&
283
+ entry.unlinkedAt < threshold);
284
+ }
285
+ /**
286
+ * 获取无引用但未过期的库(供 status 显示)
287
+ * @param unusedDays 无引用天数阈值
288
+ */
289
+ getPendingUnusedStores(unusedDays) {
290
+ this.ensureLoaded();
291
+ const threshold = Date.now() - unusedDays * 24 * 60 * 60 * 1000;
292
+ return this.listStores()
293
+ .filter((e) => e.usedBy.length === 0 &&
294
+ e.unlinkedAt !== undefined &&
295
+ e.unlinkedAt >= threshold)
296
+ .map((entry) => ({
297
+ entry,
298
+ daysLeft: Math.ceil((entry.unlinkedAt + unusedDays * 86400000 - Date.now()) / 86400000),
299
+ }));
300
+ }
301
+ /**
302
+ * 添加 Store 引用(清除 unlinkedAt)
303
+ */
304
+ addStoreReference(storeKey, projectHash) {
305
+ this.ensureLoaded();
306
+ const entry = this.registry.stores[storeKey];
307
+ if (entry) {
308
+ if (!entry.usedBy.includes(projectHash)) {
309
+ entry.usedBy.push(projectHash);
310
+ }
311
+ // 重新被引用,清除 unlinkedAt
312
+ delete entry.unlinkedAt;
313
+ }
314
+ }
315
+ /**
316
+ * 移除 Store 引用(设置 unlinkedAt)
317
+ */
318
+ removeStoreReference(storeKey, projectHash) {
319
+ this.ensureLoaded();
320
+ const entry = this.registry.stores[storeKey];
321
+ if (entry) {
322
+ entry.usedBy = entry.usedBy.filter((h) => h !== projectHash);
323
+ // 如果变成无引用,记录时间
324
+ if (entry.usedBy.length === 0 && !entry.unlinkedAt) {
325
+ entry.unlinkedAt = Date.now();
326
+ }
327
+ }
328
+ }
329
+ /**
330
+ * 获取项目的 Store keys
331
+ */
332
+ getProjectStoreKeys(projectHash) {
333
+ this.ensureLoaded();
334
+ const project = this.registry.projects[projectHash];
335
+ if (!project)
336
+ return [];
337
+ return project.dependencies.map((d) => this.getStoreKey(d.libName, d.commit, d.platform));
338
+ }
339
+ // ========== 引用关系管理 ==========
340
+ /**
341
+ * 添加引用
342
+ */
343
+ addReference(libKey, projectHash) {
344
+ this.ensureLoaded();
345
+ const lib = this.registry.libraries[libKey];
346
+ if (lib && !lib.referencedBy.includes(projectHash)) {
347
+ lib.referencedBy.push(projectHash);
348
+ }
349
+ }
350
+ /**
351
+ * 移除引用
352
+ */
353
+ removeReference(libKey, projectHash) {
354
+ this.ensureLoaded();
355
+ const lib = this.registry.libraries[libKey];
356
+ if (lib) {
357
+ lib.referencedBy = lib.referencedBy.filter((h) => h !== projectHash);
358
+ }
359
+ }
360
+ /**
361
+ * 获取库的引用列表
362
+ */
363
+ getLibraryReferences(libKey) {
364
+ this.ensureLoaded();
365
+ return this.registry.libraries[libKey]?.referencedBy ?? [];
366
+ }
367
+ // ========== 工具方法 ==========
368
+ /**
369
+ * 计算路径 hash
370
+ */
371
+ hashPath(path) {
372
+ return crypto.createHash('md5').update(path).digest('hex').slice(0, 12);
373
+ }
374
+ /**
375
+ * 获取原始注册表对象
376
+ */
377
+ getRaw() {
378
+ this.ensureLoaded();
379
+ return this.registry;
380
+ }
381
+ /**
382
+ * 清理过期项目(路径不存在的项目)
383
+ */
384
+ async cleanStaleProjects() {
385
+ this.ensureLoaded();
386
+ const staleHashes = [];
387
+ for (const [hash, project] of Object.entries(this.registry.projects)) {
388
+ try {
389
+ await fs.access(project.path);
390
+ }
391
+ catch {
392
+ staleHashes.push(hash);
393
+ }
394
+ }
395
+ for (const hash of staleHashes) {
396
+ this.removeProject(hash);
397
+ }
398
+ return staleHashes;
399
+ }
400
+ /**
401
+ * 清理失效的 Store 引用
402
+ * 检查所有 StoreEntry.usedBy 中的项目是否还存在
403
+ * @returns 被清理的引用数量
404
+ */
405
+ async cleanStaleReferences() {
406
+ this.ensureLoaded();
407
+ let cleaned = 0;
408
+ for (const entry of Object.values(this.registry.stores)) {
409
+ const validRefs = [];
410
+ for (const projectHash of entry.usedBy) {
411
+ const project = this.registry.projects[projectHash];
412
+ if (project) {
413
+ // 检查项目路径是否存在
414
+ try {
415
+ await fs.access(project.path);
416
+ validRefs.push(projectHash);
417
+ }
418
+ catch {
419
+ cleaned++;
420
+ }
421
+ }
422
+ else {
423
+ cleaned++;
424
+ }
425
+ }
426
+ // 更新引用列表
427
+ if (validRefs.length !== entry.usedBy.length) {
428
+ entry.usedBy = validRefs;
429
+ // 如果变成无引用,设置 unlinkedAt
430
+ if (validRefs.length === 0 && !entry.unlinkedAt) {
431
+ entry.unlinkedAt = Date.now();
432
+ }
433
+ }
434
+ }
435
+ return cleaned;
436
+ }
437
+ }
438
+ // 导出单例获取函数
439
+ export function getRegistry() {
440
+ return RegistryManager.getInstance();
441
+ }
442
+ export default RegistryManager;
443
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * 获取库在 Store 中的路径
3
+ */
4
+ export declare function getLibraryPath(storePath: string, libName: string, commit: string, platform: string): string;
5
+ /**
6
+ * 获取当前配置的 Store 路径
7
+ */
8
+ export declare function getStorePath(): Promise<string>;
9
+ /**
10
+ * 检查库是否存在于 Store 中
11
+ */
12
+ export declare function exists(libName: string, commit: string, platform: string): Promise<boolean>;
13
+ /**
14
+ * 获取库的完整路径
15
+ */
16
+ export declare function getPath(libName: string, commit: string, platform: string): Promise<string | null>;
17
+ /**
18
+ * 将本地库目录移入 Store (absorb)
19
+ * 使用原子重命名 + 错误处理,避免 TOCTOU 竞态条件
20
+ * @param sourcePath 源目录路径
21
+ * @param libName 库名
22
+ * @param commit commit hash
23
+ * @param platform 平台名
24
+ * @returns Store 中的库路径
25
+ */
26
+ export declare function absorb(sourcePath: string, libName: string, commit: string, platform: string): Promise<string>;
27
+ /**
28
+ * 复制库到 Store(不删除源目录)
29
+ * 使用文件锁保护检查-创建操作,避免 TOCTOU 竞态条件
30
+ */
31
+ export declare function copy(sourcePath: string, libName: string, commit: string, platform: string): Promise<string>;
32
+ /**
33
+ * 从 Store 中删除库
34
+ */
35
+ export declare function remove(libName: string, commit: string, platform: string): Promise<void>;
36
+ /**
37
+ * 获取库占用空间 (bytes)
38
+ */
39
+ export declare function getSize(libName: string, commit: string, platform: string): Promise<number>;
40
+ /**
41
+ * 获取 Store 总大小
42
+ */
43
+ export declare function getTotalSize(): Promise<number>;
44
+ /**
45
+ * 列出 Store 中所有库
46
+ */
47
+ export declare function listLibraries(): Promise<Array<{
48
+ libName: string;
49
+ commit: string;
50
+ platform: string;
51
+ path: string;
52
+ }>>;
53
+ /**
54
+ * 验证平台目录是否有有效内容
55
+ * @returns true 有内容,false 为空或只有隐藏文件
56
+ */
57
+ export declare function validatePlatform(libName: string, commit: string, platform: string): Promise<boolean>;
58
+ /**
59
+ * 确保 Store 目录存在
60
+ */
61
+ export declare function ensureStoreDir(): Promise<void>;
62
+ declare const _default: {
63
+ getLibraryPath: typeof getLibraryPath;
64
+ getStorePath: typeof getStorePath;
65
+ exists: typeof exists;
66
+ getPath: typeof getPath;
67
+ absorb: typeof absorb;
68
+ copy: typeof copy;
69
+ remove: typeof remove;
70
+ getSize: typeof getSize;
71
+ getTotalSize: typeof getTotalSize;
72
+ listLibraries: typeof listLibraries;
73
+ validatePlatform: typeof validatePlatform;
74
+ ensureStoreDir: typeof ensureStoreDir;
75
+ };
76
+ export default _default;
77
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/core/store.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3G;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAMpD;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAShG;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASvG;AAED;;;;;;;;GAQG;AACH,wBAAsB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBnH;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0BjH;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB7F;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKhG;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAGpD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAC5C,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAC3E,CAoCA;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpD;;;;;;;;;;;;;;;AAED,wBAaE"}