@milaboratories/pl-model-common 1.25.1 → 1.25.3
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/dist/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/author_marker.d.ts +9 -6
- package/dist/base32_encode.cjs +40 -46
- package/dist/base32_encode.cjs.map +1 -1
- package/dist/base32_encode.js +40 -45
- package/dist/base32_encode.js.map +1 -1
- package/dist/base64.cjs +5 -4
- package/dist/base64.cjs.map +1 -1
- package/dist/base64.d.ts +10 -6
- package/dist/base64.js +5 -3
- package/dist/base64.js.map +1 -1
- package/dist/block_state.d.ts +21 -23
- package/dist/bmodel/block_config.cjs +9 -10
- package/dist/bmodel/block_config.cjs.map +1 -1
- package/dist/bmodel/block_config.d.ts +53 -72
- package/dist/bmodel/block_config.js +9 -9
- package/dist/bmodel/block_config.js.map +1 -1
- package/dist/bmodel/code.cjs +7 -6
- package/dist/bmodel/code.cjs.map +1 -1
- package/dist/bmodel/code.d.ts +17 -13
- package/dist/bmodel/code.js +6 -4
- package/dist/bmodel/code.js.map +1 -1
- package/dist/bmodel/container.d.ts +46 -44
- package/dist/bmodel/index.cjs +3 -0
- package/dist/bmodel/index.d.ts +5 -6
- package/dist/bmodel/index.js +3 -0
- package/dist/bmodel/normalization.cjs +90 -106
- package/dist/bmodel/normalization.cjs.map +1 -1
- package/dist/bmodel/normalization.d.ts +7 -3
- package/dist/bmodel/normalization.js +90 -105
- package/dist/bmodel/normalization.js.map +1 -1
- package/dist/bmodel/types.d.ts +4 -1
- package/dist/branding.d.ts +5 -5
- package/dist/common_types.d.ts +19 -15
- package/dist/driver_kit.d.ts +25 -17
- package/dist/drivers/ChunkedStreamReader.cjs +168 -203
- package/dist/drivers/ChunkedStreamReader.cjs.map +1 -1
- package/dist/drivers/ChunkedStreamReader.d.ts +104 -100
- package/dist/drivers/ChunkedStreamReader.js +168 -202
- package/dist/drivers/ChunkedStreamReader.js.map +1 -1
- package/dist/drivers/blob.cjs +15 -17
- package/dist/drivers/blob.cjs.map +1 -1
- package/dist/drivers/blob.d.ts +35 -35
- package/dist/drivers/blob.js +14 -15
- package/dist/drivers/blob.js.map +1 -1
- package/dist/drivers/index.cjs +18 -0
- package/dist/drivers/index.d.ts +29 -9
- package/dist/drivers/index.js +18 -0
- package/dist/drivers/interfaces.d.ts +17 -14
- package/dist/drivers/log.cjs +4 -3
- package/dist/drivers/log.cjs.map +1 -1
- package/dist/drivers/log.d.ts +52 -49
- package/dist/drivers/log.js +4 -2
- package/dist/drivers/log.js.map +1 -1
- package/dist/drivers/ls.cjs +16 -19
- package/dist/drivers/ls.cjs.map +1 -1
- package/dist/drivers/ls.d.ts +73 -76
- package/dist/drivers/ls.js +16 -17
- package/dist/drivers/ls.js.map +1 -1
- package/dist/drivers/pframe/column_filter.d.ts +19 -15
- package/dist/drivers/pframe/data_info.cjs +201 -252
- package/dist/drivers/pframe/data_info.cjs.map +1 -1
- package/dist/drivers/pframe/data_info.d.ts +84 -109
- package/dist/drivers/pframe/data_info.js +201 -250
- package/dist/drivers/pframe/data_info.js.map +1 -1
- package/dist/drivers/pframe/data_types.cjs +38 -63
- package/dist/drivers/pframe/data_types.cjs.map +1 -1
- package/dist/drivers/pframe/data_types.d.ts +91 -93
- package/dist/drivers/pframe/data_types.js +38 -61
- package/dist/drivers/pframe/data_types.js.map +1 -1
- package/dist/drivers/pframe/driver.cjs +7 -0
- package/dist/drivers/pframe/driver.cjs.map +1 -0
- package/dist/drivers/pframe/driver.d.ts +50 -45
- package/dist/drivers/pframe/driver.js +6 -0
- package/dist/drivers/pframe/driver.js.map +1 -0
- package/dist/drivers/pframe/filter_spec.d.ts +127 -123
- package/dist/drivers/pframe/find_columns.d.ts +21 -17
- package/dist/drivers/pframe/index.cjs +15 -0
- package/dist/drivers/pframe/index.d.ts +23 -16
- package/dist/drivers/pframe/index.js +15 -0
- package/dist/drivers/pframe/linker_columns.cjs +184 -238
- package/dist/drivers/pframe/linker_columns.cjs.map +1 -1
- package/dist/drivers/pframe/linker_columns.d.ts +45 -38
- package/dist/drivers/pframe/linker_columns.js +184 -236
- package/dist/drivers/pframe/linker_columns.js.map +1 -1
- package/dist/drivers/pframe/pframe.d.ts +26 -21
- package/dist/drivers/pframe/query/index.cjs +1 -0
- package/dist/drivers/pframe/query/index.d.ts +3 -4
- package/dist/drivers/pframe/query/index.js +1 -0
- package/dist/drivers/pframe/query/query_common.d.ts +205 -247
- package/dist/drivers/pframe/query/query_data.d.ts +25 -23
- package/dist/drivers/pframe/query/query_spec.d.ts +30 -29
- package/dist/drivers/pframe/query/utils.cjs +164 -183
- package/dist/drivers/pframe/query/utils.cjs.map +1 -1
- package/dist/drivers/pframe/query/utils.d.ts +13 -12
- package/dist/drivers/pframe/query/utils.js +164 -181
- package/dist/drivers/pframe/query/utils.js.map +1 -1
- package/dist/drivers/pframe/spec/anchored.cjs +178 -216
- package/dist/drivers/pframe/spec/anchored.cjs.map +1 -1
- package/dist/drivers/pframe/spec/anchored.d.ts +53 -49
- package/dist/drivers/pframe/spec/anchored.js +176 -214
- package/dist/drivers/pframe/spec/anchored.js.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.cjs +8 -7
- package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.d.ts +20 -17
- package/dist/drivers/pframe/spec/filtered_column.js +8 -6
- package/dist/drivers/pframe/spec/filtered_column.js.map +1 -1
- package/dist/drivers/pframe/spec/ids.cjs +16 -14
- package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
- package/dist/drivers/pframe/spec/ids.d.ts +13 -8
- package/dist/drivers/pframe/spec/ids.js +14 -12
- package/dist/drivers/pframe/spec/ids.js.map +1 -1
- package/dist/drivers/pframe/spec/index.cjs +6 -0
- package/dist/drivers/pframe/spec/index.d.ts +6 -7
- package/dist/drivers/pframe/spec/index.js +6 -0
- package/dist/drivers/pframe/spec/native_id.cjs +16 -16
- package/dist/drivers/pframe/spec/native_id.cjs.map +1 -1
- package/dist/drivers/pframe/spec/native_id.d.ts +9 -4
- package/dist/drivers/pframe/spec/native_id.js +13 -13
- package/dist/drivers/pframe/spec/native_id.js.map +1 -1
- package/dist/drivers/pframe/spec/selectors.cjs +72 -112
- package/dist/drivers/pframe/spec/selectors.cjs.map +1 -1
- package/dist/drivers/pframe/spec/selectors.d.ts +99 -94
- package/dist/drivers/pframe/spec/selectors.js +72 -110
- package/dist/drivers/pframe/spec/selectors.js.map +1 -1
- package/dist/drivers/pframe/spec/spec.cjs +282 -324
- package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
- package/dist/drivers/pframe/spec/spec.d.ts +263 -272
- package/dist/drivers/pframe/spec/spec.js +281 -322
- package/dist/drivers/pframe/spec/spec.js.map +1 -1
- package/dist/drivers/pframe/table.d.ts +28 -24
- package/dist/drivers/pframe/table_calculate.cjs +117 -147
- package/dist/drivers/pframe/table_calculate.cjs.map +1 -1
- package/dist/drivers/pframe/table_calculate.d.ts +219 -220
- package/dist/drivers/pframe/table_calculate.js +117 -145
- package/dist/drivers/pframe/table_calculate.js.map +1 -1
- package/dist/drivers/pframe/table_common.cjs +13 -14
- package/dist/drivers/pframe/table_common.cjs.map +1 -1
- package/dist/drivers/pframe/table_common.d.ts +24 -19
- package/dist/drivers/pframe/table_common.js +13 -13
- package/dist/drivers/pframe/table_common.js.map +1 -1
- package/dist/drivers/pframe/unique_values.d.ts +23 -18
- package/dist/drivers/upload.d.ts +21 -18
- package/dist/drivers/urls.cjs +5 -6
- package/dist/drivers/urls.cjs.map +1 -1
- package/dist/drivers/urls.d.ts +12 -9
- package/dist/drivers/urls.js +5 -5
- package/dist/drivers/urls.js.map +1 -1
- package/dist/errors.cjs +65 -86
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +36 -33
- package/dist/errors.js +65 -85
- package/dist/errors.js.map +1 -1
- package/dist/flags/block_flags.cjs +7 -6
- package/dist/flags/block_flags.cjs.map +1 -1
- package/dist/flags/block_flags.d.ts +12 -8
- package/dist/flags/block_flags.js +7 -5
- package/dist/flags/block_flags.js.map +1 -1
- package/dist/flags/flag_utils.cjs +69 -108
- package/dist/flags/flag_utils.cjs.map +1 -1
- package/dist/flags/flag_utils.d.ts +40 -42
- package/dist/flags/flag_utils.js +70 -107
- package/dist/flags/flag_utils.js.map +1 -1
- package/dist/flags/type_utils.d.ts +12 -11
- package/dist/httpAuth.cjs +16 -20
- package/dist/httpAuth.cjs.map +1 -1
- package/dist/httpAuth.d.ts +10 -7
- package/dist/httpAuth.js +16 -19
- package/dist/httpAuth.js.map +1 -1
- package/dist/index.cjs +176 -179
- package/dist/index.d.ts +58 -20
- package/dist/index.js +37 -34
- package/dist/json.cjs +10 -8
- package/dist/json.cjs.map +1 -1
- package/dist/json.d.ts +18 -18
- package/dist/json.js +8 -6
- package/dist/json.js.map +1 -1
- package/dist/navigation.cjs +3 -2
- package/dist/navigation.cjs.map +1 -1
- package/dist/navigation.d.ts +18 -21
- package/dist/navigation.js +3 -1
- package/dist/navigation.js.map +1 -1
- package/dist/plid.cjs +16 -20
- package/dist/plid.cjs.map +1 -1
- package/dist/plid.d.ts +11 -7
- package/dist/plid.js +15 -18
- package/dist/plid.js.map +1 -1
- package/dist/pool/entry.d.ts +11 -11
- package/dist/pool/index.d.ts +3 -4
- package/dist/pool/query.cjs +21 -43
- package/dist/pool/query.cjs.map +1 -1
- package/dist/pool/query.d.ts +25 -20
- package/dist/pool/query.js +20 -40
- package/dist/pool/query.js.map +1 -1
- package/dist/pool/spec.cjs +40 -47
- package/dist/pool/spec.cjs.map +1 -1
- package/dist/pool/spec.d.ts +33 -31
- package/dist/pool/spec.js +40 -45
- package/dist/pool/spec.js.map +1 -1
- package/dist/ref.cjs +51 -71
- package/dist/ref.cjs.map +1 -1
- package/dist/ref.d.ts +36 -33
- package/dist/ref.js +50 -69
- package/dist/ref.js.map +1 -1
- package/dist/utag.d.ts +18 -14
- package/dist/util.cjs +8 -7
- package/dist/util.cjs.map +1 -1
- package/dist/util.d.ts +5 -2
- package/dist/util.js +8 -6
- package/dist/util.js.map +1 -1
- package/dist/value_or_error.cjs +7 -3
- package/dist/value_or_error.cjs.map +1 -1
- package/dist/value_or_error.d.ts +9 -6
- package/dist/value_or_error.js +7 -2
- package/dist/value_or_error.js.map +1 -1
- package/package.json +6 -6
- package/src/flags/block_flags.ts +2 -1
- package/src/flags/flag_utils.ts +0 -22
- package/dist/author_marker.d.ts.map +0 -1
- package/dist/base32_encode.d.ts +0 -8
- package/dist/base32_encode.d.ts.map +0 -1
- package/dist/base64.d.ts.map +0 -1
- package/dist/block_state.d.ts.map +0 -1
- package/dist/bmodel/block_config.d.ts.map +0 -1
- package/dist/bmodel/code.d.ts.map +0 -1
- package/dist/bmodel/container.d.ts.map +0 -1
- package/dist/bmodel/index.d.ts.map +0 -1
- package/dist/bmodel/normalization.d.ts.map +0 -1
- package/dist/bmodel/types.d.ts.map +0 -1
- package/dist/branding.d.ts.map +0 -1
- package/dist/common_types.d.ts.map +0 -1
- package/dist/driver_kit.d.ts.map +0 -1
- package/dist/drivers/ChunkedStreamReader.d.ts.map +0 -1
- package/dist/drivers/blob.d.ts.map +0 -1
- package/dist/drivers/index.d.ts.map +0 -1
- package/dist/drivers/interfaces.d.ts.map +0 -1
- package/dist/drivers/log.d.ts.map +0 -1
- package/dist/drivers/ls.d.ts.map +0 -1
- package/dist/drivers/pframe/column_filter.d.ts.map +0 -1
- package/dist/drivers/pframe/data_info.d.ts.map +0 -1
- package/dist/drivers/pframe/data_types.d.ts.map +0 -1
- package/dist/drivers/pframe/driver.d.ts.map +0 -1
- package/dist/drivers/pframe/filter_spec.d.ts.map +0 -1
- package/dist/drivers/pframe/find_columns.d.ts.map +0 -1
- package/dist/drivers/pframe/index.d.ts.map +0 -1
- package/dist/drivers/pframe/linker_columns.d.ts.map +0 -1
- package/dist/drivers/pframe/pframe.d.ts.map +0 -1
- package/dist/drivers/pframe/query/index.d.ts.map +0 -1
- package/dist/drivers/pframe/query/query_common.d.ts.map +0 -1
- package/dist/drivers/pframe/query/query_data.d.ts.map +0 -1
- package/dist/drivers/pframe/query/query_spec.d.ts.map +0 -1
- package/dist/drivers/pframe/query/utils.d.ts.map +0 -1
- package/dist/drivers/pframe/spec/anchored.d.ts.map +0 -1
- package/dist/drivers/pframe/spec/filtered_column.d.ts.map +0 -1
- package/dist/drivers/pframe/spec/ids.d.ts.map +0 -1
- package/dist/drivers/pframe/spec/index.d.ts.map +0 -1
- package/dist/drivers/pframe/spec/native_id.d.ts.map +0 -1
- package/dist/drivers/pframe/spec/selectors.d.ts.map +0 -1
- package/dist/drivers/pframe/spec/spec.d.ts.map +0 -1
- package/dist/drivers/pframe/table.d.ts.map +0 -1
- package/dist/drivers/pframe/table_calculate.d.ts.map +0 -1
- package/dist/drivers/pframe/table_common.d.ts.map +0 -1
- package/dist/drivers/pframe/type_util.d.ts +0 -5
- package/dist/drivers/pframe/type_util.d.ts.map +0 -1
- package/dist/drivers/pframe/unique_values.d.ts.map +0 -1
- package/dist/drivers/upload.d.ts.map +0 -1
- package/dist/drivers/urls.d.ts.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/flags/block_flags.d.ts.map +0 -1
- package/dist/flags/flag_utils.d.ts.map +0 -1
- package/dist/flags/index.d.ts +0 -4
- package/dist/flags/index.d.ts.map +0 -1
- package/dist/flags/type_utils.d.ts.map +0 -1
- package/dist/httpAuth.d.ts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/json.d.ts.map +0 -1
- package/dist/navigation.d.ts.map +0 -1
- package/dist/plid.d.ts.map +0 -1
- package/dist/pool/entry.d.ts.map +0 -1
- package/dist/pool/index.d.ts.map +0 -1
- package/dist/pool/query.d.ts.map +0 -1
- package/dist/pool/spec.d.ts.map +0 -1
- package/dist/ref.d.ts.map +0 -1
- package/dist/utag.d.ts.map +0 -1
- package/dist/util.d.ts.map +0 -1
- package/dist/value_or_error.d.ts.map +0 -1
|
@@ -1,117 +1,121 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { RangeBytes } from "./blob.js";
|
|
2
|
+
|
|
3
|
+
//#region src/drivers/ChunkedStreamReader.d.ts
|
|
2
4
|
/**
|
|
3
5
|
* Status returned by onError handler to indicate what action to take
|
|
4
6
|
* - 'continue': Retry the failed operation
|
|
5
7
|
* - 'error': Error the stream (calls controller.error, aborts ongoing fetches)
|
|
6
8
|
* - 'cancel': Cancel the stream gracefully (calls controller.close, aborts ongoing fetches)
|
|
7
9
|
*/
|
|
8
|
-
|
|
10
|
+
type ErrorHandlerStatus = "continue" | "error" | "cancel";
|
|
9
11
|
/**
|
|
10
12
|
* Options for creating a ChunkedStreamReader
|
|
11
13
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
14
|
+
interface ChunkedStreamReaderOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Function to fetch a chunk of data. Optionally accepts an AbortSignal to cancel the fetch.
|
|
17
|
+
*/
|
|
18
|
+
fetchChunk: (range: RangeBytes, signal?: AbortSignal) => Promise<Uint8Array>;
|
|
19
|
+
/**
|
|
20
|
+
* Total size of the blob in bytes
|
|
21
|
+
*/
|
|
22
|
+
totalSize: number;
|
|
23
|
+
/**
|
|
24
|
+
* Size of each chunk to read in bytes (default: 16MB)
|
|
25
|
+
*/
|
|
26
|
+
chunkSize?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Error handler callback. Called when an error occurs during chunk fetching.
|
|
29
|
+
* Should return:
|
|
30
|
+
* - 'continue' to retry the operation
|
|
31
|
+
* - 'error' to error the stream (will call controller.error and abort ongoing fetches)
|
|
32
|
+
* - 'cancel' to cancel gracefully (will call controller.close and abort ongoing fetches)
|
|
33
|
+
* Default behavior: returns 'error'.
|
|
34
|
+
*/
|
|
35
|
+
onError?: (error: unknown) => Promise<ErrorHandlerStatus>;
|
|
34
36
|
}
|
|
35
37
|
/**
|
|
36
38
|
* ChunkedStreamReader creates a ReadableStream that reads data from a blob driver
|
|
37
39
|
* in fixed-size chunks. This is useful for streaming large files without loading
|
|
38
40
|
* them entirely into memory.
|
|
39
41
|
*/
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
42
|
+
declare class ChunkedStreamReader {
|
|
43
|
+
private currentPosition;
|
|
44
|
+
private _read;
|
|
45
|
+
private _canceled;
|
|
46
|
+
private _errored;
|
|
47
|
+
private abortController;
|
|
48
|
+
private readonly options;
|
|
49
|
+
/**
|
|
50
|
+
* Creates a new ChunkedStreamReader instance.
|
|
51
|
+
* Use the static `create` method instead.
|
|
52
|
+
*/
|
|
53
|
+
private constructor();
|
|
54
|
+
/**
|
|
55
|
+
* Gets the fetchChunk function from options
|
|
56
|
+
*/
|
|
57
|
+
private get fetchChunk();
|
|
58
|
+
/**
|
|
59
|
+
* Gets the total size from options
|
|
60
|
+
*/
|
|
61
|
+
private get totalSize();
|
|
62
|
+
/**
|
|
63
|
+
* Gets the chunk size from options
|
|
64
|
+
*/
|
|
65
|
+
private get chunkSize();
|
|
66
|
+
/**
|
|
67
|
+
* Gets the onError callback from options
|
|
68
|
+
*/
|
|
69
|
+
private get onError();
|
|
70
|
+
/**
|
|
71
|
+
* Creates and returns a ReadableStream that reads data in chunks.
|
|
72
|
+
*
|
|
73
|
+
* @param options - Configuration options for the chunked stream reader
|
|
74
|
+
* @returns ReadableStream that can be consumed by zip.add or other stream consumers
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const stream = ChunkedStreamReader.create({
|
|
79
|
+
* fetchChunk: async (range, signal) => {
|
|
80
|
+
* const response = await fetch(`/api/data?from=${range.from}&to=${range.to}`, { signal });
|
|
81
|
+
* return new Uint8Array(await response.arrayBuffer());
|
|
82
|
+
* },
|
|
83
|
+
* totalSize: 1024 * 1024, // 1MB
|
|
84
|
+
* chunkSize: 64 * 1024, // 64KB chunks
|
|
85
|
+
* });
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
static create(options: ChunkedStreamReaderOptions): ReadableStream<Uint8Array>;
|
|
89
|
+
private readStart;
|
|
90
|
+
private readStop;
|
|
91
|
+
private tryRead;
|
|
92
|
+
/**
|
|
93
|
+
* Creates and returns a ReadableStream that reads data in chunks.
|
|
94
|
+
* The stream will automatically close when all data has been read.
|
|
95
|
+
*
|
|
96
|
+
* @private - Use the static `create` method instead
|
|
97
|
+
* @returns ReadableStream that can be consumed by zip.add or other stream consumers
|
|
98
|
+
*/
|
|
99
|
+
private createStream;
|
|
100
|
+
/**
|
|
101
|
+
* Gets the current reading position in bytes.
|
|
102
|
+
*
|
|
103
|
+
* @returns Current position as number of bytes read
|
|
104
|
+
*/
|
|
105
|
+
getCurrentPosition(): number;
|
|
106
|
+
/**
|
|
107
|
+
* Gets the remaining bytes to be read.
|
|
108
|
+
*
|
|
109
|
+
* @returns Number of bytes remaining
|
|
110
|
+
*/
|
|
111
|
+
getRemainingBytes(): number;
|
|
112
|
+
/**
|
|
113
|
+
* Checks if the entire blob has been read.
|
|
114
|
+
*
|
|
115
|
+
* @returns True if all data has been read
|
|
116
|
+
*/
|
|
117
|
+
isComplete(): boolean;
|
|
116
118
|
}
|
|
119
|
+
//#endregion
|
|
120
|
+
export { ChunkedStreamReader, ChunkedStreamReaderOptions, ErrorHandlerStatus };
|
|
117
121
|
//# sourceMappingURL=ChunkedStreamReader.d.ts.map
|
|
@@ -1,205 +1,171 @@
|
|
|
1
|
+
//#region src/drivers/ChunkedStreamReader.ts
|
|
1
2
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class ChunkedStreamReader {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
pull: () => {
|
|
168
|
-
this.readStart();
|
|
169
|
-
},
|
|
170
|
-
cancel: (reason) => {
|
|
171
|
-
this._canceled = true;
|
|
172
|
-
// Abort any ongoing fetch operations
|
|
173
|
-
this.abortController?.abort(reason);
|
|
174
|
-
console.debug("ChunkedStreamReader cancelled:", reason);
|
|
175
|
-
},
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Gets the current reading position in bytes.
|
|
180
|
-
*
|
|
181
|
-
* @returns Current position as number of bytes read
|
|
182
|
-
*/
|
|
183
|
-
getCurrentPosition() {
|
|
184
|
-
return this.currentPosition;
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Gets the remaining bytes to be read.
|
|
188
|
-
*
|
|
189
|
-
* @returns Number of bytes remaining
|
|
190
|
-
*/
|
|
191
|
-
getRemainingBytes() {
|
|
192
|
-
return Math.max(0, this.totalSize - this.currentPosition);
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Checks if the entire blob has been read.
|
|
196
|
-
*
|
|
197
|
-
* @returns True if all data has been read
|
|
198
|
-
*/
|
|
199
|
-
isComplete() {
|
|
200
|
-
return this.currentPosition >= this.totalSize;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
3
|
+
* ChunkedStreamReader creates a ReadableStream that reads data from a blob driver
|
|
4
|
+
* in fixed-size chunks. This is useful for streaming large files without loading
|
|
5
|
+
* them entirely into memory.
|
|
6
|
+
*/
|
|
7
|
+
var ChunkedStreamReader = class ChunkedStreamReader {
|
|
8
|
+
currentPosition = 0;
|
|
9
|
+
_read = true;
|
|
10
|
+
_canceled = false;
|
|
11
|
+
_errored = false;
|
|
12
|
+
abortController = null;
|
|
13
|
+
options;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new ChunkedStreamReader instance.
|
|
16
|
+
* Use the static `create` method instead.
|
|
17
|
+
*/
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.options = {
|
|
20
|
+
...options,
|
|
21
|
+
chunkSize: options.chunkSize ?? 16 * 1024 * 1024,
|
|
22
|
+
onError: options.onError ?? (async () => {
|
|
23
|
+
return "error";
|
|
24
|
+
})
|
|
25
|
+
};
|
|
26
|
+
if (this.totalSize < 0) throw new Error("Total size must be non-negative");
|
|
27
|
+
if (this.chunkSize <= 0) throw new Error("Chunk size must be positive");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets the fetchChunk function from options
|
|
31
|
+
*/
|
|
32
|
+
get fetchChunk() {
|
|
33
|
+
return this.options.fetchChunk;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Gets the total size from options
|
|
37
|
+
*/
|
|
38
|
+
get totalSize() {
|
|
39
|
+
return this.options.totalSize;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Gets the chunk size from options
|
|
43
|
+
*/
|
|
44
|
+
get chunkSize() {
|
|
45
|
+
return this.options.chunkSize;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Gets the onError callback from options
|
|
49
|
+
*/
|
|
50
|
+
get onError() {
|
|
51
|
+
return this.options.onError;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Creates and returns a ReadableStream that reads data in chunks.
|
|
55
|
+
*
|
|
56
|
+
* @param options - Configuration options for the chunked stream reader
|
|
57
|
+
* @returns ReadableStream that can be consumed by zip.add or other stream consumers
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const stream = ChunkedStreamReader.create({
|
|
62
|
+
* fetchChunk: async (range, signal) => {
|
|
63
|
+
* const response = await fetch(`/api/data?from=${range.from}&to=${range.to}`, { signal });
|
|
64
|
+
* return new Uint8Array(await response.arrayBuffer());
|
|
65
|
+
* },
|
|
66
|
+
* totalSize: 1024 * 1024, // 1MB
|
|
67
|
+
* chunkSize: 64 * 1024, // 64KB chunks
|
|
68
|
+
* });
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
static create(options) {
|
|
72
|
+
return new ChunkedStreamReader(options).createStream();
|
|
73
|
+
}
|
|
74
|
+
readStart() {
|
|
75
|
+
this._read = true;
|
|
76
|
+
}
|
|
77
|
+
readStop() {
|
|
78
|
+
this._read = false;
|
|
79
|
+
}
|
|
80
|
+
async tryRead(controller) {
|
|
81
|
+
if (this._canceled) return true;
|
|
82
|
+
if (this.isComplete()) {
|
|
83
|
+
controller.close();
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const endPosition = Math.min(this.currentPosition + this.chunkSize, this.totalSize);
|
|
88
|
+
const data = await this.fetchChunk({
|
|
89
|
+
from: this.currentPosition,
|
|
90
|
+
to: endPosition
|
|
91
|
+
}, this.abortController?.signal);
|
|
92
|
+
if (this._canceled) return true;
|
|
93
|
+
controller.enqueue(data);
|
|
94
|
+
this.currentPosition = endPosition;
|
|
95
|
+
if (!controller.desiredSize || controller.desiredSize <= 0) this.readStop();
|
|
96
|
+
} catch (error) {
|
|
97
|
+
const status = await this.onError(error);
|
|
98
|
+
if (status === "error") {
|
|
99
|
+
this._errored = true;
|
|
100
|
+
controller.error(error);
|
|
101
|
+
this.abortController?.abort("Stream errored");
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
if (status === "cancel") {
|
|
105
|
+
this._canceled = true;
|
|
106
|
+
controller.close();
|
|
107
|
+
this.abortController?.abort("Stream cancelled");
|
|
108
|
+
console.debug("ChunkedStreamReader cancelled due to error");
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Creates and returns a ReadableStream that reads data in chunks.
|
|
116
|
+
* The stream will automatically close when all data has been read.
|
|
117
|
+
*
|
|
118
|
+
* @private - Use the static `create` method instead
|
|
119
|
+
* @returns ReadableStream that can be consumed by zip.add or other stream consumers
|
|
120
|
+
*/
|
|
121
|
+
createStream() {
|
|
122
|
+
this.abortController = new AbortController();
|
|
123
|
+
return new ReadableStream({
|
|
124
|
+
start: async (controller) => {
|
|
125
|
+
while (true) {
|
|
126
|
+
if (this._canceled || this._errored) return;
|
|
127
|
+
if (!this._read) {
|
|
128
|
+
await new Promise((r) => setTimeout(r, 0));
|
|
129
|
+
if (controller.desiredSize) this.readStart();
|
|
130
|
+
} else if (await this.tryRead(controller)) return;
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
pull: () => {
|
|
134
|
+
this.readStart();
|
|
135
|
+
},
|
|
136
|
+
cancel: (reason) => {
|
|
137
|
+
this._canceled = true;
|
|
138
|
+
this.abortController?.abort(reason);
|
|
139
|
+
console.debug("ChunkedStreamReader cancelled:", reason);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Gets the current reading position in bytes.
|
|
145
|
+
*
|
|
146
|
+
* @returns Current position as number of bytes read
|
|
147
|
+
*/
|
|
148
|
+
getCurrentPosition() {
|
|
149
|
+
return this.currentPosition;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Gets the remaining bytes to be read.
|
|
153
|
+
*
|
|
154
|
+
* @returns Number of bytes remaining
|
|
155
|
+
*/
|
|
156
|
+
getRemainingBytes() {
|
|
157
|
+
return Math.max(0, this.totalSize - this.currentPosition);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Checks if the entire blob has been read.
|
|
161
|
+
*
|
|
162
|
+
* @returns True if all data has been read
|
|
163
|
+
*/
|
|
164
|
+
isComplete() {
|
|
165
|
+
return this.currentPosition >= this.totalSize;
|
|
166
|
+
}
|
|
167
|
+
};
|
|
203
168
|
|
|
169
|
+
//#endregion
|
|
204
170
|
export { ChunkedStreamReader };
|
|
205
|
-
//# sourceMappingURL=ChunkedStreamReader.js.map
|
|
171
|
+
//# sourceMappingURL=ChunkedStreamReader.js.map
|