@h-ai/storage 1.0.0-beta.2 → 1.0.0-beta.21
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.en.md +102 -41
- package/README.ja.md +101 -40
- package/README.md +144 -81
- package/dist/browser.d.ts +2 -1
- package/dist/browser.js +3 -3
- package/dist/{chunk-P65WYXJG.js → chunk-6YG3N3CW.js} +8 -4
- package/dist/chunk-6YG3N3CW.js.map +1 -0
- package/dist/{chunk-ANAESRWS.js → chunk-FK7KRCML.js} +5 -5
- package/dist/chunk-FK7KRCML.js.map +1 -0
- package/dist/{chunk-TLZY4IP6.js → chunk-JAJYHGLI.js} +61 -17
- package/dist/chunk-JAJYHGLI.js.map +1 -0
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.js +1 -1
- package/dist/node.js +371 -145
- package/dist/node.js.map +1 -1
- package/dist/schemas.d.ts +2 -1
- package/dist/schemas.js +1 -1
- package/package.json +16 -13
- package/dist/chunk-ANAESRWS.js.map +0 -1
- package/dist/chunk-P65WYXJG.js.map +0 -1
- package/dist/chunk-TLZY4IP6.js.map +0 -1
|
@@ -9,6 +9,9 @@ var en_US_default = {
|
|
|
9
9
|
storage_bucketNotExist: "Bucket does not exist",
|
|
10
10
|
storage_networkError: "Network error",
|
|
11
11
|
storage_responseBodyEmpty: "Response body is empty",
|
|
12
|
+
storage_fileChanged: "The file changed while reading metadata. Retry the operation.",
|
|
13
|
+
storage_metadataRequired: "File metadata is missing. Migrate the data or upload the file again.",
|
|
14
|
+
storage_metadataInvalid: "File metadata is invalid. Restore the complete backup or upload the file again.",
|
|
12
15
|
storage_presignUrlFailed: "Failed to generate presigned URL",
|
|
13
16
|
storage_presignUploadUrlFailed: "Failed to generate presigned upload URL",
|
|
14
17
|
storage_localPresignUnsupported: "Local storage does not support presigned URLs; upload or download through an authenticated application file endpoint",
|
|
@@ -28,7 +31,7 @@ var en_US_default = {
|
|
|
28
31
|
storage_fileNotFound: "File not found: {key}",
|
|
29
32
|
storage_permissionDenied: "Permission denied: {key}",
|
|
30
33
|
storage_pathIsDir: "Path is a directory: {key}",
|
|
31
|
-
storage_ioError: "
|
|
34
|
+
storage_ioError: "File operation failed. Please try again later.",
|
|
32
35
|
storage_deleteManyFailed: "Failed to delete {count} files",
|
|
33
36
|
storage_s3ClientNotInitialized: "S3 client not initialized",
|
|
34
37
|
storage_s3ConfigNotInitialized: "S3 config not initialized",
|
|
@@ -57,6 +60,9 @@ var ja_JP_default = {
|
|
|
57
60
|
storage_bucketNotExist: "\u30D0\u30B1\u30C3\u30C8\u304C\u5B58\u5728\u3057\u307E\u305B\u3093",
|
|
58
61
|
storage_networkError: "\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30A8\u30E9\u30FC",
|
|
59
62
|
storage_responseBodyEmpty: "\u30EC\u30B9\u30DD\u30F3\u30B9\u672C\u6587\u304C\u7A7A\u3067\u3059",
|
|
63
|
+
storage_fileChanged: "\u30D5\u30A1\u30A4\u30EB\u306E\u66F4\u65B0\u4E2D\u3067\u3059\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",
|
|
64
|
+
storage_metadataRequired: "\u30D5\u30A1\u30A4\u30EB\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30C7\u30FC\u30BF\u3092\u79FB\u884C\u3059\u308B\u304B\u518D\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
65
|
+
storage_metadataInvalid: "\u30D5\u30A1\u30A4\u30EB\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u304C\u7834\u640D\u3057\u3066\u3044\u307E\u3059\u3002\u5B8C\u5168\u306A\u30D0\u30C3\u30AF\u30A2\u30C3\u30D7\u3092\u5FA9\u5143\u3059\u308B\u304B\u518D\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
60
66
|
storage_presignUrlFailed: "\u7F72\u540D\u4ED8\u304DURL\u306E\u751F\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
|
|
61
67
|
storage_presignUploadUrlFailed: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u7528\u7F72\u540D\u4ED8\u304DURL\u306E\u751F\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
|
|
62
68
|
storage_localPresignUnsupported: "\u30ED\u30FC\u30AB\u30EB\u30B9\u30C8\u30EC\u30FC\u30B8\u306F\u7F72\u540D\u4ED8\u304D URL \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u8A8D\u8A3C\u4ED8\u304D\u306E\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u30D5\u30A1\u30A4\u30EB\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3067\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u307E\u305F\u306F\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
@@ -76,7 +82,7 @@ var ja_JP_default = {
|
|
|
76
82
|
storage_fileNotFound: "\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {key}",
|
|
77
83
|
storage_permissionDenied: "\u30A2\u30AF\u30BB\u30B9\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093: {key}",
|
|
78
84
|
storage_pathIsDir: "\u30D1\u30B9\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3067\u3059: {key}",
|
|
79
|
-
storage_ioError: "\
|
|
85
|
+
storage_ioError: "\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u307F\u66F8\u304D\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",
|
|
80
86
|
storage_deleteManyFailed: "{count}\u500B\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
|
|
81
87
|
storage_s3ClientNotInitialized: "S3\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
|
|
82
88
|
storage_s3ConfigNotInitialized: "S3\u8A2D\u5B9A\u304C\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
|
|
@@ -105,6 +111,9 @@ var zh_CN_default = {
|
|
|
105
111
|
storage_bucketNotExist: "\u5B58\u50A8\u6876\u4E0D\u5B58\u5728",
|
|
106
112
|
storage_networkError: "\u7F51\u7EDC\u9519\u8BEF",
|
|
107
113
|
storage_responseBodyEmpty: "\u54CD\u5E94\u4F53\u4E3A\u7A7A",
|
|
114
|
+
storage_fileChanged: "\u6587\u4EF6\u6B63\u5728\u66F4\u65B0\uFF0C\u8BF7\u91CD\u8BD5",
|
|
115
|
+
storage_metadataRequired: "\u6587\u4EF6\u5143\u6570\u636E\u7F3A\u5931\uFF0C\u8BF7\u8FC1\u79FB\u6570\u636E\u6216\u91CD\u65B0\u4E0A\u4F20\u6587\u4EF6",
|
|
116
|
+
storage_metadataInvalid: "\u6587\u4EF6\u5143\u6570\u636E\u635F\u574F\uFF0C\u8BF7\u6062\u590D\u5B8C\u6574\u5907\u4EFD\u6216\u91CD\u65B0\u4E0A\u4F20\u6587\u4EF6",
|
|
108
117
|
storage_presignUrlFailed: "\u751F\u6210\u7B7E\u540D URL \u5931\u8D25",
|
|
109
118
|
storage_presignUploadUrlFailed: "\u751F\u6210\u4E0A\u4F20\u7B7E\u540D URL \u5931\u8D25",
|
|
110
119
|
storage_localPresignUnsupported: "\u672C\u5730\u5B58\u50A8\u4E0D\u652F\u6301\u9884\u7B7E\u540D URL\uFF0C\u8BF7\u901A\u8FC7\u5E94\u7528\u7684\u9274\u6743\u6587\u4EF6\u63A5\u53E3\u4E0A\u4F20\u6216\u4E0B\u8F7D",
|
|
@@ -124,7 +133,7 @@ var zh_CN_default = {
|
|
|
124
133
|
storage_fileNotFound: "\u6587\u4EF6\u4E0D\u5B58\u5728: {key}",
|
|
125
134
|
storage_permissionDenied: "\u6743\u9650\u4E0D\u8DB3: {key}",
|
|
126
135
|
storage_pathIsDir: "\u8DEF\u5F84\u662F\u76EE\u5F55: {key}",
|
|
127
|
-
storage_ioError: "
|
|
136
|
+
storage_ioError: "\u6587\u4EF6\u8BFB\u5199\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",
|
|
128
137
|
storage_deleteManyFailed: "\u5220\u9664 {count} \u4E2A\u6587\u4EF6\u5931\u8D25",
|
|
129
138
|
storage_s3ClientNotInitialized: "S3 \u5BA2\u6237\u7AEF\u672A\u521D\u59CB\u5316",
|
|
130
139
|
storage_s3ConfigNotInitialized: "S3 \u914D\u7F6E\u672A\u521D\u59CB\u5316",
|
|
@@ -204,8 +213,12 @@ var MIME_TYPE_DEFAULT = "application/octet-stream";
|
|
|
204
213
|
async function uploadWithPresignedUrl(url, data, options = {}) {
|
|
205
214
|
try {
|
|
206
215
|
const signal = options.abortController?.signal;
|
|
207
|
-
if (signal?.aborted)
|
|
208
|
-
return {
|
|
216
|
+
if (signal?.aborted) {
|
|
217
|
+
return {
|
|
218
|
+
success: false,
|
|
219
|
+
error: storageM("storage_uploadCanceled")
|
|
220
|
+
};
|
|
221
|
+
}
|
|
209
222
|
const body = data;
|
|
210
223
|
if (options.onProgress) {
|
|
211
224
|
const xhr = new XMLHttpRequest();
|
|
@@ -224,25 +237,43 @@ async function uploadWithPresignedUrl(url, data, options = {}) {
|
|
|
224
237
|
resolve(result);
|
|
225
238
|
}
|
|
226
239
|
function onAbort() {
|
|
227
|
-
finish({
|
|
240
|
+
finish({
|
|
241
|
+
success: false,
|
|
242
|
+
error: storageM("storage_uploadCanceled")
|
|
243
|
+
});
|
|
228
244
|
}
|
|
229
245
|
function onCancel() {
|
|
230
246
|
onAbort();
|
|
231
247
|
xhr.abort();
|
|
232
248
|
}
|
|
233
249
|
function onError() {
|
|
234
|
-
finish({
|
|
250
|
+
finish({
|
|
251
|
+
success: false,
|
|
252
|
+
error: storageM("storage_networkError")
|
|
253
|
+
});
|
|
235
254
|
}
|
|
236
255
|
function onLoad() {
|
|
237
|
-
finish(xhr.status >= 200 && xhr.status < 300 ? { success: true } : {
|
|
256
|
+
finish(xhr.status >= 200 && xhr.status < 300 ? { success: true } : {
|
|
257
|
+
success: false,
|
|
258
|
+
error: storageM("storage_uploadFailedStatus", {
|
|
259
|
+
params: { status: xhr.status, statusText: xhr.statusText }
|
|
260
|
+
})
|
|
261
|
+
});
|
|
238
262
|
}
|
|
239
263
|
function onProgress(event) {
|
|
240
264
|
if (settled || !event.lengthComputable)
|
|
241
265
|
return;
|
|
242
266
|
try {
|
|
243
|
-
options.onProgress?.({
|
|
267
|
+
options.onProgress?.({
|
|
268
|
+
loaded: event.loaded,
|
|
269
|
+
total: event.total,
|
|
270
|
+
percent: Math.round(event.loaded / event.total * 100)
|
|
271
|
+
});
|
|
244
272
|
} catch (error) {
|
|
245
|
-
finish({
|
|
273
|
+
finish({
|
|
274
|
+
success: false,
|
|
275
|
+
error: error instanceof Error ? error.message : storageM("storage_unknownError")
|
|
276
|
+
});
|
|
246
277
|
xhr.abort();
|
|
247
278
|
}
|
|
248
279
|
}
|
|
@@ -264,7 +295,10 @@ async function uploadWithPresignedUrl(url, data, options = {}) {
|
|
|
264
295
|
}
|
|
265
296
|
xhr.send(body);
|
|
266
297
|
} catch (error) {
|
|
267
|
-
finish({
|
|
298
|
+
finish({
|
|
299
|
+
success: false,
|
|
300
|
+
error: error instanceof Error ? error.message : storageM("storage_unknownError")
|
|
301
|
+
});
|
|
268
302
|
xhr.abort();
|
|
269
303
|
}
|
|
270
304
|
});
|
|
@@ -278,13 +312,18 @@ async function uploadWithPresignedUrl(url, data, options = {}) {
|
|
|
278
312
|
if (!response.ok) {
|
|
279
313
|
return {
|
|
280
314
|
success: false,
|
|
281
|
-
error: storageM("storage_uploadFailedStatus", {
|
|
315
|
+
error: storageM("storage_uploadFailedStatus", {
|
|
316
|
+
params: { status: response.status, statusText: response.statusText }
|
|
317
|
+
})
|
|
282
318
|
};
|
|
283
319
|
}
|
|
284
320
|
return { success: true };
|
|
285
321
|
} catch (error) {
|
|
286
322
|
if (error instanceof Error && error.name === "AbortError") {
|
|
287
|
-
return {
|
|
323
|
+
return {
|
|
324
|
+
success: false,
|
|
325
|
+
error: storageM("storage_uploadCanceled")
|
|
326
|
+
};
|
|
288
327
|
}
|
|
289
328
|
return {
|
|
290
329
|
success: false,
|
|
@@ -301,14 +340,19 @@ async function downloadWithPresignedUrl(url, options = {}) {
|
|
|
301
340
|
if (!response.ok) {
|
|
302
341
|
return {
|
|
303
342
|
success: false,
|
|
304
|
-
error: storageM("storage_downloadFailedStatus", {
|
|
343
|
+
error: storageM("storage_downloadFailedStatus", {
|
|
344
|
+
params: { status: response.status, statusText: response.statusText }
|
|
345
|
+
})
|
|
305
346
|
};
|
|
306
347
|
}
|
|
307
348
|
const blob = await response.blob();
|
|
308
349
|
return { success: true, data: blob };
|
|
309
350
|
} catch (error) {
|
|
310
351
|
if (error instanceof Error && error.name === "AbortError") {
|
|
311
|
-
return {
|
|
352
|
+
return {
|
|
353
|
+
success: false,
|
|
354
|
+
error: storageM("storage_downloadCanceled")
|
|
355
|
+
};
|
|
312
356
|
}
|
|
313
357
|
return {
|
|
314
358
|
success: false,
|
|
@@ -356,5 +400,5 @@ function formatFileSize(bytes) {
|
|
|
356
400
|
}
|
|
357
401
|
|
|
358
402
|
export { MIME_TYPES, MIME_TYPE_DEFAULT, downloadAndSave, downloadWithPresignedUrl, formatFileSize, getFileExtension, getMimeType, storageM, uploadWithPresignedUrl };
|
|
359
|
-
//# sourceMappingURL=chunk-
|
|
360
|
-
//# sourceMappingURL=chunk-
|
|
403
|
+
//# sourceMappingURL=chunk-JAJYHGLI.js.map
|
|
404
|
+
//# sourceMappingURL=chunk-JAJYHGLI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../messages/en-US.json","../messages/ja-JP.json","../messages/zh-CN.json","../src/storage-i18n.ts","../src/storage-mime.ts","../src/client/storage-client.ts"],"names":[],"mappings":"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","file":"chunk-JAJYHGLI.js","sourcesContent":["{\n \"$schema\": \"https://inlang.com/schema/inlang-message-format\",\n \"storage_notInitialized\": \"Storage not initialized, please call storage.init() first\",\n \"storage_bucketNotExist\": \"Bucket does not exist\",\n \"storage_networkError\": \"Network error\",\n \"storage_responseBodyEmpty\": \"Response body is empty\",\n \"storage_fileChanged\": \"The file changed while reading metadata. Retry the operation.\",\n \"storage_metadataRequired\": \"File metadata is missing. Migrate the data or upload the file again.\",\n \"storage_metadataInvalid\": \"File metadata is invalid. Restore the complete backup or upload the file again.\",\n \"storage_presignUrlFailed\": \"Failed to generate presigned URL\",\n \"storage_presignUploadUrlFailed\": \"Failed to generate presigned upload URL\",\n \"storage_localPresignUnsupported\": \"Local storage does not support presigned URLs; upload or download through an authenticated application file endpoint\",\n \"storage_listOptionsInvalid\": \"Invalid list options: maxKeys must be an integer between 1 and 1000, and prefix and delimiter must be well-formed Unicode strings\",\n \"storage_listCursorInvalid\": \"Invalid list cursor or mismatched root, prefix or delimiter\",\n \"storage_s3ConfigTypeError\": \"Config type error: S3 provider only supports type=s3\",\n \"storage_diskSpaceInsufficient\": \"Insufficient disk space\",\n \"storage_localConfigTypeError\": \"Config type error: Local provider only supports type=local\",\n \"storage_operationFailed\": \"Operation failed: {error}\",\n \"storage_unsupportedType\": \"Unsupported storage type: {type}\",\n \"storage_config_bucketRequired\": \"Bucket is required\",\n \"storage_config_publicEndpointInvalid\": \"Use an HTTP(S) endpoint with an optional proxy path containing letters, numbers, underscores, dots and hyphens. Credentials, query parameters and fragments are not allowed.\",\n \"storage_config_regionRequired\": \"Region is required\",\n \"storage_config_accessKeyIdRequired\": \"Access Key ID is required\",\n \"storage_config_secretAccessKeyRequired\": \"Secret Access Key is required\",\n \"storage_config_rootRequired\": \"Root path is required\",\n \"storage_fileNotFound\": \"File not found: {key}\",\n \"storage_permissionDenied\": \"Permission denied: {key}\",\n \"storage_pathIsDir\": \"Path is a directory: {key}\",\n \"storage_ioError\": \"File operation failed. Please try again later.\",\n \"storage_deleteManyFailed\": \"Failed to delete {count} files\",\n \"storage_s3ClientNotInitialized\": \"S3 client not initialized\",\n \"storage_s3ConfigNotInitialized\": \"S3 config not initialized\",\n \"storage_uploadCanceled\": \"Upload canceled\",\n \"storage_downloadCanceled\": \"Download canceled\",\n \"storage_uploadFailedStatus\": \"Upload failed (status {status}): {statusText}\",\n \"storage_downloadFailedStatus\": \"Download failed (status {status}): {statusText}\",\n \"storage_unknownError\": \"Unknown error\",\n \"storage_saveFileFailed\": \"Failed to save file\",\n \"storage_downloadDefaultFilename\": \"download\",\n \"storage_pathTraversal\": \"Path traversal attack detected\",\n \"storage_localNotInitialized\": \"Local storage not initialized\",\n \"storage_configError\": \"Storage config validation failed: {error}\",\n \"storage_metaFileAccess\": \"Direct access to internal files is not allowed: {key}\",\n \"storage_fileAlreadyExists\": \"File already exists: {key}\",\n \"storage_checksumFailed\": \"Failed to calculate checksum\",\n \"storage_checksumInvalid\": \"Invalid checksum or algorithm\",\n \"storage_streamInvalidChunk\": \"File stream must contain byte chunks\",\n \"storage_sharedBackendRequired\": \"Production mode requires a shared backend; local files and memory backends are for development or explicit end-to-end tests.\"\n}\n","{\n \"$schema\": \"https://inlang.com/schema/inlang-message-format\",\n \"storage_notInitialized\": \"ストレージが初期化されていません。先にstorage.init()を呼び出してください\",\n \"storage_bucketNotExist\": \"バケットが存在しません\",\n \"storage_networkError\": \"ネットワークエラー\",\n \"storage_responseBodyEmpty\": \"レスポンス本文が空です\",\n \"storage_fileChanged\": \"ファイルの更新中です。もう一度お試しください\",\n \"storage_metadataRequired\": \"ファイルのメタデータがありません。データを移行するか再アップロードしてください\",\n \"storage_metadataInvalid\": \"ファイルのメタデータが破損しています。完全なバックアップを復元するか再アップロードしてください\",\n \"storage_presignUrlFailed\": \"署名付きURLの生成に失敗しました\",\n \"storage_presignUploadUrlFailed\": \"アップロード用署名付きURLの生成に失敗しました\",\n \"storage_localPresignUnsupported\": \"ローカルストレージは署名付き URL に対応していません。認証付きのアプリケーションのファイルエンドポイントでアップロードまたはダウンロードしてください\",\n \"storage_listOptionsInvalid\": \"一覧オプションが無効です。maxKeys は1〜1000の整数、prefix と delimiter は有効な Unicode 文字列で指定してください\",\n \"storage_listCursorInvalid\": \"一覧カーソルが無効か、ルート、プレフィックス、区切り文字が一致しません\",\n \"storage_s3ConfigTypeError\": \"設定の型が無効です。S3プロバイダーはtype=s3のみに対応しています\",\n \"storage_diskSpaceInsufficient\": \"ディスクの空き容量が不足しています\",\n \"storage_localConfigTypeError\": \"設定の型が無効です。ローカルプロバイダーはtype=localのみに対応しています\",\n \"storage_operationFailed\": \"操作に失敗しました: {error}\",\n \"storage_unsupportedType\": \"未対応のストレージの種類です: {type}\",\n \"storage_config_bucketRequired\": \"バケットは必須です\",\n \"storage_config_publicEndpointInvalid\": \"HTTP(S) のアクセス先を指定してください。プロキシのパスには英数字、アンダースコア、ドット、ハイフンを使用できます。認証情報、クエリ、フラグメントは含められません。\",\n \"storage_config_regionRequired\": \"リージョンは必須です\",\n \"storage_config_accessKeyIdRequired\": \"Access Key IDは必須です\",\n \"storage_config_secretAccessKeyRequired\": \"Secret Access Keyは必須です\",\n \"storage_config_rootRequired\": \"ルートパスは必須です\",\n \"storage_fileNotFound\": \"ファイルが見つかりません: {key}\",\n \"storage_permissionDenied\": \"アクセス権限がありません: {key}\",\n \"storage_pathIsDir\": \"パスはディレクトリです: {key}\",\n \"storage_ioError\": \"ファイルの読み書きに失敗しました。しばらくしてからもう一度お試しください\",\n \"storage_deleteManyFailed\": \"{count}個のファイルの削除に失敗しました\",\n \"storage_s3ClientNotInitialized\": \"S3クライアントが初期化されていません\",\n \"storage_s3ConfigNotInitialized\": \"S3設定が初期化されていません\",\n \"storage_uploadCanceled\": \"アップロードをキャンセルしました\",\n \"storage_downloadCanceled\": \"ダウンロードをキャンセルしました\",\n \"storage_uploadFailedStatus\": \"アップロードに失敗しました(ステータス{status}): {statusText}\",\n \"storage_downloadFailedStatus\": \"ダウンロードに失敗しました(ステータス{status}): {statusText}\",\n \"storage_unknownError\": \"不明なエラー\",\n \"storage_saveFileFailed\": \"ファイルの保存に失敗しました\",\n \"storage_downloadDefaultFilename\": \"ダウンロード\",\n \"storage_pathTraversal\": \"パストラバーサル攻撃を検出しました\",\n \"storage_localNotInitialized\": \"ローカルストレージが初期化されていません\",\n \"storage_configError\": \"ストレージ設定の検証に失敗しました: {error}\",\n \"storage_metaFileAccess\": \"内部ファイルへの直接アクセスは許可されていません: {key}\",\n \"storage_fileAlreadyExists\": \"ファイルは既に存在します: {key}\",\n \"storage_checksumFailed\": \"チェックサムの計算に失敗しました\",\n \"storage_checksumInvalid\": \"チェックサムまたはアルゴリズムが無効です\",\n \"storage_streamInvalidChunk\": \"ファイルストリームにはバイトチャンクが必要です\",\n \"storage_sharedBackendRequired\": \"本番環境には共有バックエンドが必要です。ローカルファイルとメモリーバックエンドは開発環境または明示的な E2E テストでのみ使用できます。\"\n}\n","{\n \"$schema\": \"https://inlang.com/schema/inlang-message-format\",\n \"storage_notInitialized\": \"存储未初始化,请先调用 storage.init()\",\n \"storage_bucketNotExist\": \"存储桶不存在\",\n \"storage_networkError\": \"网络错误\",\n \"storage_responseBodyEmpty\": \"响应体为空\",\n \"storage_fileChanged\": \"文件正在更新,请重试\",\n \"storage_metadataRequired\": \"文件元数据缺失,请迁移数据或重新上传文件\",\n \"storage_metadataInvalid\": \"文件元数据损坏,请恢复完整备份或重新上传文件\",\n \"storage_presignUrlFailed\": \"生成签名 URL 失败\",\n \"storage_presignUploadUrlFailed\": \"生成上传签名 URL 失败\",\n \"storage_localPresignUnsupported\": \"本地存储不支持预签名 URL,请通过应用的鉴权文件接口上传或下载\",\n \"storage_listOptionsInvalid\": \"列表参数无效:maxKeys 必须为 1 到 1000 的整数,prefix 和 delimiter 必须为有效的 Unicode 字符串\",\n \"storage_listCursorInvalid\": \"列表游标无效或与当前根目录、前缀、分隔符不匹配\",\n \"storage_s3ConfigTypeError\": \"配置类型错误:S3 provider 仅支持 type=s3\",\n \"storage_diskSpaceInsufficient\": \"磁盘空间不足\",\n \"storage_localConfigTypeError\": \"配置类型错误:Local provider 仅支持 type=local\",\n \"storage_operationFailed\": \"操作失败: {error}\",\n \"storage_unsupportedType\": \"不支持的存储类型:{type}\",\n \"storage_config_bucketRequired\": \"存储桶不能为空\",\n \"storage_config_publicEndpointInvalid\": \"预签名访问地址必须是 HTTP(S) 地址,可包含代理目录;目录仅使用字母、数字、下划线、点和连字符,不能包含凭据、查询参数或片段。\",\n \"storage_config_regionRequired\": \"区域不能为空\",\n \"storage_config_accessKeyIdRequired\": \"Access Key ID 不能为空\",\n \"storage_config_secretAccessKeyRequired\": \"Secret Access Key 不能为空\",\n \"storage_config_rootRequired\": \"Root 不能为空\",\n \"storage_fileNotFound\": \"文件不存在: {key}\",\n \"storage_permissionDenied\": \"权限不足: {key}\",\n \"storage_pathIsDir\": \"路径是目录: {key}\",\n \"storage_ioError\": \"文件读写失败,请稍后重试\",\n \"storage_deleteManyFailed\": \"删除 {count} 个文件失败\",\n \"storage_s3ClientNotInitialized\": \"S3 客户端未初始化\",\n \"storage_s3ConfigNotInitialized\": \"S3 配置未初始化\",\n \"storage_uploadCanceled\": \"上传已取消\",\n \"storage_downloadCanceled\": \"下载已取消\",\n \"storage_uploadFailedStatus\": \"上传失败(状态码 {status}):{statusText}\",\n \"storage_downloadFailedStatus\": \"下载失败(状态码 {status}):{statusText}\",\n \"storage_unknownError\": \"未知错误\",\n \"storage_saveFileFailed\": \"保存文件失败\",\n \"storage_downloadDefaultFilename\": \"下载\",\n \"storage_pathTraversal\": \"检测到路径穿越攻击\",\n \"storage_localNotInitialized\": \"本地存储未初始化\",\n \"storage_configError\": \"存储配置校验失败:{error}\",\n \"storage_metaFileAccess\": \"不允许直接访问内部文件:{key}\",\n \"storage_fileAlreadyExists\": \"文件已存在:{key}\",\n \"storage_checksumFailed\": \"计算校验和失败\",\n \"storage_checksumInvalid\": \"校验和或算法不合法\",\n \"storage_streamInvalidChunk\": \"文件流必须包含字节块\",\n \"storage_sharedBackendRequired\": \"生产模式需要跨节点共享后端;本机文件或内存后端仅用于开发和显式端到端测试。\"\n}\n","/**\n * @h-ai/storage — i18n 消息获取器\n *\n * 加载存储模块的中英文翻译文件,提供统一的文案获取函数。\n * 内部使用,不对外导出。\n * @module storage-i18n\n */\n\nimport { core } from '@h-ai/core'\nimport messagesEnUS from '../messages/en-US.json'\nimport messagesJaJP from '../messages/ja-JP.json'\nimport messagesZhCN from '../messages/zh-CN.json'\n\n/**\n * 消息键类型(从 zh-CN 翻译文件自动推断)\n * @example 模块内部上下文\n * ```ts\n * const key: StorageMessageKey = 'storage_notInitialized'\n * void storageM(key)\n * ```\n */\ntype StorageMessageKey = keyof typeof messagesZhCN\n\n/**\n * 获取存储模块本地化文案\n *\n * 根据当前 locale 自动选择 zh-CN、en-US 或 ja-JP 的文案,\n * 支持带参数插值(通过 `{ params: { key: value } }`)。\n * @example 模块内部上下文\n * ```ts\n * void storageM('storage_notInitialized', { locale: 'en-US' })\n * ```\n */\nexport const storageM = core.i18n.createMessageGetter<StorageMessageKey>({\n 'zh-CN': messagesZhCN,\n 'en-US': messagesEnUS,\n 'ja-JP': messagesJaJP,\n})\n","/**\n * @h-ai/storage — MIME 类型映射\n *\n * 集中维护文件扩展名到 MIME 类型的映射表。 供 local provider 和 client 端共用,避免重复定义。\n * @module storage-mime\n */\n\n/**\n * 文件扩展名 → MIME 类型映射表\n *\n * 键为小写扩展名(不含点号),值为标准 MIME 类型字符串。\n * 未匹配项统一回退到 `application/octet-stream`。\n * @example 模块内部上下文\n * ```ts\n * const mime = MIME_TYPES['pdf'] ?? MIME_TYPE_DEFAULT\n * void mime\n * ```\n */\nexport const MIME_TYPES: Record<string, string> = {\n // 图片\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'png': 'image/png',\n 'gif': 'image/gif',\n 'webp': 'image/webp',\n 'svg': 'image/svg+xml',\n 'ico': 'image/x-icon',\n\n // 文档\n 'pdf': 'application/pdf',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'xls': 'application/vnd.ms-excel',\n 'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'ppt': 'application/vnd.ms-powerpoint',\n 'pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\n // 文本\n 'txt': 'text/plain',\n 'html': 'text/html',\n 'css': 'text/css',\n 'js': 'text/javascript',\n 'json': 'application/json',\n 'xml': 'application/xml',\n 'csv': 'text/csv',\n 'md': 'text/markdown',\n\n // 音视频\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'mp4': 'video/mp4',\n 'webm': 'video/webm',\n 'ogg': 'audio/ogg',\n\n // 压缩包\n 'zip': 'application/zip',\n 'rar': 'application/x-rar-compressed',\n '7z': 'application/x-7z-compressed',\n 'tar': 'application/x-tar',\n 'gz': 'application/gzip',\n\n // 字体\n 'woff': 'font/woff',\n 'woff2': 'font/woff2',\n 'ttf': 'font/ttf',\n 'otf': 'font/otf',\n}\n\n/**\n * MIME 类型默认值(未知扩展名回退)\n * @example 模块内部上下文\n * ```ts\n * void MIME_TYPE_DEFAULT // application/octet-stream\n * ```\n */\nexport const MIME_TYPE_DEFAULT = 'application/octet-stream'\n","/**\n * @h-ai/storage — 前端存储客户端\n *\n * 提供前端通过签名 URL 直接上传下载文件的功能。\n * @module storage-client\n */\n\nimport { storageM } from '../storage-i18n.js'\nimport { MIME_TYPE_DEFAULT, MIME_TYPES } from '../storage-mime.js'\n\n// ─── 客户端类型 ───\n\n/**\n * 上传进度回调数据\n *\n * 由 `uploadWithPresignedUrl` 在上传过程中通过 `onProgress` 回调返回。\n * @example\n * ```ts\n * import type { UploadProgress } from '@h-ai/storage'\n *\n * const value: UploadProgress = { loaded: 50, total: 100, percent: 50 }\n * void value\n * ```\n */\nexport interface UploadProgress {\n /** 已上传字节数 */\n loaded: number\n /** 总字节数(仅在 lengthComputable 时可靠) */\n total: number\n /** 进度百分比 (0–100),四舍五入到整数 */\n percent: number\n}\n\n/**\n * 前端上传选项\n *\n * 控制 `uploadWithPresignedUrl` 的行为,包括内容类型、进度监听和取消。\n * @example\n * ```ts\n * import type { ClientUploadOptions } from '@h-ai/storage'\n *\n * const value: ClientUploadOptions = { contentType: 'text/plain', onProgress: progress => { document.title = `${progress.percent}%` } }\n * void value\n * ```\n */\nexport interface ClientUploadOptions {\n /** 内容类型(设置后会加到请求 Content-Type 头) */\n contentType?: string\n /** 进度回调(设置后会使用 XMLHttpRequest;仅 lengthComputable=true 时回调) */\n onProgress?: (progress: UploadProgress) => void\n /** 取消上传;预取消不发送请求,进行中取消返回失败,完成后移除本次监听。取消不能撤销远端已写入对象。 */\n abortController?: AbortController\n}\n\n/**\n * 前端下载选项\n *\n * 控制 `downloadWithPresignedUrl` / `downloadAndSave` 的行为。\n * @example\n * ```ts\n * import type { ClientDownloadOptions } from '@h-ai/storage'\n *\n * const value: ClientDownloadOptions = { filename: 'report.pdf', abortController: new AbortController() }\n * void value\n * ```\n */\nexport interface ClientDownloadOptions {\n /** 保存的文件名(仅 downloadAndSave 使用,默认为 'download') */\n filename?: string\n /** AbortController 用于取消下载(abort 后返回 {success: false}) */\n abortController?: AbortController\n}\n\n// ─── 上传功能 ───\n\n/**\n * 使用签名 URL 上传文件\n *\n * @param url - 已成功获取的 S3 HTTP(S) 上传签名 URL;本地存储须使用应用的鉴权文件接口。\n * @param data - 要上传的数据(File、Blob、ArrayBuffer 或字符串)\n * @param options - 上传选项\n * @returns 上传结果;预取消不发送,进行中取消/网络失败/初始化异常结算为失败,终态移除本次监听。\n * 取消不代表远端对象已回滚;上传完成后的撤销由应用另行授权删除。\n * @example\n * ```ts\n * import { uploadWithPresignedUrl } from '@h-ai/storage/client'\n *\n * // url 由应用鉴权接口返回,且 S3 签名包含相同 Content-Type。\n * async function upload(url: string, file: File) {\n * const result = await uploadWithPresignedUrl(url, file, { contentType: file.type })\n * if (!result.success) throw new Error(result.error)\n * }\n * ```\n */\nexport async function uploadWithPresignedUrl(\n url: string,\n data: File | Blob | ArrayBuffer | string,\n options: ClientUploadOptions = {},\n): Promise<{ success: boolean, error?: string }> {\n try {\n const signal = options.abortController?.signal\n if (signal?.aborted) {\n return {\n success: false,\n error: storageM('storage_uploadCanceled'),\n }\n }\n\n // 准备请求体\n const body: BodyInit = data\n\n // 使用 XMLHttpRequest 以支持上传进度\n if (options.onProgress) {\n const xhr = new XMLHttpRequest()\n return new Promise((resolve) => {\n let settled = false\n\n /**\n * 所有终态共用一次结算,先移除XHR/上传/signal监听,迟到事件不能改变结果。\n * 后续调用跳过,完成后取消不会再触碰旧XHR。\n * @param result - 本次最终结果,不推断远端是否已写对象。\n * @param result.success - 是否已成功完成本地请求。\n * @param result.error - 可选失败说明。\n * @example 模块内部上下文\n * ```ts\n * finish({ success: false, error: storageM('storage_networkError') })\n * ```\n */\n function finish(result: { success: boolean, error?: string }): void {\n if (settled)\n return\n settled = true\n signal?.removeEventListener('abort', onCancel)\n xhr.upload.removeEventListener('progress', onProgress)\n xhr.removeEventListener('load', onLoad)\n xhr.removeEventListener('error', onError)\n xhr.removeEventListener('abort', onAbort)\n xhr.removeEventListener('timeout', onError)\n resolve(result)\n }\n\n function onAbort(): void {\n finish({\n success: false,\n error: storageM('storage_uploadCanceled'),\n })\n }\n\n /**\n * signal取消先主动结算再终止XHR,覆盖未send时abort不发事件的原生行为。\n * 调用方在准备流程中检查settled后停止发送。\n * @example 模块内部上下文\n * ```ts\n * onCancel()\n * // 后续准备阶段读取settled,不再执行xhr.send。\n * ```\n */\n function onCancel(): void {\n // 未 send 的 XHR.abort 不一定发 abort 事件,取消方必须主动结算。\n onAbort()\n xhr.abort()\n }\n\n function onError(): void {\n finish({\n success: false,\n error: storageM('storage_networkError'),\n })\n }\n\n function onLoad(): void {\n finish(xhr.status >= 200 && xhr.status < 300\n ? { success: true }\n : {\n success: false,\n error: storageM('storage_uploadFailedStatus', {\n params: { status: xhr.status, statusText: xhr.statusText },\n }),\n })\n }\n\n function onProgress(event: ProgressEvent): void {\n if (settled || !event.lengthComputable)\n return\n try {\n options.onProgress?.({\n loaded: event.loaded,\n total: event.total,\n percent: Math.round((event.loaded / event.total) * 100),\n })\n }\n catch (error) {\n finish({\n success: false,\n error: error instanceof Error\n ? error.message\n : storageM('storage_unknownError'),\n })\n xhr.abort()\n }\n }\n\n try {\n xhr.upload.addEventListener('progress', onProgress)\n xhr.addEventListener('load', onLoad)\n xhr.addEventListener('error', onError)\n xhr.addEventListener('abort', onAbort)\n xhr.addEventListener('timeout', onError)\n signal?.addEventListener('abort', onCancel, { once: true })\n xhr.open('PUT', url)\n if (settled)\n return\n if (options.contentType)\n xhr.setRequestHeader('Content-Type', options.contentType)\n // 覆盖从预检查到监听安装/请求准备之间发生的取消,不再进入 send。\n if (signal?.aborted) {\n onCancel()\n return\n }\n xhr.send(body)\n }\n catch (error) {\n finish({\n success: false,\n error: error instanceof Error\n ? error.message\n : storageM('storage_unknownError'),\n })\n xhr.abort()\n }\n })\n }\n\n // 不需要进度时使用 fetch\n const response = await fetch(url, {\n method: 'PUT',\n body,\n headers: options.contentType\n ? { 'Content-Type': options.contentType }\n : undefined,\n signal,\n })\n\n if (!response.ok) {\n return {\n success: false,\n error: storageM('storage_uploadFailedStatus', {\n params: { status: response.status, statusText: response.statusText },\n }),\n }\n }\n\n return { success: true }\n }\n catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n return {\n success: false,\n error: storageM('storage_uploadCanceled'),\n }\n }\n return {\n success: false,\n error: error instanceof Error\n ? error.message\n : storageM('storage_unknownError'),\n }\n }\n}\n\n// ─── 下载功能 ───\n\n/**\n * 使用签名 URL 下载文件\n *\n * @param url - 后端生成的下载签名 URL\n * @param options - 下载选项\n * @returns 下载结果(成功时 data 为 Blob)\n * @example\n * ```ts\n * import { downloadWithPresignedUrl } from '@h-ai/storage/client'\n *\n * async function download(url: string) {\n * const result = await downloadWithPresignedUrl(url)\n * if (!result.success || !result.data) throw new Error(result.error ?? 'Empty download')\n * return result.data\n * }\n * ```\n */\nexport async function downloadWithPresignedUrl(\n url: string,\n options: ClientDownloadOptions = {},\n): Promise<{ success: boolean, data?: Blob, error?: string }> {\n try {\n const response = await fetch(url, {\n method: 'GET',\n signal: options.abortController?.signal,\n })\n\n if (!response.ok) {\n return {\n success: false,\n error: storageM('storage_downloadFailedStatus', {\n params: { status: response.status, statusText: response.statusText },\n }),\n }\n }\n\n const blob = await response.blob()\n return { success: true, data: blob }\n }\n catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n return {\n success: false,\n error: storageM('storage_downloadCanceled'),\n }\n }\n return {\n success: false,\n error: error instanceof Error\n ? error.message\n : storageM('storage_unknownError'),\n }\n }\n}\n\n/**\n * 下载并保存到本地(浏览器环境)\n *\n * @param url - 下载 URL\n * @param options - 下载选项\n * @returns 声明返回类型对应的操作结果。\n * @example\n * ```ts\n * import { downloadAndSave } from '@h-ai/storage/client'\n *\n * async function save(url: string) {\n * const result = await downloadAndSave(url, { filename: 'report.pdf' })\n * if (!result.success) throw new Error(result.error)\n * }\n * ```\n */\nexport async function downloadAndSave(\n url: string,\n options: ClientDownloadOptions = {},\n): Promise<{ success: boolean, error?: string }> {\n const result = await downloadWithPresignedUrl(url, options)\n\n if (!result.success || !result.data) {\n return { success: false, error: result.error }\n }\n\n try {\n // 创建下载链接\n const blobUrl = URL.createObjectURL(result.data)\n const link = document.createElement('a')\n link.href = blobUrl\n link.download = options.filename || storageM('storage_downloadDefaultFilename')\n\n // 触发下载\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n\n // 清理 URL\n URL.revokeObjectURL(blobUrl)\n\n return { success: true }\n }\n catch (error) {\n return {\n success: false,\n error: error instanceof Error\n ? error.message\n : storageM('storage_saveFileFailed'),\n }\n }\n}\n\n// ─── 辅助功能 ───\n\n/**\n * 从 File 对象获取文件扩展名\n *\n * 取文件名中最后一个 '.' 之后的部分,转为小写。\n * 没有点号或以点号结尾时返回空字符串;仅前导点号的文件名按其后文本返回扩展名。\n *\n * @param file - 浏览器 File 对象\n * @returns 扩展名(不含点),如 'png'、'tar.gz' 返回 'gz'\n * @example\n * ```ts\n * import { getFileExtension } from '@h-ai/storage/client'\n *\n * const extension = getFileExtension(new File(['hello'], 'report.txt'))\n * void extension\n * ```\n */\nexport function getFileExtension(file: File): string {\n const name = file.name\n const lastDot = name.lastIndexOf('.')\n return lastDot > -1\n ? name.slice(lastDot + 1).toLowerCase()\n : ''\n}\n\n/**\n * 根据文件扩展名获取 MIME 类型\n *\n * 内置常见扩展名映射(图片/文档/文本/音视频/压缩包),\n * 未匹配时返回 'application/octet-stream'。\n *\n * @param extension - 文件扩展名(不含点,大小写不敏感)\n * @returns MIME 类型字符串\n * @example\n * ```ts\n * import { getMimeType } from '@h-ai/storage/client'\n *\n * const mime = getMimeType('pdf')\n * void mime\n * ```\n */\nexport function getMimeType(extension: string): string {\n return MIME_TYPES[extension.toLowerCase()] || MIME_TYPE_DEFAULT\n}\n\n/**\n * 格式化文件大小为人类可读字符串\n *\n * 使用 1024 进制,输出单位为 B/KB/MB/GB/TB。\n * 非零值使用对应单位并保留 2 位小数。\n *\n * @param bytes - 字节数(非负整数)\n * @returns 格式化后的字符串,如 '0 B'、'1.50 KB'、'2.30 MB'\n * @example\n * ```ts\n * import { formatFileSize } from '@h-ai/storage/client'\n *\n * void formatFileSize(1536)\n * ```\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0)\n return '0 B'\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB']\n const i = Math.floor(Math.log(bytes) / Math.log(1024))\n const size = bytes / 1024 ** i\n\n return `${size.toFixed(i > 0\n ? 2\n : 0)} ${units[i]}`\n}\n"]}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -178,4 +178,5 @@ declare function getMimeType(extension: string): string;
|
|
|
178
178
|
*/
|
|
179
179
|
declare function formatFileSize(bytes: number): string;
|
|
180
180
|
|
|
181
|
-
export {
|
|
181
|
+
export { downloadAndSave, downloadWithPresignedUrl, formatFileSize, getFileExtension, getMimeType, uploadWithPresignedUrl };
|
|
182
|
+
export type { ClientDownloadOptions, ClientUploadOptions, UploadProgress };
|
package/dist/client/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { downloadAndSave, downloadWithPresignedUrl, formatFileSize, getFileExtension, getMimeType, uploadWithPresignedUrl } from '../chunk-
|
|
1
|
+
export { downloadAndSave, downloadWithPresignedUrl, formatFileSize, getFileExtension, getMimeType, uploadWithPresignedUrl } from '../chunk-JAJYHGLI.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|