mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-15 17:42:15 +08:00
77 lines
2.0 KiB
JavaScript
77 lines
2.0 KiB
JavaScript
const ScreenshotConnector = require('@stencil/core/screenshot/local-connector');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const https = require('https');
|
|
|
|
class IonicConnector extends ScreenshotConnector {
|
|
|
|
async pullIonicMasterBuild() {
|
|
const timespan = this.logger.createTimeSpan(`pull master screenshot images started`);
|
|
|
|
const ws = fs.createWriteStream(this.masterBuildFilePath);
|
|
const p = `/data/builds/master.json`;
|
|
await this.downloadToStream(ws, p);
|
|
const masterBuild = await this.getMasterBuild();
|
|
|
|
const masterImageNames = masterBuild.screenshots.map(s => s.image);
|
|
const missingImages = masterImageNames.filter(masterImageName => {
|
|
try {
|
|
const masterImagePath = path.join(this.imagesDir, masterImageName);
|
|
fs.accessSync(masterImagePath);
|
|
return false;
|
|
} catch (e) {}
|
|
return true
|
|
});
|
|
|
|
if (missingImages.length > 0) {
|
|
await Promise.all(missingImages.map(async image => {
|
|
this.logger.debug(`downloading: ${image}`);
|
|
|
|
try {
|
|
await this.downloadImage(image);
|
|
} catch (e) {
|
|
this.logger.error(`Error with ${image}: ${e}`);
|
|
throw e;
|
|
}
|
|
}));
|
|
}
|
|
|
|
timespan.finish(`pull master screenshot images finished`);
|
|
}
|
|
|
|
async downloadToStream(stream, p) {
|
|
return new Promise((resolve, reject) => {
|
|
const req = https.request({
|
|
method: 'GET',
|
|
hostname: 'screenshot.ionicframework.com',
|
|
path: p,
|
|
});
|
|
|
|
req.on('response', res => {
|
|
if (res.statusCode !== 200) {
|
|
return reject(new Error(`Bad Status Code: ${res.statusCode}`));
|
|
}
|
|
|
|
stream.on('error', reject);
|
|
stream.on('close', resolve);
|
|
|
|
res.on('error', reject);
|
|
res.pipe(stream);
|
|
});
|
|
|
|
req.on('error', reject);
|
|
req.end();
|
|
});
|
|
}
|
|
|
|
async downloadImage(image) {
|
|
const stream = fs.createWriteStream(path.join(this.imagesDir, image));
|
|
const p = `/data/images/${image}`;
|
|
|
|
await this.downloadToStream(stream, p);
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = IonicConnector;
|