react-native-sherpa-onnx 0.3.6 → 0.3.7
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 +1 -0
- package/README.md +89 -21
- package/SherpaOnnx.podspec +3 -0
- package/THIRD_PARTY_LICENSES/README.md +62 -0
- package/THIRD_PARTY_LICENSES/ffmpeg.txt +502 -0
- package/THIRD_PARTY_LICENSES/libarchive.txt +65 -0
- package/THIRD_PARTY_LICENSES/nvidia_omla.txt +181 -0
- package/THIRD_PARTY_LICENSES/onnxruntime.txt +21 -0
- package/THIRD_PARTY_LICENSES/opus.txt +44 -0
- package/THIRD_PARTY_LICENSES/sherpa-onnx.txt +201 -0
- package/THIRD_PARTY_LICENSES/shine.txt +482 -0
- package/THIRD_PARTY_LICENSES/zstd.txt +30 -0
- package/android/build.gradle +7 -3
- package/android/prebuilt-download.gradle +344 -152
- package/android/prebuilt-versions.gradle +1 -1
- package/android/src/main/assets/model_licenses/asr-models-license-status.csv +409 -0
- package/android/src/main/assets/model_licenses/qnn-asr-models-license-status.csv +695 -0
- package/android/src/main/assets/model_licenses/tts-models-license-status.csv +596 -0
- package/android/src/main/cpp/CMakeLists.txt +28 -10
- package/android/src/main/cpp/jni/archive/sherpa-onnx-archive-helper.cpp +2 -2
- package/android/src/main/cpp/jni/audio/sherpa-onnx-audio-convert-jni.cpp +268 -2
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-tts.cpp +6 -2
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-validate-tts.cpp +4 -2
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxArchiveHelper.kt +40 -10
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxModule.kt +99 -0
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxOnlineSttHelper.kt +4 -1
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxTtsHelper.kt +112 -97
- package/ios/Resources/model_licenses/asr-models-license-status.csv +409 -0
- package/ios/Resources/model_licenses/qnn-asr-models-license-status.csv +695 -0
- package/ios/Resources/model_licenses/tts-models-license-status.csv +596 -0
- package/ios/SherpaOnnx+OnlineSTT.mm +2 -0
- package/ios/SherpaOnnx+PcmLiveStream.mm +2 -29
- package/ios/SherpaOnnx+TTS.mm +178 -20
- package/ios/SherpaOnnx.mm +54 -0
- package/ios/SherpaOnnxAudioConvert.h +10 -0
- package/ios/SherpaOnnxAudioConvert.mm +257 -1
- package/ios/archive/sherpa-onnx-archive-helper.h +3 -0
- package/ios/archive/sherpa-onnx-archive-helper.mm +39 -6
- package/ios/model_detect/sherpa-onnx-model-detect-tts.mm +13 -2
- package/ios/model_detect/sherpa-onnx-validate-tts.mm +4 -2
- package/ios/online_stt/sherpa-onnx-online-stt-wrapper.h +1 -0
- package/ios/online_stt/sherpa-onnx-online-stt-wrapper.mm +4 -0
- package/ios/tts/sherpa-onnx-tts-wrapper.h +37 -0
- package/ios/tts/sherpa-onnx-tts-wrapper.mm +149 -3
- package/lib/module/NativeSherpaOnnx.js.map +1 -1
- package/lib/module/audio/index.js +8 -0
- package/lib/module/audio/index.js.map +1 -1
- package/lib/module/download/ModelDownloadManager.js +10 -929
- package/lib/module/download/ModelDownloadManager.js.map +1 -1
- package/lib/module/download/activeModelOperations.js +26 -0
- package/lib/module/download/activeModelOperations.js.map +1 -0
- package/lib/module/download/background-downloader.d.js +2 -0
- package/lib/module/download/background-downloader.d.js.map +1 -0
- package/lib/module/download/bulkPurge.js +72 -0
- package/lib/module/download/bulkPurge.js.map +1 -0
- package/lib/module/download/checksumPrompt.js +19 -0
- package/lib/module/download/checksumPrompt.js.map +1 -0
- package/lib/module/download/constants.js +7 -0
- package/lib/module/download/constants.js.map +1 -0
- package/lib/module/download/downloadEvents.js +35 -0
- package/lib/module/download/downloadEvents.js.map +1 -0
- package/lib/module/download/downloadTask.js +385 -0
- package/lib/module/download/downloadTask.js.map +1 -0
- package/lib/module/download/ensureModel.js +89 -0
- package/lib/module/download/ensureModel.js.map +1 -0
- package/lib/module/download/index.js +4 -4
- package/lib/module/download/index.js.map +1 -1
- package/lib/module/download/localModels.js +151 -0
- package/lib/module/download/localModels.js.map +1 -0
- package/lib/module/download/modelExtraction.js +174 -0
- package/lib/module/download/modelExtraction.js.map +1 -0
- package/lib/module/download/paths.js +98 -0
- package/lib/module/download/paths.js.map +1 -0
- package/lib/module/download/postDownloadProcessing.js +206 -0
- package/lib/module/download/postDownloadProcessing.js.map +1 -0
- package/lib/module/download/protectedModelKeys.js +31 -0
- package/lib/module/download/protectedModelKeys.js.map +1 -0
- package/lib/module/download/registry.js +267 -0
- package/lib/module/download/registry.js.map +1 -0
- package/lib/module/download/retry.js +59 -0
- package/lib/module/download/retry.js.map +1 -0
- package/lib/module/download/types.js +17 -0
- package/lib/module/download/types.js.map +1 -0
- package/lib/module/download/validation.js +101 -5
- package/lib/module/download/validation.js.map +1 -1
- package/lib/module/{download → extraction}/extractTarBz2.js +3 -1
- package/lib/module/extraction/extractTarBz2.js.map +1 -0
- package/lib/module/{download → extraction}/extractTarZst.js +3 -1
- package/lib/module/extraction/extractTarZst.js.map +1 -0
- package/lib/module/extraction/index.js +3 -4
- package/lib/module/extraction/index.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/licenses.js +63 -0
- package/lib/module/licenses.js.map +1 -0
- package/lib/module/stt/index.js +16 -2
- package/lib/module/stt/index.js.map +1 -1
- package/lib/module/stt/streaming.js +2 -0
- package/lib/module/stt/streaming.js.map +1 -1
- package/lib/module/stt/streamingTypes.js.map +1 -1
- package/lib/module/stt/types.js.map +1 -1
- package/lib/module/tts/index.js +20 -2
- package/lib/module/tts/index.js.map +1 -1
- package/lib/module/tts/streaming.js +4 -0
- package/lib/module/tts/streaming.js.map +1 -1
- package/lib/module/tts/types.js.map +1 -1
- package/lib/module/utils.js +16 -1
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/src/NativeSherpaOnnx.d.ts +33 -5
- package/lib/typescript/src/NativeSherpaOnnx.d.ts.map +1 -1
- package/lib/typescript/src/audio/index.d.ts +10 -0
- package/lib/typescript/src/audio/index.d.ts.map +1 -1
- package/lib/typescript/src/download/ModelDownloadManager.d.ts +10 -108
- package/lib/typescript/src/download/ModelDownloadManager.d.ts.map +1 -1
- package/lib/typescript/src/download/activeModelOperations.d.ts +6 -0
- package/lib/typescript/src/download/activeModelOperations.d.ts.map +1 -0
- package/lib/typescript/src/download/bulkPurge.d.ts +14 -0
- package/lib/typescript/src/download/bulkPurge.d.ts.map +1 -0
- package/lib/typescript/src/download/checksumPrompt.d.ts +3 -0
- package/lib/typescript/src/download/checksumPrompt.d.ts.map +1 -0
- package/lib/typescript/src/download/constants.d.ts +5 -0
- package/lib/typescript/src/download/constants.d.ts.map +1 -0
- package/lib/typescript/src/download/downloadEvents.d.ts +6 -0
- package/lib/typescript/src/download/downloadEvents.d.ts.map +1 -0
- package/lib/typescript/src/download/downloadTask.d.ts +20 -0
- package/lib/typescript/src/download/downloadTask.d.ts.map +1 -0
- package/lib/typescript/src/download/ensureModel.d.ts +26 -0
- package/lib/typescript/src/download/ensureModel.d.ts.map +1 -0
- package/lib/typescript/src/download/index.d.ts +7 -7
- package/lib/typescript/src/download/index.d.ts.map +1 -1
- package/lib/typescript/src/download/localModels.d.ts +15 -0
- package/lib/typescript/src/download/localModels.d.ts.map +1 -0
- package/lib/typescript/src/download/modelExtraction.d.ts +36 -0
- package/lib/typescript/src/download/modelExtraction.d.ts.map +1 -0
- package/lib/typescript/src/download/paths.d.ts +28 -0
- package/lib/typescript/src/download/paths.d.ts.map +1 -0
- package/lib/typescript/src/download/postDownloadProcessing.d.ts +19 -0
- package/lib/typescript/src/download/postDownloadProcessing.d.ts.map +1 -0
- package/lib/typescript/src/download/protectedModelKeys.d.ts +6 -0
- package/lib/typescript/src/download/protectedModelKeys.d.ts.map +1 -0
- package/lib/typescript/src/download/registry.d.ts +14 -0
- package/lib/typescript/src/download/registry.d.ts.map +1 -0
- package/lib/typescript/src/download/retry.d.ts +15 -0
- package/lib/typescript/src/download/retry.d.ts.map +1 -0
- package/lib/typescript/src/download/types.d.ts +96 -0
- package/lib/typescript/src/download/types.d.ts.map +1 -0
- package/lib/typescript/src/download/validation.d.ts +19 -0
- package/lib/typescript/src/download/validation.d.ts.map +1 -1
- package/lib/typescript/src/extraction/extractTarBz2.d.ts.map +1 -0
- package/lib/typescript/src/extraction/extractTarZst.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/licenses.d.ts +10 -0
- package/lib/typescript/src/licenses.d.ts.map +1 -0
- package/lib/typescript/src/stt/index.d.ts +4 -1
- package/lib/typescript/src/stt/index.d.ts.map +1 -1
- package/lib/typescript/src/stt/streaming.d.ts.map +1 -1
- package/lib/typescript/src/stt/streamingTypes.d.ts +5 -0
- package/lib/typescript/src/stt/streamingTypes.d.ts.map +1 -1
- package/lib/typescript/src/stt/types.d.ts +3 -1
- package/lib/typescript/src/stt/types.d.ts.map +1 -1
- package/lib/typescript/src/tts/index.d.ts +3 -1
- package/lib/typescript/src/tts/index.d.ts.map +1 -1
- package/lib/typescript/src/tts/streaming.d.ts.map +1 -1
- package/lib/typescript/src/tts/types.d.ts +6 -5
- package/lib/typescript/src/tts/types.d.ts.map +1 -1
- package/lib/typescript/src/utils.d.ts +5 -0
- package/lib/typescript/src/utils.d.ts.map +1 -1
- package/package.json +6 -1
- package/scripts/{check-model-csvs.sh → ci/check-model-csvs.sh} +9 -2
- package/scripts/ci/collect_all_sherpa_model_streams.sh +101 -0
- package/scripts/ci/collect_one_sherpa_release_stream.sh +189 -0
- package/scripts/ci/sherpa_asr_model_release_streams.json +21 -0
- package/scripts/ci/sherpa_tts_model_release_streams.json +13 -0
- package/scripts/ci/update_model_license_csv.sh +765 -0
- package/scripts/setup-ios-framework.sh +14 -11
- package/scripts/update_commercial_use.js +73 -0
- package/src/NativeSherpaOnnx.ts +36 -5
- package/src/audio/index.ts +20 -0
- package/src/download/ModelDownloadManager.ts +55 -1343
- package/src/download/activeModelOperations.ts +38 -0
- package/src/download/background-downloader.d.ts +43 -0
- package/src/download/bulkPurge.ts +102 -0
- package/src/download/checksumPrompt.ts +25 -0
- package/src/download/constants.ts +5 -0
- package/src/download/downloadEvents.ts +55 -0
- package/src/download/downloadTask.ts +497 -0
- package/src/download/ensureModel.ts +124 -0
- package/src/download/index.ts +19 -4
- package/src/download/localModels.ts +234 -0
- package/src/download/modelExtraction.ts +244 -0
- package/src/download/paths.ts +134 -0
- package/src/download/postDownloadProcessing.ts +292 -0
- package/src/download/protectedModelKeys.ts +30 -0
- package/src/download/registry.ts +404 -0
- package/src/download/retry.ts +76 -0
- package/src/download/types.ts +120 -0
- package/src/download/validation.ts +114 -8
- package/src/{download → extraction}/extractTarBz2.ts +3 -1
- package/src/{download → extraction}/extractTarZst.ts +3 -1
- package/src/extraction/index.ts +3 -7
- package/src/index.tsx +1 -0
- package/src/licenses.ts +100 -0
- package/src/stt/index.ts +20 -2
- package/src/stt/streaming.ts +3 -0
- package/src/stt/streamingTypes.ts +5 -0
- package/src/stt/types.ts +3 -1
- package/src/tts/index.ts +30 -2
- package/src/tts/streaming.ts +10 -0
- package/src/tts/types.ts +6 -5
- package/src/utils.ts +22 -1
- package/third_party/sherpa-onnx-prebuilt/ANDROID_RELEASE_TAG +1 -1
- package/third_party/sherpa-onnx-prebuilt/IOS_RELEASE_TAG +1 -1
- package/android/src/main/cpp/jni/tts/sherpa-onnx-tts-zipvoice-jni.cpp +0 -301
- package/android/src/main/java/com/sherpaonnx/ZipvoiceTtsWrapper.kt +0 -187
- package/lib/module/download/extractTarBz2.js.map +0 -1
- package/lib/module/download/extractTarZst.js.map +0 -1
- package/lib/typescript/src/download/extractTarBz2.d.ts.map +0 -1
- package/lib/typescript/src/download/extractTarZst.d.ts.map +0 -1
- package/scripts/check-qnn-support.sh +0 -78
- /package/lib/typescript/src/{download → extraction}/extractTarBz2.d.ts +0 -0
- /package/lib/typescript/src/{download → extraction}/extractTarZst.d.ts +0 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { createDownloadTask, completeHandler, getExistingDownloadTasks } from '@kesha-antonov/react-native-background-downloader';
|
|
4
|
+
import { exists, readFile, mkdir, writeFile, stat, unlink } from '@dr.pogodin/react-native-fs';
|
|
5
|
+
import { checkDiskSpace, removeDirectoryRecursive } from "./validation.js";
|
|
6
|
+
import { getModelsBaseDir, getModelDir, getArchivePath, getReadyMarkerPath, getDownloadStatePath, getNativeAssetExtractedModelDir, getTarArchivePath, getOnnxPath } from "./paths.js";
|
|
7
|
+
import { emitDownloadProgress } from "./downloadEvents.js";
|
|
8
|
+
import { runPostDownloadProcessing } from "./postDownloadProcessing.js";
|
|
9
|
+
import { getModelByIdByCategory } from "./registry.js";
|
|
10
|
+
import { listDownloadedModelsByCategory } from "./localModels.js";
|
|
11
|
+
function makeDownloadTaskId(category, id) {
|
|
12
|
+
return `${category}:${id}`;
|
|
13
|
+
}
|
|
14
|
+
const activeDownloadTasks = new Map();
|
|
15
|
+
export async function downloadModelByCategory(category, id, opts) {
|
|
16
|
+
const isAborted = () => Boolean(opts?.signal?.aborted);
|
|
17
|
+
if (opts?.signal?.aborted) {
|
|
18
|
+
const abortError = new Error('Download aborted');
|
|
19
|
+
abortError.name = 'AbortError';
|
|
20
|
+
throw abortError;
|
|
21
|
+
}
|
|
22
|
+
const model = await getModelByIdByCategory(category, id);
|
|
23
|
+
if (!model) {
|
|
24
|
+
throw new Error(`Unknown model id: ${id}`);
|
|
25
|
+
}
|
|
26
|
+
const baseDir = getModelsBaseDir(category);
|
|
27
|
+
await mkdir(baseDir);
|
|
28
|
+
const downloadPath = getArchivePath(category, id, model.archiveExt);
|
|
29
|
+
const isArchive = model.archiveExt === 'tar.bz2';
|
|
30
|
+
const modelDir = getModelDir(category, id);
|
|
31
|
+
const sleep = ms => new Promise(resolve => {
|
|
32
|
+
setTimeout(resolve, ms);
|
|
33
|
+
});
|
|
34
|
+
const cleanupPartial = async () => {
|
|
35
|
+
if (!isArchive) return;
|
|
36
|
+
if (await exists(modelDir)) {
|
|
37
|
+
await unlink(modelDir);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const cleanupPartialWithRetry = async () => {
|
|
41
|
+
for (let attempt = 0; attempt < 4; attempt += 1) {
|
|
42
|
+
await cleanupPartial();
|
|
43
|
+
if (!(await exists(modelDir))) return;
|
|
44
|
+
await sleep(400);
|
|
45
|
+
}
|
|
46
|
+
if (await exists(modelDir)) {
|
|
47
|
+
console.warn(`Model cleanup after abort did not fully complete for ${category}:${id}`);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const diskSpaceCheck = await checkDiskSpace(model.bytes);
|
|
51
|
+
if (!diskSpaceCheck.success) {
|
|
52
|
+
throw new Error(`Insufficient disk space: ${diskSpaceCheck.message}`);
|
|
53
|
+
}
|
|
54
|
+
const statePath = getDownloadStatePath(category, id);
|
|
55
|
+
if (opts?.overwrite) {
|
|
56
|
+
if (await exists(modelDir)) await unlink(modelDir);
|
|
57
|
+
if (await exists(downloadPath)) await unlink(downloadPath);
|
|
58
|
+
if (await exists(statePath)) await unlink(statePath);
|
|
59
|
+
} else {
|
|
60
|
+
const readyMarkerExists = await exists(getReadyMarkerPath(category, id));
|
|
61
|
+
if (!readyMarkerExists && isArchive) {
|
|
62
|
+
if (await exists(modelDir)) await unlink(modelDir);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const downloadState = {
|
|
67
|
+
modelId: id,
|
|
68
|
+
category,
|
|
69
|
+
phase: 'downloading',
|
|
70
|
+
startedAt: new Date().toISOString(),
|
|
71
|
+
archivePath: downloadPath,
|
|
72
|
+
model,
|
|
73
|
+
totalBytes: model.bytes
|
|
74
|
+
};
|
|
75
|
+
await mkdir(getModelsBaseDir(category));
|
|
76
|
+
await writeFile(statePath, JSON.stringify(downloadState), 'utf8');
|
|
77
|
+
if (!isArchive) {
|
|
78
|
+
await mkdir(modelDir);
|
|
79
|
+
}
|
|
80
|
+
const taskId = makeDownloadTaskId(category, id);
|
|
81
|
+
return new Promise((resolve, reject) => {
|
|
82
|
+
let abortHandler;
|
|
83
|
+
const cleanup = () => {
|
|
84
|
+
if (abortHandler && opts?.signal) {
|
|
85
|
+
opts.signal.removeEventListener('abort', abortHandler);
|
|
86
|
+
abortHandler = undefined;
|
|
87
|
+
}
|
|
88
|
+
activeDownloadTasks.delete(taskId);
|
|
89
|
+
};
|
|
90
|
+
const task = createDownloadTask({
|
|
91
|
+
id: taskId,
|
|
92
|
+
url: model.downloadUrl,
|
|
93
|
+
destination: downloadPath,
|
|
94
|
+
metadata: {}
|
|
95
|
+
}).progress(({
|
|
96
|
+
bytesDownloaded,
|
|
97
|
+
bytesTotal
|
|
98
|
+
}) => {
|
|
99
|
+
if (isAborted()) return;
|
|
100
|
+
const total = bytesTotal ?? model.bytes ?? 0;
|
|
101
|
+
const percent = total > 0 ? bytesDownloaded / total * 100 : 0;
|
|
102
|
+
const progress = {
|
|
103
|
+
bytesDownloaded,
|
|
104
|
+
totalBytes: total,
|
|
105
|
+
percent,
|
|
106
|
+
phase: 'downloading'
|
|
107
|
+
};
|
|
108
|
+
opts?.onProgress?.(progress);
|
|
109
|
+
emitDownloadProgress(category, id, progress);
|
|
110
|
+
}).done(async () => {
|
|
111
|
+
cleanup();
|
|
112
|
+
try {
|
|
113
|
+
const result = await runPostDownloadProcessing({
|
|
114
|
+
category,
|
|
115
|
+
id,
|
|
116
|
+
model,
|
|
117
|
+
downloadPath,
|
|
118
|
+
modelDir,
|
|
119
|
+
isArchive,
|
|
120
|
+
statePath,
|
|
121
|
+
signal: opts?.signal,
|
|
122
|
+
onChecksumIssue: opts?.onChecksumIssue,
|
|
123
|
+
deleteArchiveAfterExtract: opts?.deleteArchiveAfterExtract,
|
|
124
|
+
onProgress: opts?.onProgress,
|
|
125
|
+
getDownloadedList: () => listDownloadedModelsByCategory(category)
|
|
126
|
+
});
|
|
127
|
+
completeHandler(taskId);
|
|
128
|
+
resolve(result);
|
|
129
|
+
} catch (e) {
|
|
130
|
+
completeHandler(taskId);
|
|
131
|
+
reject(e);
|
|
132
|
+
}
|
|
133
|
+
}).error(({
|
|
134
|
+
error,
|
|
135
|
+
errorCode
|
|
136
|
+
}) => {
|
|
137
|
+
cleanup();
|
|
138
|
+
completeHandler(taskId);
|
|
139
|
+
(async () => {
|
|
140
|
+
try {
|
|
141
|
+
if (await exists(statePath)) await unlink(statePath);
|
|
142
|
+
} catch {
|
|
143
|
+
// ignore
|
|
144
|
+
}
|
|
145
|
+
})();
|
|
146
|
+
reject(new Error(typeof error === 'string' ? error : String(errorCode ?? error)));
|
|
147
|
+
});
|
|
148
|
+
activeDownloadTasks.set(taskId, task);
|
|
149
|
+
if (opts?.signal) {
|
|
150
|
+
abortHandler = () => {
|
|
151
|
+
task.stop();
|
|
152
|
+
cleanup();
|
|
153
|
+
(async () => {
|
|
154
|
+
try {
|
|
155
|
+
if (await exists(statePath)) await unlink(statePath);
|
|
156
|
+
} catch {
|
|
157
|
+
// ignore
|
|
158
|
+
}
|
|
159
|
+
})();
|
|
160
|
+
const err = new Error('Download aborted');
|
|
161
|
+
err.name = 'AbortError';
|
|
162
|
+
reject(err);
|
|
163
|
+
};
|
|
164
|
+
opts.signal.addEventListener('abort', abortHandler);
|
|
165
|
+
}
|
|
166
|
+
task.start();
|
|
167
|
+
});
|
|
168
|
+
} catch (err) {
|
|
169
|
+
if (err instanceof Error && err.name === 'AbortError' || isAborted()) {
|
|
170
|
+
await cleanupPartialWithRetry();
|
|
171
|
+
try {
|
|
172
|
+
if (await exists(statePath)) await unlink(statePath);
|
|
173
|
+
} catch {
|
|
174
|
+
// ignore
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (isArchive && !(err instanceof Error && err.name === 'AbortError')) {
|
|
178
|
+
try {
|
|
179
|
+
if (await exists(downloadPath)) {
|
|
180
|
+
const archiveStat = await stat(downloadPath);
|
|
181
|
+
if (model.bytes > 0 && archiveStat.size < model.bytes) {
|
|
182
|
+
console.warn(`[Download] Deleting truncated archive for ${category}:${id} (${archiveStat.size}/${model.bytes})`);
|
|
183
|
+
await unlink(downloadPath);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
} catch {
|
|
187
|
+
// ignore
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
throw err;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
export async function getIncompleteDownloads(category) {
|
|
194
|
+
const prefix = category + ':';
|
|
195
|
+
const states = [];
|
|
196
|
+
const existingTasks = await getExistingDownloadTasks();
|
|
197
|
+
for (const task of existingTasks) {
|
|
198
|
+
if (!task.id || !task.id.startsWith(prefix)) continue;
|
|
199
|
+
const modelId = task.id.slice(prefix.length);
|
|
200
|
+
const readyPath = getReadyMarkerPath(category, modelId);
|
|
201
|
+
if (await exists(readyPath)) continue;
|
|
202
|
+
const statePath = getDownloadStatePath(category, modelId);
|
|
203
|
+
let model;
|
|
204
|
+
let totalBytes;
|
|
205
|
+
let archivePath;
|
|
206
|
+
let startedAt;
|
|
207
|
+
if (await exists(statePath)) {
|
|
208
|
+
try {
|
|
209
|
+
const raw = await readFile(statePath, 'utf8');
|
|
210
|
+
const fromFile = JSON.parse(raw);
|
|
211
|
+
model = fromFile.model;
|
|
212
|
+
totalBytes = fromFile.totalBytes ?? fromFile.model?.bytes;
|
|
213
|
+
archivePath = fromFile.archivePath;
|
|
214
|
+
startedAt = fromFile.startedAt;
|
|
215
|
+
} catch {
|
|
216
|
+
// ignore
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (!model) {
|
|
220
|
+
const meta = await getModelByIdByCategory(category, modelId);
|
|
221
|
+
if (!meta) continue;
|
|
222
|
+
model = meta;
|
|
223
|
+
totalBytes = model.bytes;
|
|
224
|
+
archivePath = getArchivePath(category, modelId, model.archiveExt);
|
|
225
|
+
}
|
|
226
|
+
let bytesDownloaded;
|
|
227
|
+
if (archivePath) {
|
|
228
|
+
try {
|
|
229
|
+
const st = await stat(archivePath);
|
|
230
|
+
if (st?.size != null && st.size >= 0) bytesDownloaded = st.size;
|
|
231
|
+
} catch {
|
|
232
|
+
// ignore
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
states.push({
|
|
236
|
+
modelId,
|
|
237
|
+
category,
|
|
238
|
+
phase: 'downloading',
|
|
239
|
+
startedAt: startedAt ?? new Date().toISOString(),
|
|
240
|
+
archivePath: archivePath ?? '',
|
|
241
|
+
model,
|
|
242
|
+
bytesDownloaded,
|
|
243
|
+
totalBytes: totalBytes ?? model.bytes
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return states;
|
|
247
|
+
}
|
|
248
|
+
export async function resumeDownload(category, id, opts) {
|
|
249
|
+
const taskId = makeDownloadTaskId(category, id);
|
|
250
|
+
const existingTasks = await getExistingDownloadTasks();
|
|
251
|
+
const existing = existingTasks.find(t => t.id === taskId);
|
|
252
|
+
if (!existing) {
|
|
253
|
+
return downloadModelByCategory(category, id, {
|
|
254
|
+
onProgress: opts?.onProgress,
|
|
255
|
+
signal: opts?.signal,
|
|
256
|
+
onChecksumIssue: opts?.onChecksumIssue,
|
|
257
|
+
deleteArchiveAfterExtract: opts?.deleteArchiveAfterExtract
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
const model = await getModelByIdByCategory(category, id);
|
|
261
|
+
if (!model) throw new Error(`Unknown model id: ${id}`);
|
|
262
|
+
const downloadPath = getArchivePath(category, id, model.archiveExt);
|
|
263
|
+
const modelDir = getModelDir(category, id);
|
|
264
|
+
const isArchive = model.archiveExt === 'tar.bz2';
|
|
265
|
+
const statePath = getDownloadStatePath(category, id);
|
|
266
|
+
const isAborted = () => Boolean(opts?.signal?.aborted);
|
|
267
|
+
return new Promise((resolve, reject) => {
|
|
268
|
+
let abortHandler;
|
|
269
|
+
const cleanup = () => {
|
|
270
|
+
if (abortHandler && opts?.signal) {
|
|
271
|
+
opts.signal.removeEventListener('abort', abortHandler);
|
|
272
|
+
abortHandler = undefined;
|
|
273
|
+
}
|
|
274
|
+
activeDownloadTasks.delete(taskId);
|
|
275
|
+
};
|
|
276
|
+
existing.progress(({
|
|
277
|
+
bytesDownloaded,
|
|
278
|
+
bytesTotal
|
|
279
|
+
}) => {
|
|
280
|
+
if (isAborted()) return;
|
|
281
|
+
const total = bytesTotal ?? model.bytes ?? 0;
|
|
282
|
+
const percent = total > 0 ? bytesDownloaded / total * 100 : 0;
|
|
283
|
+
opts?.onProgress?.({
|
|
284
|
+
bytesDownloaded,
|
|
285
|
+
totalBytes: total,
|
|
286
|
+
percent,
|
|
287
|
+
phase: 'downloading'
|
|
288
|
+
});
|
|
289
|
+
emitDownloadProgress(category, id, {
|
|
290
|
+
bytesDownloaded,
|
|
291
|
+
totalBytes: total,
|
|
292
|
+
percent,
|
|
293
|
+
phase: 'downloading'
|
|
294
|
+
});
|
|
295
|
+
}).done(async () => {
|
|
296
|
+
cleanup();
|
|
297
|
+
try {
|
|
298
|
+
const result = await runPostDownloadProcessing({
|
|
299
|
+
category,
|
|
300
|
+
id,
|
|
301
|
+
model,
|
|
302
|
+
downloadPath,
|
|
303
|
+
modelDir,
|
|
304
|
+
isArchive,
|
|
305
|
+
statePath,
|
|
306
|
+
signal: opts?.signal,
|
|
307
|
+
onChecksumIssue: opts?.onChecksumIssue,
|
|
308
|
+
deleteArchiveAfterExtract: opts?.deleteArchiveAfterExtract,
|
|
309
|
+
onProgress: opts?.onProgress,
|
|
310
|
+
getDownloadedList: () => listDownloadedModelsByCategory(category)
|
|
311
|
+
});
|
|
312
|
+
completeHandler(taskId);
|
|
313
|
+
resolve(result);
|
|
314
|
+
} catch (e) {
|
|
315
|
+
completeHandler(taskId);
|
|
316
|
+
reject(e);
|
|
317
|
+
}
|
|
318
|
+
}).error(({
|
|
319
|
+
error,
|
|
320
|
+
errorCode
|
|
321
|
+
}) => {
|
|
322
|
+
cleanup();
|
|
323
|
+
completeHandler(taskId);
|
|
324
|
+
(async () => {
|
|
325
|
+
try {
|
|
326
|
+
if (await exists(statePath)) await unlink(statePath);
|
|
327
|
+
} catch {
|
|
328
|
+
// ignore
|
|
329
|
+
}
|
|
330
|
+
})();
|
|
331
|
+
reject(new Error(typeof error === 'string' ? error : String(errorCode ?? error)));
|
|
332
|
+
});
|
|
333
|
+
activeDownloadTasks.set(taskId, existing);
|
|
334
|
+
if (opts?.signal) {
|
|
335
|
+
abortHandler = () => {
|
|
336
|
+
existing.stop();
|
|
337
|
+
cleanup();
|
|
338
|
+
(async () => {
|
|
339
|
+
try {
|
|
340
|
+
if (await exists(statePath)) await unlink(statePath);
|
|
341
|
+
} catch {
|
|
342
|
+
// ignore
|
|
343
|
+
}
|
|
344
|
+
})();
|
|
345
|
+
const err = new Error('Download aborted');
|
|
346
|
+
err.name = 'AbortError';
|
|
347
|
+
reject(err);
|
|
348
|
+
};
|
|
349
|
+
opts.signal.addEventListener('abort', abortHandler);
|
|
350
|
+
}
|
|
351
|
+
existing.resume().catch(() => {});
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
export async function deleteIncompleteDownload(category, id) {
|
|
355
|
+
const taskId = makeDownloadTaskId(category, id);
|
|
356
|
+
const existingTasks = await getExistingDownloadTasks();
|
|
357
|
+
const task = existingTasks.find(t => t.id === taskId);
|
|
358
|
+
if (task) {
|
|
359
|
+
task.stop();
|
|
360
|
+
activeDownloadTasks.delete(taskId);
|
|
361
|
+
}
|
|
362
|
+
const modelDir = getModelDir(category, id);
|
|
363
|
+
if (await exists(modelDir)) {
|
|
364
|
+
await unlink(modelDir);
|
|
365
|
+
}
|
|
366
|
+
const tarPath = getTarArchivePath(category, id);
|
|
367
|
+
const onnxPath = getOnnxPath(category, id);
|
|
368
|
+
if (await exists(tarPath)) {
|
|
369
|
+
await unlink(tarPath);
|
|
370
|
+
}
|
|
371
|
+
if (await exists(onnxPath)) {
|
|
372
|
+
await unlink(onnxPath);
|
|
373
|
+
}
|
|
374
|
+
const statePath = getDownloadStatePath(category, id);
|
|
375
|
+
if (await exists(statePath)) {
|
|
376
|
+
await unlink(statePath);
|
|
377
|
+
}
|
|
378
|
+
await removeDirectoryRecursive(getNativeAssetExtractedModelDir(id));
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/** Task ids in the form `category:modelId` for downloads currently tracked in JS (before post-processing). */
|
|
382
|
+
export function getActiveDownloadTaskKeys() {
|
|
383
|
+
return [...activeDownloadTasks.keys()];
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=downloadTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createDownloadTask","completeHandler","getExistingDownloadTasks","exists","readFile","mkdir","writeFile","stat","unlink","checkDiskSpace","removeDirectoryRecursive","getModelsBaseDir","getModelDir","getArchivePath","getReadyMarkerPath","getDownloadStatePath","getNativeAssetExtractedModelDir","getTarArchivePath","getOnnxPath","emitDownloadProgress","runPostDownloadProcessing","getModelByIdByCategory","listDownloadedModelsByCategory","makeDownloadTaskId","category","id","activeDownloadTasks","Map","downloadModelByCategory","opts","isAborted","Boolean","signal","aborted","abortError","Error","name","model","baseDir","downloadPath","archiveExt","isArchive","modelDir","sleep","ms","Promise","resolve","setTimeout","cleanupPartial","cleanupPartialWithRetry","attempt","console","warn","diskSpaceCheck","bytes","success","message","statePath","overwrite","readyMarkerExists","downloadState","modelId","phase","startedAt","Date","toISOString","archivePath","totalBytes","JSON","stringify","taskId","reject","abortHandler","cleanup","removeEventListener","undefined","delete","task","url","downloadUrl","destination","metadata","progress","bytesDownloaded","bytesTotal","total","percent","onProgress","done","result","onChecksumIssue","deleteArchiveAfterExtract","getDownloadedList","e","error","errorCode","String","set","stop","err","addEventListener","start","archiveStat","size","getIncompleteDownloads","prefix","states","existingTasks","startsWith","slice","length","readyPath","raw","fromFile","parse","meta","st","push","resumeDownload","existing","find","t","resume","catch","deleteIncompleteDownload","tarPath","onnxPath","getActiveDownloadTaskKeys","keys"],"sourceRoot":"../../../src","sources":["download/downloadTask.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { exists, stat } from '@dr.pogodin/react-native-fs';
|
|
4
|
+
import { getArchivePath } from "./paths.js";
|
|
5
|
+
import { getModelByIdByCategory } from "./registry.js";
|
|
6
|
+
import { isModelDownloadedByCategory, getLocalModelPathByCategory, deleteModelByCategory } from "./localModels.js";
|
|
7
|
+
import { downloadModelByCategory } from "./downloadTask.js";
|
|
8
|
+
import { getIncompleteDownloads, resumeDownload } from "./downloadTask.js";
|
|
9
|
+
import { getIncompleteExtractions, resumeExtraction, extractModelByCategory, deleteIncompleteExtraction } from "./modelExtraction.js";
|
|
10
|
+
import { deleteIncompleteDownload } from "./downloadTask.js";
|
|
11
|
+
/**
|
|
12
|
+
* Single entry point to ensure a model is available locally: handles download, extraction,
|
|
13
|
+
* and all edge cases (already ready, incomplete download, incomplete extraction, archive
|
|
14
|
+
* already present). Call this with category, id, and optional opts; the function decides
|
|
15
|
+
* whether to return the existing path, resume an interrupted operation, or start download/extraction.
|
|
16
|
+
*
|
|
17
|
+
* Use this as the main API when you only need "make this model ready"; the lower-level
|
|
18
|
+
* APIs (downloadModelByCategory, resumeDownload, extractModelByCategory, getIncompleteExtractions,
|
|
19
|
+
* etc.) remain available for advanced flows.
|
|
20
|
+
*/
|
|
21
|
+
export async function ensureModelByCategory(category, id, opts) {
|
|
22
|
+
const model = await getModelByIdByCategory(category, id);
|
|
23
|
+
if (!model) {
|
|
24
|
+
throw new Error(`Unknown model id: ${id}`);
|
|
25
|
+
}
|
|
26
|
+
const isArchive = model.archiveExt === 'tar.bz2';
|
|
27
|
+
if (opts?.overwrite) {
|
|
28
|
+
await deleteModelByCategory(category, id);
|
|
29
|
+
await deleteIncompleteExtraction(category, id);
|
|
30
|
+
await deleteIncompleteDownload(category, id);
|
|
31
|
+
}
|
|
32
|
+
if (!opts?.overwrite && (await isModelDownloadedByCategory(category, id))) {
|
|
33
|
+
const localPath = await getLocalModelPathByCategory(category, id);
|
|
34
|
+
if (localPath) {
|
|
35
|
+
return {
|
|
36
|
+
modelId: id,
|
|
37
|
+
localPath
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (isArchive) {
|
|
42
|
+
const incompleteExtractions = await getIncompleteExtractions(category);
|
|
43
|
+
const extractionState = incompleteExtractions.find(s => s.modelId === id);
|
|
44
|
+
if (extractionState) {
|
|
45
|
+
return resumeExtraction(category, id, {
|
|
46
|
+
onProgress: opts?.onProgress,
|
|
47
|
+
signal: opts?.signal,
|
|
48
|
+
onChecksumIssue: opts?.onChecksumIssue,
|
|
49
|
+
deleteArchiveAfterExtract: opts?.deleteArchiveAfterExtract
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const incompleteDownloads = await getIncompleteDownloads(category);
|
|
54
|
+
const downloadState = incompleteDownloads.find(s => s.modelId === id);
|
|
55
|
+
if (downloadState) {
|
|
56
|
+
return resumeDownload(category, id, {
|
|
57
|
+
onProgress: opts?.onProgress,
|
|
58
|
+
signal: opts?.signal,
|
|
59
|
+
onChecksumIssue: opts?.onChecksumIssue,
|
|
60
|
+
deleteArchiveAfterExtract: opts?.deleteArchiveAfterExtract
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (isArchive) {
|
|
64
|
+
const downloadPath = getArchivePath(category, id, model.archiveExt);
|
|
65
|
+
if (await exists(downloadPath)) {
|
|
66
|
+
try {
|
|
67
|
+
const st = await stat(downloadPath);
|
|
68
|
+
if (model.bytes <= 0 || st.size != null && st.size >= model.bytes) {
|
|
69
|
+
return extractModelByCategory(category, id, {
|
|
70
|
+
onProgress: opts?.onProgress,
|
|
71
|
+
signal: opts?.signal,
|
|
72
|
+
onChecksumIssue: opts?.onChecksumIssue,
|
|
73
|
+
deleteArchiveAfterExtract: opts?.deleteArchiveAfterExtract
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
} catch {
|
|
77
|
+
// fall through to download
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return downloadModelByCategory(category, id, {
|
|
82
|
+
onProgress: opts?.onProgress,
|
|
83
|
+
overwrite: opts?.overwrite ?? false,
|
|
84
|
+
signal: opts?.signal,
|
|
85
|
+
onChecksumIssue: opts?.onChecksumIssue,
|
|
86
|
+
deleteArchiveAfterExtract: opts?.deleteArchiveAfterExtract
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=ensureModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["exists","stat","getArchivePath","getModelByIdByCategory","isModelDownloadedByCategory","getLocalModelPathByCategory","deleteModelByCategory","downloadModelByCategory","getIncompleteDownloads","resumeDownload","getIncompleteExtractions","resumeExtraction","extractModelByCategory","deleteIncompleteExtraction","deleteIncompleteDownload","ensureModelByCategory","category","id","opts","model","Error","isArchive","archiveExt","overwrite","localPath","modelId","incompleteExtractions","extractionState","find","s","onProgress","signal","onChecksumIssue","deleteArchiveAfterExtract","incompleteDownloads","downloadState","downloadPath","st","bytes","size"],"sourceRoot":"../../../src","sources":["download/ensureModel.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export { extractTarBz2 } from "
|
|
4
|
-
export { extractTarZst } from "
|
|
5
|
-
export { listModelsByCategory, refreshModelsByCategory, getModelsCacheStatusByCategory, getModelByIdByCategory, listDownloadedModelsByCategory, isModelDownloadedByCategory, getLocalModelPathByCategory, downloadModelByCategory, deleteModelByCategory, clearModelCacheByCategory, getDownloadStorageBase, subscribeDownloadProgress, subscribeModelsListUpdated, updateModelLastUsed, listDownloadedModelsWithMetadata, cleanupLeastRecentlyUsed, ModelCategory } from "./ModelDownloadManager.js";
|
|
6
|
-
export { validateChecksum, validateExtractedFiles, checkDiskSpace, setExpectedFilesForCategory, getExpectedFilesForCategory, parseChecksumFile, calculateFileChecksum } from "./validation.js";
|
|
3
|
+
export { extractTarBz2 } from "../extraction/extractTarBz2.js";
|
|
4
|
+
export { extractTarZst } from "../extraction/extractTarZst.js";
|
|
5
|
+
export { listModelsByCategory, refreshModelsByCategory, getModelsCacheStatusByCategory, getModelByIdByCategory, listDownloadedModelsByCategory, isModelDownloadedByCategory, getLocalModelPathByCategory, downloadModelByCategory, deleteModelByCategory, clearModelCacheByCategory, getDownloadStorageBase, subscribeDownloadProgress, subscribeModelsListUpdated, updateModelLastUsed, listDownloadedModelsWithMetadata, cleanupLeastRecentlyUsed, getIncompleteDownloads, resumeDownload, deleteIncompleteDownload, extractModelByCategory, getIncompleteExtractions, resumeExtraction, deleteIncompleteExtraction, ensureModelByCategory, ModelCategory, getProtectedModelKeysForBulkDelete, purgeDownloadedModelArtifacts } from "./ModelDownloadManager.js";
|
|
6
|
+
export { validateChecksum, validateExtractedFiles, checkDiskSpace, resolveActualModelDir, setExpectedFilesForCategory, getExpectedFilesForCategory, parseChecksumFile, calculateFileChecksum } from "./validation.js";
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["extractTarBz2","extractTarZst","listModelsByCategory","refreshModelsByCategory","getModelsCacheStatusByCategory","getModelByIdByCategory","listDownloadedModelsByCategory","isModelDownloadedByCategory","getLocalModelPathByCategory","downloadModelByCategory","deleteModelByCategory","clearModelCacheByCategory","getDownloadStorageBase","subscribeDownloadProgress","subscribeModelsListUpdated","updateModelLastUsed","listDownloadedModelsWithMetadata","cleanupLeastRecentlyUsed","ModelCategory","validateChecksum","validateExtractedFiles","checkDiskSpace","setExpectedFilesForCategory","getExpectedFilesForCategory","parseChecksumFile","calculateFileChecksum"],"sourceRoot":"../../../src","sources":["download/index.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,
|
|
1
|
+
{"version":3,"names":["extractTarBz2","extractTarZst","listModelsByCategory","refreshModelsByCategory","getModelsCacheStatusByCategory","getModelByIdByCategory","listDownloadedModelsByCategory","isModelDownloadedByCategory","getLocalModelPathByCategory","downloadModelByCategory","deleteModelByCategory","clearModelCacheByCategory","getDownloadStorageBase","subscribeDownloadProgress","subscribeModelsListUpdated","updateModelLastUsed","listDownloadedModelsWithMetadata","cleanupLeastRecentlyUsed","getIncompleteDownloads","resumeDownload","deleteIncompleteDownload","extractModelByCategory","getIncompleteExtractions","resumeExtraction","deleteIncompleteExtraction","ensureModelByCategory","ModelCategory","getProtectedModelKeysForBulkDelete","purgeDownloadedModelArtifacts","validateChecksum","validateExtractedFiles","checkDiskSpace","resolveActualModelDir","setExpectedFilesForCategory","getExpectedFilesForCategory","parseChecksumFile","calculateFileChecksum"],"sourceRoot":"../../../src","sources":["download/index.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,gCAA6B;AAE3D,SAASC,aAAa,QAAQ,gCAA6B;AAE3D,SACEC,oBAAoB,EACpBC,uBAAuB,EACvBC,8BAA8B,EAC9BC,sBAAsB,EACtBC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,uBAAuB,EACvBC,qBAAqB,EACrBC,yBAAyB,EACzBC,sBAAsB,EACtBC,yBAAyB,EACzBC,0BAA0B,EAC1BC,mBAAmB,EACnBC,gCAAgC,EAChCC,wBAAwB,EACxBC,sBAAsB,EACtBC,cAAc,EACdC,wBAAwB,EACxBC,sBAAsB,EACtBC,wBAAwB,EACxBC,gBAAgB,EAChBC,0BAA0B,EAC1BC,qBAAqB,EACrBC,aAAa,EACbC,kCAAkC,EAClCC,6BAA6B,QACxB,2BAAwB;AAiB/B,SACEC,gBAAgB,EAChBC,sBAAsB,EACtBC,cAAc,EACdC,qBAAqB,EACrBC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,iBAAiB,EACjBC,qBAAqB,QAChB,iBAAc","ignoreList":[]}
|