hw-weapp-compiler 1.0.25 → 1.0.26
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/build/utils/upload.js +28 -35
- package/package.json +1 -1
- package/test/upload-async-client.js +9 -2
package/build/utils/upload.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* 通过增量检测避免重复上传,并展示上传进度。
|
|
6
6
|
*/
|
|
7
7
|
const path = require('path');
|
|
8
|
+
const chalk = require('chalk');
|
|
8
9
|
const OBSClient = require('esdk-obs-nodejs');
|
|
9
10
|
const OSSClient = require('ali-oss');
|
|
10
11
|
const Progress = require('progress');
|
|
@@ -104,18 +105,12 @@ function getObsRuntimeOptions() {
|
|
|
104
105
|
}
|
|
105
106
|
|
|
106
107
|
function createObsRequestLogger(operation, file, key) {
|
|
107
|
-
const startedAt = Date.now();
|
|
108
|
-
const { timeoutSeconds, maxRetryCount, operationTimeoutMs } = getObsRuntimeOptions();
|
|
109
108
|
const displayFile = getDisplayFile(file);
|
|
110
109
|
|
|
111
|
-
console.log(`[OBS] ${operation} started: key=${key}, file=${displayFile}`);
|
|
112
|
-
|
|
113
110
|
const pendingTimer = setTimeout(() => {
|
|
114
111
|
console.warn(
|
|
115
|
-
`[OBS] ${operation}
|
|
116
|
-
`
|
|
117
|
-
`sdkTimeout=${timeoutSeconds}s, maxRetryCount=${maxRetryCount}, ` +
|
|
118
|
-
`operationTimeout=${operationTimeoutMs / 1000}s`,
|
|
112
|
+
`[OBS] ${operation} pending (${OBS_PENDING_WARNING_MS / 1000}s): ` +
|
|
113
|
+
`file=${displayFile}, key=${key}`,
|
|
119
114
|
);
|
|
120
115
|
}, OBS_PENDING_WARNING_MS);
|
|
121
116
|
|
|
@@ -125,19 +120,8 @@ function createObsRequestLogger(operation, file, key) {
|
|
|
125
120
|
}
|
|
126
121
|
|
|
127
122
|
return {
|
|
128
|
-
finish(
|
|
123
|
+
finish() {
|
|
129
124
|
clearTimeout(pendingTimer);
|
|
130
|
-
const elapsed = Date.now() - startedAt;
|
|
131
|
-
const suffix = detail ? `, ${detail}` : '';
|
|
132
|
-
const message = `[OBS] ${operation} ${outcome} in ${elapsed}ms: key=${key}${suffix}`;
|
|
133
|
-
|
|
134
|
-
if (outcome === 'failed') {
|
|
135
|
-
console.error(message);
|
|
136
|
-
} else if (outcome === 'miss') {
|
|
137
|
-
console.warn(message);
|
|
138
|
-
} else {
|
|
139
|
-
console.log(message);
|
|
140
|
-
}
|
|
141
125
|
},
|
|
142
126
|
};
|
|
143
127
|
}
|
|
@@ -150,7 +134,7 @@ function runObsRequest(operation, file, key, request) {
|
|
|
150
134
|
let operationTimer;
|
|
151
135
|
let activeRequest;
|
|
152
136
|
|
|
153
|
-
const finish = (error, result
|
|
137
|
+
const finish = (error, result) => {
|
|
154
138
|
if (settled) {
|
|
155
139
|
return;
|
|
156
140
|
}
|
|
@@ -158,10 +142,7 @@ function runObsRequest(operation, file, key, request) {
|
|
|
158
142
|
settled = true;
|
|
159
143
|
clearTimeout(operationTimer);
|
|
160
144
|
activeRequest = null;
|
|
161
|
-
requestLogger.finish(
|
|
162
|
-
outcome || (error ? 'failed' : 'completed'),
|
|
163
|
-
formatObsError(error || result),
|
|
164
|
-
);
|
|
145
|
+
requestLogger.finish();
|
|
165
146
|
|
|
166
147
|
if (error) {
|
|
167
148
|
reject(error);
|
|
@@ -226,10 +207,10 @@ function waitForObsClientReady(client) {
|
|
|
226
207
|
return;
|
|
227
208
|
}
|
|
228
209
|
|
|
229
|
-
|
|
210
|
+
setTimeout(checkReady, 10);
|
|
230
211
|
};
|
|
231
212
|
|
|
232
|
-
|
|
213
|
+
setTimeout(checkReady, 0);
|
|
233
214
|
});
|
|
234
215
|
}
|
|
235
216
|
|
|
@@ -314,7 +295,7 @@ async function getObsStat(file) {
|
|
|
314
295
|
} else if (status < 300) {
|
|
315
296
|
finish(null, result);
|
|
316
297
|
} else {
|
|
317
|
-
finish(result
|
|
298
|
+
finish(result);
|
|
318
299
|
}
|
|
319
300
|
},
|
|
320
301
|
);
|
|
@@ -372,9 +353,18 @@ async function uploadFile(file) {
|
|
|
372
353
|
await doUpload(file);
|
|
373
354
|
setStorage(file, true);
|
|
374
355
|
} catch (uploadError) {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
)
|
|
356
|
+
const detail = `file=${getDisplayFile(file)}, ${formatObsError(uploadError)}`;
|
|
357
|
+
|
|
358
|
+
if (ossConfig) {
|
|
359
|
+
console.error(`[assets] upload failed: ${detail}`);
|
|
360
|
+
} else {
|
|
361
|
+
const message = chalk.red(`[OBS] upload failed: ${detail}`);
|
|
362
|
+
if (progress && progress.stream && progress.stream.isTTY) {
|
|
363
|
+
progress.interrupt(message);
|
|
364
|
+
} else {
|
|
365
|
+
console.error(message);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
378
368
|
}
|
|
379
369
|
} finally {
|
|
380
370
|
uploadQueue[file] = 'completed';
|
|
@@ -440,10 +430,13 @@ function addToUploadQueue(assets) {
|
|
|
440
430
|
}
|
|
441
431
|
});
|
|
442
432
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
`
|
|
446
|
-
|
|
433
|
+
if (ossConfig) {
|
|
434
|
+
console.log(
|
|
435
|
+
`[assets] upload queue: provider=OSS, total=${assets.length}, ` +
|
|
436
|
+
`cached=${cachedCount}, pending=${pendingCount}`,
|
|
437
|
+
);
|
|
438
|
+
}
|
|
439
|
+
|
|
447
440
|
return pendingCount ? checkUpload() : Promise.resolve();
|
|
448
441
|
}
|
|
449
442
|
|
package/package.json
CHANGED
|
@@ -4,9 +4,11 @@ const Module = require('module');
|
|
|
4
4
|
const os = require('os');
|
|
5
5
|
const path = require('path');
|
|
6
6
|
|
|
7
|
+
let metadataCalledBeforeReady = false;
|
|
8
|
+
let metadataCallCount = 0;
|
|
9
|
+
|
|
7
10
|
class AsyncOBSClient {
|
|
8
11
|
constructor(config) {
|
|
9
|
-
this.config = config;
|
|
10
12
|
this.util = {
|
|
11
13
|
server: null,
|
|
12
14
|
signatureContext: null,
|
|
@@ -20,7 +22,10 @@ class AsyncOBSClient {
|
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
getObjectMetadata(_params, callback) {
|
|
23
|
-
|
|
25
|
+
metadataCallCount += 1;
|
|
26
|
+
if (!this.util.signatureContext) {
|
|
27
|
+
metadataCalledBeforeReady = true;
|
|
28
|
+
}
|
|
24
29
|
callback(null, { CommonMsg: { Status: 200 } });
|
|
25
30
|
}
|
|
26
31
|
}
|
|
@@ -56,6 +61,8 @@ async function run() {
|
|
|
56
61
|
const uploadModule = path.resolve(originalCwd, 'build/utils/upload.js');
|
|
57
62
|
const { addToUploadQueue } = require(uploadModule);
|
|
58
63
|
await addToUploadQueue(['assets/ready.png']);
|
|
64
|
+
assert.strictEqual(metadataCalledBeforeReady, false, 'request started before client was ready');
|
|
65
|
+
assert.strictEqual(metadataCallCount, 1, 'metadata request should run exactly once');
|
|
59
66
|
|
|
60
67
|
// 等待 storage.js 的防抖写入结束后再清理测试目录。
|
|
61
68
|
await new Promise((resolve) => setTimeout(resolve, 400));
|