@nxtedition/lib 19.0.40 → 19.0.42
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/package.json +1 -1
- package/s3.js +29 -20
package/package.json
CHANGED
package/s3.js
CHANGED
|
@@ -46,19 +46,19 @@ export async function upload({
|
|
|
46
46
|
|
|
47
47
|
assert(queue.concurrency > 0 && queue.concurrency <= 32)
|
|
48
48
|
|
|
49
|
+
const ac = new AbortController()
|
|
50
|
+
const onAbort = () => {
|
|
51
|
+
ac.abort()
|
|
52
|
+
}
|
|
53
|
+
signal?.addEventListener('abort', onAbort)
|
|
54
|
+
|
|
49
55
|
let uploadId
|
|
50
56
|
try {
|
|
51
|
-
const multipartUploadOutput = await s3.send(
|
|
52
|
-
new AWS.CreateMultipartUploadCommand({ Bucket, Key }),
|
|
53
|
-
{ abortSignal: signal },
|
|
54
|
-
)
|
|
55
|
-
uploadId = multipartUploadOutput.UploadId
|
|
56
|
-
logger = logger?.child({ uploadId })
|
|
57
|
-
logger?.debug('multipart upload created')
|
|
58
|
-
|
|
59
57
|
const uploader = {
|
|
60
58
|
size: 0,
|
|
61
59
|
hasher: crypto.createHash('md5'),
|
|
60
|
+
ac,
|
|
61
|
+
signal: ac.signal,
|
|
62
62
|
part: {
|
|
63
63
|
/** @type {Array<Buffer>} **/ chunks: [],
|
|
64
64
|
hasher: crypto.createHash('md5'),
|
|
@@ -67,6 +67,16 @@ export async function upload({
|
|
|
67
67
|
},
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
const multipartUploadOutput = await s3.send(
|
|
71
|
+
new AWS.CreateMultipartUploadCommand({ Bucket, Key }),
|
|
72
|
+
{ abortSignal: uploader.signal },
|
|
73
|
+
)
|
|
74
|
+
uploader.signal.throwIfAborted()
|
|
75
|
+
|
|
76
|
+
uploadId = multipartUploadOutput.UploadId
|
|
77
|
+
logger = logger?.child({ uploadId })
|
|
78
|
+
logger?.debug('multipart upload created')
|
|
79
|
+
|
|
70
80
|
const maybeFlush = (minSize) => {
|
|
71
81
|
const { part } = uploader
|
|
72
82
|
|
|
@@ -91,7 +101,7 @@ export async function upload({
|
|
|
91
101
|
promises.push(
|
|
92
102
|
queue
|
|
93
103
|
.add(
|
|
94
|
-
async (
|
|
104
|
+
async () => {
|
|
95
105
|
logger?.debug({ number, size }, 'part upload started')
|
|
96
106
|
try {
|
|
97
107
|
const { ETag } = await s3.send(
|
|
@@ -111,20 +121,16 @@ export async function upload({
|
|
|
111
121
|
},
|
|
112
122
|
}),
|
|
113
123
|
}),
|
|
114
|
-
{ abortSignal: signal },
|
|
115
124
|
)
|
|
116
125
|
logger?.debug({ number, size, etag: ETag }, 'part upload completed')
|
|
117
126
|
return { part: { ETag, PartNumber: number } }
|
|
118
127
|
} catch (err) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
} else {
|
|
122
|
-
logger?.warn({ err }, 'part upload failed')
|
|
123
|
-
}
|
|
128
|
+
uploader.ac.abort(err)
|
|
129
|
+
logger?.warn({ err }, 'part upload failed')
|
|
124
130
|
return { error: err }
|
|
125
131
|
}
|
|
126
132
|
},
|
|
127
|
-
{ signal },
|
|
133
|
+
{ signal: uploader.signal },
|
|
128
134
|
)
|
|
129
135
|
.catch((err) => ({ error: err })),
|
|
130
136
|
)
|
|
@@ -133,7 +139,7 @@ export async function upload({
|
|
|
133
139
|
}
|
|
134
140
|
|
|
135
141
|
for await (const chunk of Body) {
|
|
136
|
-
signal
|
|
142
|
+
uploader.signal.throwIfAborted()
|
|
137
143
|
|
|
138
144
|
uploader.hasher.update(chunk)
|
|
139
145
|
uploader.size += chunk.byteLength
|
|
@@ -145,9 +151,11 @@ export async function upload({
|
|
|
145
151
|
const thenable = maybeFlush(partSize)
|
|
146
152
|
if (thenable) {
|
|
147
153
|
await thenable
|
|
154
|
+
uploader.signal.throwIfAborted()
|
|
148
155
|
}
|
|
149
156
|
}
|
|
150
157
|
await maybeFlush()
|
|
158
|
+
uploader.signal.throwIfAborted()
|
|
151
159
|
|
|
152
160
|
const parts = []
|
|
153
161
|
const errors = []
|
|
@@ -158,7 +166,7 @@ export async function upload({
|
|
|
158
166
|
parts.push(part)
|
|
159
167
|
}
|
|
160
168
|
}
|
|
161
|
-
signal
|
|
169
|
+
uploader.signal.throwIfAborted()
|
|
162
170
|
|
|
163
171
|
if (errors.length > 0) {
|
|
164
172
|
throw new AggregateError(errors, 'multipart upload failed')
|
|
@@ -175,9 +183,8 @@ export async function upload({
|
|
|
175
183
|
UploadId: uploadId,
|
|
176
184
|
MultipartUpload: { Parts: parts },
|
|
177
185
|
}),
|
|
178
|
-
{ abortSignal: signal },
|
|
179
186
|
)
|
|
180
|
-
signal
|
|
187
|
+
uploader.signal.throwIfAborted()
|
|
181
188
|
|
|
182
189
|
const result = {
|
|
183
190
|
size: uploader.size,
|
|
@@ -212,5 +219,7 @@ export async function upload({
|
|
|
212
219
|
}
|
|
213
220
|
|
|
214
221
|
throw err
|
|
222
|
+
} finally {
|
|
223
|
+
signal?.removeEventListener('abort', onAbort)
|
|
215
224
|
}
|
|
216
225
|
}
|