@d-zero/dealer 1.5.3 → 1.5.4
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.md +244 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -10,6 +10,8 @@ npm install @d-zero/dealer
|
|
|
10
10
|
|
|
11
11
|
## API
|
|
12
12
|
|
|
13
|
+
### 基本的な使い方
|
|
14
|
+
|
|
13
15
|
```ts
|
|
14
16
|
import { deal } from '@d-zero/dealer';
|
|
15
17
|
|
|
@@ -32,3 +34,245 @@ await deal(items, {
|
|
|
32
34
|
},
|
|
33
35
|
});
|
|
34
36
|
```
|
|
37
|
+
|
|
38
|
+
### deal関数
|
|
39
|
+
|
|
40
|
+
コレクションを並列処理し、ログを順次出力します。
|
|
41
|
+
|
|
42
|
+
#### シグネチャ
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
async function deal<T extends WeakKey>(
|
|
46
|
+
items: readonly T[],
|
|
47
|
+
setup: (
|
|
48
|
+
process: T,
|
|
49
|
+
update: (log: string) => void,
|
|
50
|
+
index: number,
|
|
51
|
+
setLineHeader: (lineHeader: string) => void,
|
|
52
|
+
) => Promise<() => void | Promise<void>> | (() => void | Promise<void>),
|
|
53
|
+
options?: DealOptions,
|
|
54
|
+
): Promise<void>;
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
#### パラメータ
|
|
58
|
+
|
|
59
|
+
- `items`: 処理対象のアイテムのコレクション
|
|
60
|
+
- `setup`: 各アイテムを初期化し、開始関数を返す関数
|
|
61
|
+
- `process`: 現在処理中のアイテム
|
|
62
|
+
- `update`: ログを更新する関数
|
|
63
|
+
- `index`: アイテムのインデックス
|
|
64
|
+
- `setLineHeader`: ログの各行にプレフィックスを設定する関数
|
|
65
|
+
- 戻り値: アイテムを開始する関数
|
|
66
|
+
- `options`: 設定オプション
|
|
67
|
+
|
|
68
|
+
#### 実行フロー
|
|
69
|
+
|
|
70
|
+
1. `dealer.play()` が並列処理を開始
|
|
71
|
+
2. 各ワーカーについて:
|
|
72
|
+
- `start()` 関数が呼び出される(アイテムが開始)
|
|
73
|
+
- **インターバル遅延が実行される**(options.intervalが指定されている場合)
|
|
74
|
+
- 待機ログが `%countdown()` 形式で出力される
|
|
75
|
+
- これはアイテム開始**後**、最初の出力の**前**に発生
|
|
76
|
+
- 実際の処理が始まる(ユーザーコードからの最初の `update()` 呼び出し)
|
|
77
|
+
|
|
78
|
+
### DealOptions型
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
type DealOptions = DealerOptions &
|
|
82
|
+
LanesOptions & {
|
|
83
|
+
readonly header?: DealHeader;
|
|
84
|
+
readonly debug?: boolean;
|
|
85
|
+
readonly interval?: number | DelayOptions;
|
|
86
|
+
};
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### プロパティ
|
|
90
|
+
|
|
91
|
+
- `limit?: number`: 同時実行数の制限(デフォルト: 10)
|
|
92
|
+
- `header?: DealHeader`: 進捗ヘッダーを生成する関数
|
|
93
|
+
- `debug?: boolean`: デバッグログを表示するかどうか
|
|
94
|
+
- `interval?: number | DelayOptions`: 各処理の間隔(ミリ秒またはDelayOptions)
|
|
95
|
+
- `animations?: Animations`: アニメーション定義
|
|
96
|
+
- `fps?: FPS`: フレームレート(12, 24, 30, 60)
|
|
97
|
+
- `indent?: string`: ログのインデント文字列
|
|
98
|
+
- `sort?: (a: [number, string], b: [number, string]) => number`: ログのソート関数
|
|
99
|
+
- `verbose?: boolean`: 詳細ログモード
|
|
100
|
+
|
|
101
|
+
### DealHeader型
|
|
102
|
+
|
|
103
|
+
進捗情報をヘッダー文字列に変換する関数型です。
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
type DealHeader = (
|
|
107
|
+
progress: number,
|
|
108
|
+
done: number,
|
|
109
|
+
total: number,
|
|
110
|
+
limit: number,
|
|
111
|
+
) => string;
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
#### パラメータ
|
|
115
|
+
|
|
116
|
+
- `progress`: 進捗率(0〜1)
|
|
117
|
+
- `done`: 完了したアイテム数
|
|
118
|
+
- `total`: 総アイテム数
|
|
119
|
+
- `limit`: 同時実行数制限
|
|
120
|
+
|
|
121
|
+
#### 戻り値
|
|
122
|
+
|
|
123
|
+
ヘッダーとして表示する文字列。アニメーション変数(`%earth%`, `%dots%`など)を含めることができます。
|
|
124
|
+
|
|
125
|
+
### Dealerクラス
|
|
126
|
+
|
|
127
|
+
並列処理を制御するクラスです。
|
|
128
|
+
|
|
129
|
+
#### コンストラクタ
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
constructor(items: readonly T[], options?: DealerOptions)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
- `items`: 処理対象のアイテム
|
|
136
|
+
- `options.limit`: 同時実行数の制限(デフォルト: 10)
|
|
137
|
+
|
|
138
|
+
#### メソッド
|
|
139
|
+
|
|
140
|
+
##### debug(listener: (log: string) => void)
|
|
141
|
+
|
|
142
|
+
デバッグログのリスナーを設定します。
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
dealer.debug((log) => {
|
|
146
|
+
console.log(`[DEBUG]: ${log}`);
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
##### finish(listener: () => void)
|
|
151
|
+
|
|
152
|
+
すべての処理が完了したときのリスナーを設定します。
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
dealer.finish(() => {
|
|
156
|
+
console.log('All done!');
|
|
157
|
+
});
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
##### play()
|
|
161
|
+
|
|
162
|
+
並列処理を開始します。
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
dealer.play();
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
##### progress(listener: (progress: number, done: number, total: number, limit: number) => void)
|
|
169
|
+
|
|
170
|
+
進捗更新のリスナーを設定します。
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
dealer.progress((progress, done, total, limit) => {
|
|
174
|
+
console.log(`Progress: ${(progress * 100).toFixed(1)}% (${done}/${total})`);
|
|
175
|
+
});
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
##### async setup(initializer: ProcessInitializer<T>)
|
|
179
|
+
|
|
180
|
+
各アイテムの初期化関数を設定します。
|
|
181
|
+
|
|
182
|
+
```ts
|
|
183
|
+
await dealer.setup(async (item, index) => {
|
|
184
|
+
// 初期化処理
|
|
185
|
+
return async () => {
|
|
186
|
+
// 実行処理
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
- `initializer`: 各アイテムを初期化し、開始関数を返す関数
|
|
192
|
+
- `process`: 現在のアイテム
|
|
193
|
+
- `index`: アイテムのインデックス
|
|
194
|
+
- 戻り値: アイテムを開始する非同期関数
|
|
195
|
+
|
|
196
|
+
### Lanesクラス
|
|
197
|
+
|
|
198
|
+
複数のログラインを管理し、順序付きで表示するクラスです。
|
|
199
|
+
|
|
200
|
+
#### コンストラクタ
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
constructor(options?: LanesOptions)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
- `options.animations`: アニメーション定義
|
|
207
|
+
- `options.fps`: フレームレート(12, 24, 30, 60)
|
|
208
|
+
- `options.indent`: ログのインデント文字列
|
|
209
|
+
- `options.sort`: ログのソート関数
|
|
210
|
+
- `options.verbose`: 詳細ログモード(true の場合、ログをクリアせずに追加表示)
|
|
211
|
+
|
|
212
|
+
#### メソッド
|
|
213
|
+
|
|
214
|
+
##### clear(options?: { header?: boolean })
|
|
215
|
+
|
|
216
|
+
すべてのログをクリアします。
|
|
217
|
+
|
|
218
|
+
```ts
|
|
219
|
+
lanes.clear(); // ログのみクリア
|
|
220
|
+
lanes.clear({ header: true }); // ヘッダーもクリア
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
- `options.header`: ヘッダーもクリアするかどうか(デフォルト: false)
|
|
224
|
+
|
|
225
|
+
注: verboseモードでは何もしません。
|
|
226
|
+
|
|
227
|
+
##### close()
|
|
228
|
+
|
|
229
|
+
ディスプレイを閉じます。
|
|
230
|
+
|
|
231
|
+
```ts
|
|
232
|
+
lanes.close();
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
##### delete(id: number)
|
|
236
|
+
|
|
237
|
+
指定したIDのログを削除します。
|
|
238
|
+
|
|
239
|
+
```ts
|
|
240
|
+
lanes.delete(42);
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
- `id`: 削除するログのID
|
|
244
|
+
|
|
245
|
+
注: verboseモードでは何もしません。
|
|
246
|
+
|
|
247
|
+
##### header(text: string)
|
|
248
|
+
|
|
249
|
+
ヘッダーテキストを設定します。
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
lanes.header('Processing items...');
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
- `text`: ヘッダーとして表示するテキスト
|
|
256
|
+
|
|
257
|
+
##### update(id: number, log: string)
|
|
258
|
+
|
|
259
|
+
指定したIDのログを更新します。
|
|
260
|
+
|
|
261
|
+
```ts
|
|
262
|
+
lanes.update(42, 'Item 42: Processing...');
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
- `id`: 更新するログのID
|
|
266
|
+
- `log`: ログメッセージ
|
|
267
|
+
|
|
268
|
+
注: verboseモードでは、ヘッダーとログを連結して即座に出力します。
|
|
269
|
+
|
|
270
|
+
##### write()
|
|
271
|
+
|
|
272
|
+
現在のログをすべて表示します。
|
|
273
|
+
|
|
274
|
+
```ts
|
|
275
|
+
lanes.write();
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
注: verboseモードでは何もしません。通常モードでは、ソート後のログをヘッダーと共に出力します。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@d-zero/dealer",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.4",
|
|
4
4
|
"description": "A tool that provides an API and CLI for parallel processing of collections and sequential logging to standard output",
|
|
5
5
|
"author": "D-ZERO",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"clean": "tsc --build --clean"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@d-zero/shared": "0.
|
|
26
|
+
"@d-zero/shared": "0.18.0",
|
|
27
27
|
"ansi-colors": "4.1.3"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "008ea25926579b061e36c1f5f4f4fc7e15cb782e"
|
|
30
30
|
}
|