dl-once 0.0.1 → 0.0.2
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 +21 -0
- package/README.md +128 -28
- package/dist/_bytes-builder.d.ts +34 -0
- package/dist/_bytes-builder.d.ts.map +1 -0
- package/dist/_bytes-builder.js +48 -0
- package/dist/cache-storage.d.ts +74 -0
- package/dist/cache-storage.d.ts.map +1 -0
- package/dist/cache-storage.js +1 -0
- package/dist/dl-once.d.ts +242 -0
- package/dist/dl-once.d.ts.map +1 -0
- package/dist/dl-once.js +245 -0
- package/dist/hash-verification-hook.d.ts +46 -0
- package/dist/hash-verification-hook.d.ts.map +1 -0
- package/dist/hash-verification-hook.js +97 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/indexeddb-cache-storage.d.ts +51 -0
- package/dist/indexeddb-cache-storage.d.ts.map +1 -0
- package/dist/indexeddb-cache-storage.js +573 -0
- package/dist/md5-verification-hook.d.ts +15 -0
- package/dist/md5-verification-hook.d.ts.map +1 -0
- package/dist/md5-verification-hook.js +17 -0
- package/dist/memory-cache-storage.d.ts +41 -0
- package/dist/memory-cache-storage.d.ts.map +1 -0
- package/dist/memory-cache-storage.js +290 -0
- package/dist/node-fs-cache-storage.d.ts +63 -0
- package/dist/node-fs-cache-storage.d.ts.map +1 -0
- package/dist/node-fs-cache-storage.js +565 -0
- package/dist/sha256-verification-hook.d.ts +15 -0
- package/dist/sha256-verification-hook.d.ts.map +1 -0
- package/dist/sha256-verification-hook.js +17 -0
- package/package.json +46 -7
- package/src/_bytes-builder.ts +66 -0
- package/src/cache-storage.ts +86 -0
- package/src/dl-once.ts +554 -0
- package/src/hash-verification-hook.ts +98 -0
- package/src/index.ts +28 -0
- package/src/indexeddb-cache-storage.ts +535 -0
- package/src/md5-verification-hook.ts +18 -0
- package/src/memory-cache-storage.ts +361 -0
- package/src/node-fs-cache-storage.ts +511 -0
- package/src/sha256-verification-hook.ts +18 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026-present, tai-kun
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,45 +1,145 @@
|
|
|
1
1
|
# dl-once
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`dl-once` は、リソースを「一度だけ、確実に」取得するための TypeScript/JavaScript ライブラリです。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
ネットワークの不安定さへの耐性、多層的なキャッシュ制御、そして詳細なライフサイクルフックを提供し、複雑なダウンロード要件をシンプルに解決します。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 主な特徴
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
* **キャッシュファースト**: ネットワーク取得の前にキャッシュ(IndexedDB、ファイルシステム 等)を確認し、無駄な通信を抑制します。
|
|
10
|
+
* **マルチターゲット・フォールバック**: 複数の URL を指定可能。1つ目の取得に失敗しても、自動的に次のミラーサイトやバックアップ URL を試行します。
|
|
11
|
+
* **ストリーム処理**: メモリ効率を重視。レスポンスをチャンクごとに処理し、読み込みながら同時にキャッシュへの書き出しを行います。
|
|
12
|
+
* **強力なフックシステム**: 開始前、データ受信中、完了、エラーの各フェーズに独自のロジックを注入できます。
|
|
13
|
+
* **中断(Abort)の完全サポート**: `AbortSignal` により、処理を安全かつ即座に停止し、リソースを解放します。
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
1. Configure OIDC trusted publishing for the package name `dl-once`
|
|
13
|
-
2. Enable secure, token-less publishing from CI/CD workflows
|
|
14
|
-
3. Establish provenance for packages published under this name
|
|
15
|
+
## インストール
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
```bash
|
|
18
|
+
npm install dl-once
|
|
19
|
+
```
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
## 基本的な使い方
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
最もシンプルな使い方は、URL を渡して `Uint8Array` を受け取る方法です。
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
```typescript
|
|
26
|
+
import downloadOnce from "dl-once";
|
|
23
27
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
4. Use the configured workflow to publish your actual package
|
|
28
|
+
const data = await downloadOnce("https://example.com/assets/config.bin");
|
|
29
|
+
console.log(`取得サイズ: ${data.length} bytes`);
|
|
30
|
+
```
|
|
28
31
|
|
|
29
|
-
##
|
|
32
|
+
## 高度な設定例(1)
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
- Contains no executable code
|
|
33
|
-
- Provides no functionality
|
|
34
|
-
- Should not be installed as a dependency
|
|
35
|
-
- Exists only for administrative purposes
|
|
34
|
+
キャッシュ、検証を組み合わせる例です。
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
```typescript
|
|
37
|
+
import {
|
|
38
|
+
downloadOnce, // メインの関数です。
|
|
39
|
+
IndexedDbCacheStorage, // ブラウザーで IndexedDB にキャッシュするためのストレージクラスです。
|
|
40
|
+
NodeFsCacheStorage, // Node.js でファイルにキャッシュするためのストレージクラスです。
|
|
41
|
+
Sha256VerificationHook, // 期待する SHA-256 ハッシュ値であるか検証するためのフッククラスです。
|
|
42
|
+
} from "dl-once";
|
|
38
43
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
await using cacheStorage = typeof document !== "undefined"
|
|
45
|
+
? new IndexedDbCacheStorage("dl-once-db-name")
|
|
46
|
+
: new NodeFsCacheStorage("/tmp/dl-once-cache");
|
|
47
|
+
await cacheStorage.open();
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
const data = downloadOnce(["https://example.com/data"], {
|
|
50
|
+
// キャッシュの制御
|
|
51
|
+
cacheHandle: cacheStorage.createCacheHandle(),
|
|
44
52
|
|
|
45
|
-
|
|
53
|
+
// ライフサイクルフック
|
|
54
|
+
hooks: [
|
|
55
|
+
new Sha256VerificationHook("..."),
|
|
56
|
+
],
|
|
57
|
+
|
|
58
|
+
// 中断制御
|
|
59
|
+
signal: AbortSignal.timeout(30e3) // 30 秒タイムアウト
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 高度な設定例(2)
|
|
64
|
+
|
|
65
|
+
キャッシュ、カスタムフェッチャー、および進捗確認用のフックを組み合わせる例です。
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import downloadOnce from "dl-once";
|
|
69
|
+
|
|
70
|
+
const data = await downloadOnce(
|
|
71
|
+
// 1つ目が失敗したら2つ目を試行
|
|
72
|
+
["https://primary.example.com/data", "https://backup.example.com/data"],
|
|
73
|
+
{
|
|
74
|
+
// キャッシュの制御
|
|
75
|
+
cacheHandle: myCustomCacheHandle,
|
|
76
|
+
forceDownload: false,
|
|
77
|
+
|
|
78
|
+
// ライフサイクルフック
|
|
79
|
+
hooks: [{
|
|
80
|
+
onBeforeDownload({ request }) {
|
|
81
|
+
console.log(`開始: ${request.url}`);
|
|
82
|
+
},
|
|
83
|
+
onChunkRead({ chunkData }) {
|
|
84
|
+
console.log(`${chunkData.length} bytes を受信`);
|
|
85
|
+
},
|
|
86
|
+
onClose() {
|
|
87
|
+
console.log("ダウンロード完了!");
|
|
88
|
+
},
|
|
89
|
+
onError({ reason }) {
|
|
90
|
+
console.error("エラーが発生しました:", reason);
|
|
91
|
+
}
|
|
92
|
+
}],
|
|
93
|
+
|
|
94
|
+
// 中断制御
|
|
95
|
+
signal: AbortSignal.timeout(30e3) // 30 秒タイムアウト
|
|
96
|
+
}
|
|
97
|
+
);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## API リファレンス
|
|
101
|
+
|
|
102
|
+
### `downloadOnce(target, options?)`
|
|
103
|
+
|
|
104
|
+
#### `target`
|
|
105
|
+
|
|
106
|
+
取得対象を指定します。以下のいずれか、またはその配列を受け取ります。
|
|
107
|
+
|
|
108
|
+
* `string` | `URL` | `Request`: リソースの場所。
|
|
109
|
+
* `() => MaybePromise<PrimitiveTarget>`: 実行時に URL を生成する関数。
|
|
110
|
+
* `Config`: 個別の設定(`target`, `hooks`, `fetcher` 等)を含むオブジェクト。
|
|
111
|
+
|
|
112
|
+
#### `options`
|
|
113
|
+
|
|
114
|
+
全体的な動作を制御するオプションです。
|
|
115
|
+
|
|
116
|
+
* `cacheHandle`: キャッシュの読み書きを管理するインターフェース。
|
|
117
|
+
* `forceDownload`: `true` の場合、キャッシュを無視してネットワークから取得します。
|
|
118
|
+
* `hooks`: グローバルに適用されるフック関数の配列。
|
|
119
|
+
* `fetcher`: カスタムの HTTP リクエスト実行関数(デフォルトは `fetch`)。
|
|
120
|
+
* `signal`: 処理全体を中断するための `AbortSignal`。
|
|
121
|
+
|
|
122
|
+
## インターフェースの拡張
|
|
123
|
+
|
|
124
|
+
### キャッシュの実装 (`ICacheHandle`)
|
|
125
|
+
|
|
126
|
+
独自のキャッシュ機構(例:ブラウザの Cache Storage や Node.js のファイルシステム)を利用するには、`ICacheHandle` を実装します。
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
const myCache: ICacheHandle = {
|
|
130
|
+
async getReader({ signal }) {
|
|
131
|
+
// キャッシュがあれば AsyncIterableIterator を返す、なければ null
|
|
132
|
+
},
|
|
133
|
+
async getWriter({ response, request }) {
|
|
134
|
+
// IWriter (write, close, abort) を実装したオブジェクトを返す
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### フックの実装 (`IHook`)
|
|
140
|
+
|
|
141
|
+
ダウンロードの進捗表示やログ記録などに利用できます。特定のフックがエラーを投げても、ライブラリ本体の処理は継続されるよう設計されています(`onClose` を除く)。
|
|
142
|
+
|
|
143
|
+
## ライセンス
|
|
144
|
+
|
|
145
|
+
MIT
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Uint8Array` のチャンクを効率的に積み上げ、最終的に一つのバイナリーデータとして結合するためのビルダー形式のクラスです。
|
|
3
|
+
*/
|
|
4
|
+
export default class BytesBuilder {
|
|
5
|
+
/**
|
|
6
|
+
* 書き込まれたバイナリーデータのチャンクを保持する配列です。
|
|
7
|
+
* @private
|
|
8
|
+
*/
|
|
9
|
+
private chunks;
|
|
10
|
+
/**
|
|
11
|
+
* 現在までに書き込まれた全データの合計バイト長です。
|
|
12
|
+
* @private
|
|
13
|
+
*/
|
|
14
|
+
private length;
|
|
15
|
+
/**
|
|
16
|
+
* `BytesBuilder` クラスの新しいインスタンスを初期化します。
|
|
17
|
+
*/
|
|
18
|
+
constructor();
|
|
19
|
+
/**
|
|
20
|
+
* 新しいバイナリーデータをチャンクとして追加します。
|
|
21
|
+
*
|
|
22
|
+
* @param data 追加する `Uint8Array` 形式のデータです。
|
|
23
|
+
*/
|
|
24
|
+
write(data: Uint8Array<ArrayBuffer>): void;
|
|
25
|
+
/**
|
|
26
|
+
* 現在保持しているすべてのチャンクを結合して、一つの `Uint8Array` として返します。
|
|
27
|
+
*
|
|
28
|
+
* このメソッドを呼び出すと、内部のチャンクと長さの情報はリセットされます。
|
|
29
|
+
*
|
|
30
|
+
* @returns 結合されたすべてのデータを含む `Uint8Array` です。
|
|
31
|
+
*/
|
|
32
|
+
bytes(): Uint8Array<ArrayBuffer>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=_bytes-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_bytes-builder.d.ts","sourceRoot":"","sources":["../src/_bytes-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAA4B;IAE1C;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAS;IAEvB;;OAEG;;IAOH;;;;OAIG;IACI,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI;IAMjD;;;;;;OAMG;IACI,KAAK,IAAI,UAAU,CAAC,WAAW,CAAC;CAsBxC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Uint8Array` のチャンクを効率的に積み上げ、最終的に一つのバイナリーデータとして結合するためのビルダー形式のクラスです。
|
|
3
|
+
*/
|
|
4
|
+
export default class BytesBuilder {
|
|
5
|
+
/**
|
|
6
|
+
* `BytesBuilder` クラスの新しいインスタンスを初期化します。
|
|
7
|
+
*/
|
|
8
|
+
constructor() {
|
|
9
|
+
// 内部状態を初期化します。
|
|
10
|
+
this.chunks = [];
|
|
11
|
+
this.length = 0;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 新しいバイナリーデータをチャンクとして追加します。
|
|
15
|
+
*
|
|
16
|
+
* @param data 追加する `Uint8Array` 形式のデータです。
|
|
17
|
+
*/
|
|
18
|
+
write(data) {
|
|
19
|
+
// チャンク配列にデータを追加し、全体の長さを更新します。
|
|
20
|
+
this.chunks.push(data);
|
|
21
|
+
this.length += data.length;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 現在保持しているすべてのチャンクを結合して、一つの `Uint8Array` として返します。
|
|
25
|
+
*
|
|
26
|
+
* このメソッドを呼び出すと、内部のチャンクと長さの情報はリセットされます。
|
|
27
|
+
*
|
|
28
|
+
* @returns 結合されたすべてのデータを含む `Uint8Array` です。
|
|
29
|
+
*/
|
|
30
|
+
bytes() {
|
|
31
|
+
// 全体の長さに合わせた新しいバッファーを確保します。
|
|
32
|
+
const bytes = new Uint8Array(this.length);
|
|
33
|
+
// 書き込み位置を管理するためのオフセット変数です。
|
|
34
|
+
let offset = 0;
|
|
35
|
+
// 保持している各チャンクを、作成したバッファーの適切な位置にコピーしていきます。
|
|
36
|
+
for (const data of this.chunks) {
|
|
37
|
+
// 指定したオフセットからデータをセットします。
|
|
38
|
+
bytes.set(data, offset);
|
|
39
|
+
// 次のチャンクのためにオフセットを更新します。
|
|
40
|
+
offset += data.length;
|
|
41
|
+
}
|
|
42
|
+
// 次回の書き込みに備えて、内部の状態(チャンク配列と合計長)をリセットします。
|
|
43
|
+
this.chunks = [];
|
|
44
|
+
this.length = 0;
|
|
45
|
+
// 結合済みのバイナリーデータを返します。
|
|
46
|
+
return bytes;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { ICacheHandle, MaybePromise } from "./dl-once.js";
|
|
2
|
+
/**
|
|
3
|
+
* ストレージを開始する際に渡せるオプションの型定義です。
|
|
4
|
+
*/
|
|
5
|
+
export type OpenOptions = {
|
|
6
|
+
/**
|
|
7
|
+
* 中断を監視するためのシグナルです。
|
|
8
|
+
*/
|
|
9
|
+
readonly signal?: AbortSignal | undefined;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* ストレージを終了する際に渡せるオプションの型定義です。
|
|
13
|
+
*/
|
|
14
|
+
export type CloseOptions = {
|
|
15
|
+
/**
|
|
16
|
+
* 中断を監視するためのシグナルです。
|
|
17
|
+
*/
|
|
18
|
+
readonly signal?: AbortSignal | undefined;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* ストレージをクリアする際に渡せるオプションの型定義です。
|
|
22
|
+
*/
|
|
23
|
+
export type ClearOptions = {
|
|
24
|
+
/**
|
|
25
|
+
* キャッシュを一意に識別する文字列です。
|
|
26
|
+
*/
|
|
27
|
+
readonly cacheKey?: string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* 中断を監視するためのシグナルです。
|
|
30
|
+
*/
|
|
31
|
+
readonly signal?: AbortSignal | undefined;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* データキャッシュを管理するストレージのインターフェースです。
|
|
35
|
+
*/
|
|
36
|
+
export interface ICacheStorage {
|
|
37
|
+
/**
|
|
38
|
+
* ストレージが現在開いているかどうかを返します。
|
|
39
|
+
*/
|
|
40
|
+
readonly isOpen: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* ストレージを開き、利用可能な状態にします。
|
|
43
|
+
*
|
|
44
|
+
* @param options オプションです。
|
|
45
|
+
*/
|
|
46
|
+
open(options?: OpenOptions | undefined): MaybePromise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* ストレージを閉じ、すべてのキャッシュデータを破棄します。
|
|
49
|
+
*
|
|
50
|
+
* @param options オプションです。
|
|
51
|
+
*/
|
|
52
|
+
close(options?: CloseOptions | undefined): MaybePromise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* キャッシュをクリアします。引数が指定された場合はそのキーのみ、指定されない場合は全てのキャッシュを削除します。
|
|
55
|
+
*
|
|
56
|
+
* @param cacheKey キャッシュを一意に識別する文字列です。
|
|
57
|
+
* @param options オプションです。
|
|
58
|
+
*/
|
|
59
|
+
clear(cacheKey?: string | undefined, options?: Omit<ClearOptions, "cacheKey"> | undefined): MaybePromise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* キャッシュをクリアします。引数が指定された場合はそのキーのみ、指定されない場合は全てのキャッシュを削除します。
|
|
62
|
+
*
|
|
63
|
+
* @param options オプションです。
|
|
64
|
+
*/
|
|
65
|
+
clear(options?: ClearOptions | undefined): MaybePromise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* 指定したキーに対応するキャッシュハンドルを取得、または新規作成します。
|
|
68
|
+
*
|
|
69
|
+
* @param key キャッシュを一意に識別する文字列です。
|
|
70
|
+
* @returns ICacheHandle を実装したオブジェクトを返します。
|
|
71
|
+
*/
|
|
72
|
+
createCacheHandle(key: string): ICacheHandle;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=cache-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-storage.d.ts","sourceRoot":"","sources":["../src/cache-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAE5D;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAE9D;;;;;OAKG;IACH,KAAK,CACH,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,SAAS,GACnD,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtB;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAE9D;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC;CAC9C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 同期的な値、または Promise ライクな値を表す型です。
|
|
3
|
+
*
|
|
4
|
+
* @template T 解決される値の型です。
|
|
5
|
+
*/
|
|
6
|
+
export type MaybePromise<T> = T | PromiseLike<T>;
|
|
7
|
+
/**
|
|
8
|
+
* ダウンロード開始前に実行されるハンドラーに渡される引数の型定義です。
|
|
9
|
+
*/
|
|
10
|
+
export type BeforeDownloadHandlerArgs = {
|
|
11
|
+
/**
|
|
12
|
+
* 実行されるリクエストオブジェクトです。
|
|
13
|
+
*/
|
|
14
|
+
request: Request;
|
|
15
|
+
/**
|
|
16
|
+
* 中断を監視するためのシグナルです。
|
|
17
|
+
*/
|
|
18
|
+
signal: AbortSignal;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* データのチャンクが読み込まれた際に実行されるハンドラーに渡される引数の型定義です。
|
|
22
|
+
*/
|
|
23
|
+
export type ChunkReadHandlerArgs = {
|
|
24
|
+
/**
|
|
25
|
+
* 読み込まれたバイナリーデータです。
|
|
26
|
+
*/
|
|
27
|
+
chunkData: Uint8Array<ArrayBuffer>;
|
|
28
|
+
/**
|
|
29
|
+
* サーバーからのレスポンスオブジェクトです。
|
|
30
|
+
*/
|
|
31
|
+
response: Response;
|
|
32
|
+
/**
|
|
33
|
+
* 中断を監視するためのシグナルです。
|
|
34
|
+
*/
|
|
35
|
+
signal: AbortSignal;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* 処理が正常に終了した際に実行されるハンドラーに渡される引数の型定義です。
|
|
39
|
+
*/
|
|
40
|
+
export type CloseHandlerArgs = {
|
|
41
|
+
/**
|
|
42
|
+
* 中断を監視するためのシグナルです。
|
|
43
|
+
*/
|
|
44
|
+
signal: AbortSignal;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* エラーが発生した際に実行されるハンドラーに渡される引数の型定義です。
|
|
48
|
+
*/
|
|
49
|
+
export type ErrorHandlerArgs = {
|
|
50
|
+
/**
|
|
51
|
+
* エラーの原因となったオブジェクトです。
|
|
52
|
+
*/
|
|
53
|
+
reason: unknown;
|
|
54
|
+
/**
|
|
55
|
+
* 中断を監視するためのシグナルです。
|
|
56
|
+
*/
|
|
57
|
+
signal: AbortSignal;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* ダウンロードの各フェーズで実行されるフック関数のインターフェースです。
|
|
61
|
+
*/
|
|
62
|
+
export interface IHook {
|
|
63
|
+
/**
|
|
64
|
+
* ダウンロード開始前に呼び出されます。
|
|
65
|
+
*/
|
|
66
|
+
onBeforeDownload?(args: BeforeDownloadHandlerArgs): MaybePromise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* チャンクデータが読み込まれるたびに呼び出されます。
|
|
69
|
+
*/
|
|
70
|
+
onChunkRead?(args: ChunkReadHandlerArgs): MaybePromise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* 正常終了時に呼び出されます。
|
|
73
|
+
*/
|
|
74
|
+
onClose?(args: CloseHandlerArgs): MaybePromise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* エラー発生時に呼び出されます。
|
|
77
|
+
*/
|
|
78
|
+
onError?(args: ErrorHandlerArgs): MaybePromise<void>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* キャッシュリーダーを取得する際に渡される引数の型定義です。
|
|
82
|
+
*/
|
|
83
|
+
export type GetReaderArgs = {
|
|
84
|
+
/**
|
|
85
|
+
* 中断を監視するためのシグナルです。
|
|
86
|
+
*/
|
|
87
|
+
signal: AbortSignal;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* キャッシュからデータを読み出すためのリーダー型です。
|
|
91
|
+
*
|
|
92
|
+
* 同期または非同期の反復子として定義されます。
|
|
93
|
+
*/
|
|
94
|
+
export type IReader = IterableIterator<Uint8Array<ArrayBuffer>> | AsyncIterableIterator<Uint8Array<ArrayBuffer>>;
|
|
95
|
+
/**
|
|
96
|
+
* キャッシュライターを取得する際に渡される引数の型定義です。
|
|
97
|
+
*/
|
|
98
|
+
export type GetWriterArgs = {
|
|
99
|
+
/**
|
|
100
|
+
* サーバーからのレスポンスオブジェクトです。
|
|
101
|
+
*/
|
|
102
|
+
response: Response;
|
|
103
|
+
/**
|
|
104
|
+
* 実行されたリクエストオブジェクトです。
|
|
105
|
+
*/
|
|
106
|
+
request: Request;
|
|
107
|
+
/**
|
|
108
|
+
* 中断を監視するためのシグナルです。
|
|
109
|
+
*/
|
|
110
|
+
signal: AbortSignal;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* キャッシュへデータを書き込むためのインターフェースです。
|
|
114
|
+
*/
|
|
115
|
+
export interface IWriter {
|
|
116
|
+
/**
|
|
117
|
+
* チャンクデータを書き込みます。
|
|
118
|
+
*/
|
|
119
|
+
write(chunkData: Uint8Array<ArrayBuffer>): MaybePromise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* 書き込みを完了し、リソースを閉じます。
|
|
122
|
+
*/
|
|
123
|
+
close(): MaybePromise<void>;
|
|
124
|
+
/**
|
|
125
|
+
* 書き込みを中断します。
|
|
126
|
+
*/
|
|
127
|
+
abort(reason: unknown): MaybePromise<void>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* キャッシュの読み書きを管理するハンドルのインターフェースです。
|
|
131
|
+
*/
|
|
132
|
+
export interface ICacheHandle {
|
|
133
|
+
/**
|
|
134
|
+
* 指定された条件でキャッシュリーダーを取得します。存在しない場合は null を返します。
|
|
135
|
+
*/
|
|
136
|
+
getReader(args: GetReaderArgs): MaybePromise<IReader | null>;
|
|
137
|
+
/**
|
|
138
|
+
* 書き込み用のライターを取得します。
|
|
139
|
+
*/
|
|
140
|
+
getWriter(args: GetWriterArgs): MaybePromise<IWriter>;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* フェッチャーに渡される初期化オプションの型定義です。
|
|
144
|
+
*/
|
|
145
|
+
export type FetcherRequestInit = {
|
|
146
|
+
/**
|
|
147
|
+
* 中断を監視するためのシグナルです。
|
|
148
|
+
*/
|
|
149
|
+
readonly signal: AbortSignal;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* カスタムの HTTP リクエスト実行関数の型定義です。
|
|
153
|
+
*/
|
|
154
|
+
export interface IFetcher {
|
|
155
|
+
/**
|
|
156
|
+
* HTTP リクエストを実行し、レスポンスを返します。
|
|
157
|
+
*
|
|
158
|
+
* @param request リクエストオブジェクトです。
|
|
159
|
+
* @param init 初期化オプションです。
|
|
160
|
+
* @returns レスポンスまたはそれを解決する Promise です。
|
|
161
|
+
*/
|
|
162
|
+
(request: Request, init: FetcherRequestInit | undefined): MaybePromise<Response>;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* 単一のリクエストターゲットを表すプリミティブな型です。
|
|
166
|
+
*/
|
|
167
|
+
export type PrimitiveTarget = string | URL | Request;
|
|
168
|
+
/**
|
|
169
|
+
* 動的にリクエストターゲットを生成するファクトリー関数の型定義です。
|
|
170
|
+
*/
|
|
171
|
+
export interface ITargetFactory {
|
|
172
|
+
(): MaybePromise<PrimitiveTarget>;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* 解決可能なターゲットの型定義です。
|
|
176
|
+
*/
|
|
177
|
+
export type Target = PrimitiveTarget | ITargetFactory;
|
|
178
|
+
/**
|
|
179
|
+
* JavaScript における Falsy な値の型定義です。
|
|
180
|
+
*/
|
|
181
|
+
export type Falsy = 0 | "" | false | null | undefined;
|
|
182
|
+
/**
|
|
183
|
+
* 個別のダウンロード設定を定義する型です。
|
|
184
|
+
*/
|
|
185
|
+
export type Config = {
|
|
186
|
+
/**
|
|
187
|
+
* ダウンロード対象のターゲットです。
|
|
188
|
+
*/
|
|
189
|
+
readonly target: Target;
|
|
190
|
+
/**
|
|
191
|
+
* 使用するキャッシュハンドルです。
|
|
192
|
+
*/
|
|
193
|
+
readonly cacheHandle?: ICacheHandle | undefined;
|
|
194
|
+
/**
|
|
195
|
+
* キャッシュを無視して強制的にダウンロードするかどうかのフラグです。
|
|
196
|
+
*/
|
|
197
|
+
readonly forceDownload?: boolean | undefined;
|
|
198
|
+
/**
|
|
199
|
+
* 適用されるフックのリストです。
|
|
200
|
+
*/
|
|
201
|
+
readonly hooks?: readonly (IHook | Falsy)[] | undefined;
|
|
202
|
+
/**
|
|
203
|
+
* 使用するカスタムフェッチャーです。
|
|
204
|
+
*/
|
|
205
|
+
readonly fetcher?: IFetcher | undefined;
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* 全体的なダウンロード動作を制御するオプションの型定義です。
|
|
209
|
+
*/
|
|
210
|
+
export type Options = {
|
|
211
|
+
/**
|
|
212
|
+
* デフォルトで使用するキャッシュハンドルです。
|
|
213
|
+
*/
|
|
214
|
+
readonly cacheHandle?: ICacheHandle | undefined;
|
|
215
|
+
/**
|
|
216
|
+
* デフォルトでキャッシュを無視するかどうかのフラグです。
|
|
217
|
+
*/
|
|
218
|
+
readonly forceDownload?: boolean | undefined;
|
|
219
|
+
/**
|
|
220
|
+
* グローバルに適用されるフックのリストです。
|
|
221
|
+
*/
|
|
222
|
+
readonly hooks?: readonly (IHook | Falsy)[] | undefined;
|
|
223
|
+
/**
|
|
224
|
+
* デフォルトで使用するフェッチャーです。
|
|
225
|
+
*/
|
|
226
|
+
readonly fetcher?: IFetcher | undefined;
|
|
227
|
+
/**
|
|
228
|
+
* 処理全体の中断を管理するシグナルです。
|
|
229
|
+
*/
|
|
230
|
+
readonly signal?: AbortSignal | undefined;
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* 指定されたターゲットからデータを一度だけダウンロードし、バイナリーデータとして返します。
|
|
234
|
+
*
|
|
235
|
+
* キャッシュが利用可能な場合はキャッシュから取得を試み、失敗した場合はネットワーク経由で取得します。
|
|
236
|
+
*
|
|
237
|
+
* @param target ダウンロード対象(単体、設定オブジェクト、またはその配列)です。
|
|
238
|
+
* @param options ダウンロードの動作を制御するオプションです。
|
|
239
|
+
* @returns 取得されたバイナリーデータ(Uint8Array)を解決する Promise です。
|
|
240
|
+
*/
|
|
241
|
+
export default function downloadOnce(target: Target | Config | readonly (Target | Config)[], options?: Options | undefined): Promise<Uint8Array<ArrayBuffer>>;
|
|
242
|
+
//# sourceMappingURL=dl-once.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dl-once.d.ts","sourceRoot":"","sources":["../src/dl-once.ts"],"names":[],"mappings":"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"}
|