@remotion/renderer 4.0.0-alpha.217 → 4.0.0-alpha4
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 +18 -12
- package/dist/assets/get-audio-channels.d.ts +2 -1
- package/dist/assets/get-audio-channels.js +9 -5
- package/dist/assets/get-video-stream-duration.d.ts +5 -2
- package/dist/assets/get-video-stream-duration.js +12 -6
- package/dist/audio-codec.d.ts +3 -4
- package/dist/audio-codec.js +9 -3
- package/dist/browser/BrowserFetcher.d.ts +16 -63
- package/dist/browser/BrowserFetcher.js +126 -213
- package/dist/browser/BrowserRunner.js +2 -8
- package/dist/browser/FrameManager.js +3 -2
- package/dist/browser/LaunchOptions.d.ts +0 -1
- package/dist/browser/Launcher.js +3 -9
- package/dist/browser/PuppeteerNode.d.ts +0 -3
- package/dist/browser/PuppeteerNode.js +0 -5
- package/dist/browser/create-browser-fetcher.js +34 -48
- package/dist/browser/devtools-commands.d.ts +1 -5
- package/dist/browser/devtools-types.d.ts +0 -78
- package/dist/check-apple-silicon.js +45 -2
- package/dist/client.d.ts +5 -29
- package/dist/client.js +1 -26
- package/dist/codec-supports-media.d.ts +1 -1
- package/dist/codec-supports-media.js +1 -1
- package/dist/combine-videos.d.ts +3 -0
- package/dist/combine-videos.js +9 -5
- package/dist/compositor/compose.js +2 -3
- package/dist/compositor/get-executable-path.d.ts +1 -1
- package/dist/compositor/get-executable-path.js +8 -15
- package/dist/create-ffmpeg-complex-filter.d.ts +4 -1
- package/dist/create-ffmpeg-complex-filter.js +4 -2
- package/dist/create-ffmpeg-merge-filter.d.ts +5 -2
- package/dist/create-ffmpeg-merge-filter.js +10 -2
- package/dist/create-silent-audio.d.ts +4 -1
- package/dist/create-silent-audio.js +7 -3
- package/dist/delete-directory.js +16 -16
- package/dist/ensure-presentation-timestamp.d.ts +9 -2
- package/dist/ensure-presentation-timestamp.js +13 -5
- package/dist/extract-frame-from-video.d.ts +3 -0
- package/dist/extract-frame-from-video.js +29 -7
- package/dist/file-extensions.d.ts +12 -1
- package/dist/file-extensions.js +13 -1
- package/dist/get-can-extract-frames-fast.d.ts +4 -1
- package/dist/get-can-extract-frames-fast.js +12 -1
- package/dist/get-compositions.d.ts +5 -2
- package/dist/get-compositions.js +11 -6
- package/dist/get-frame-of-video-slow.d.ts +4 -1
- package/dist/get-frame-of-video-slow.js +11 -3
- package/dist/get-frame-padded-index.d.ts +1 -2
- package/dist/get-local-browser-executable.js +3 -12
- package/dist/get-video-info.d.ts +5 -2
- package/dist/get-video-info.js +12 -6
- package/dist/guess-extension-for-media.d.ts +3 -1
- package/dist/guess-extension-for-media.js +8 -4
- package/dist/image-format.d.ts +6 -12
- package/dist/image-format.js +13 -16
- package/dist/index.d.ts +25 -36
- package/dist/index.js +15 -17
- package/dist/last-frame-from-video-cache.d.ts +4 -0
- package/dist/last-frame-from-video-cache.js +1 -0
- package/dist/merge-audio-track.d.ts +2 -0
- package/dist/merge-audio-track.js +10 -3
- package/dist/offthread-video-server.d.ts +4 -1
- package/dist/offthread-video-server.js +3 -1
- package/dist/open-browser.d.ts +0 -1
- package/dist/open-browser.js +6 -7
- package/dist/perf.d.ts +1 -1
- package/dist/perf.js +7 -9
- package/dist/prepare-server.d.ts +4 -1
- package/dist/prepare-server.js +5 -1
- package/dist/preprocess-audio-track.d.ts +4 -0
- package/dist/preprocess-audio-track.js +8 -4
- package/dist/prespawn-ffmpeg.d.ts +9 -6
- package/dist/prespawn-ffmpeg.js +12 -7
- package/dist/prestitcher-memory-usage.d.ts +4 -0
- package/dist/prestitcher-memory-usage.js +3 -2
- package/dist/prores-profile.d.ts +2 -1
- package/dist/prores-profile.js +4 -4
- package/dist/provide-screenshot.d.ts +4 -4
- package/dist/provide-screenshot.js +2 -2
- package/dist/puppeteer-screenshot.d.ts +2 -3
- package/dist/puppeteer-screenshot.js +32 -9
- package/dist/render-frames.d.ts +25 -12
- package/dist/render-frames.js +40 -27
- package/dist/render-media.d.ts +18 -16
- package/dist/render-media.js +43 -31
- package/dist/render-still.d.ts +8 -9
- package/dist/render-still.js +13 -12
- package/dist/screenshot-dom-element.d.ts +4 -4
- package/dist/screenshot-dom-element.js +3 -6
- package/dist/screenshot-task.d.ts +2 -2
- package/dist/screenshot-task.js +23 -38
- package/dist/serve-handler/index.js +4 -6
- package/dist/serve-static.d.ts +3 -0
- package/dist/serve-static.js +3 -3
- package/dist/stitch-frames-to-video.d.ts +11 -2
- package/dist/stitch-frames-to-video.js +33 -24
- package/dist/take-frame-and-compose.d.ts +4 -4
- package/dist/take-frame-and-compose.js +6 -12
- package/dist/tmp-dir.js +2 -1
- package/dist/try-to-extract-frame-of-video-fast.d.ts +4 -1
- package/dist/try-to-extract-frame-of-video-fast.js +7 -3
- package/dist/validate-concurrency.d.ts +0 -2
- package/dist/validate-concurrency.js +5 -11
- package/dist/validate-puppeteer-timeout.js +0 -1
- package/package.json +68 -71
- package/dist/browser/is-target-closed-err.d.ts +0 -1
- package/dist/browser/is-target-closed-err.js +0 -9
- package/dist/call-ffmpeg.d.ts +0 -17
- package/dist/call-ffmpeg.js +0 -34
- package/dist/compositor/compositor.d.ts +0 -15
- package/dist/compositor/compositor.js +0 -193
- package/dist/compositor/make-nonce.d.ts +0 -1
- package/dist/compositor/make-nonce.js +0 -8
- package/dist/jpeg-quality.d.ts +0 -1
- package/dist/jpeg-quality.js +0 -21
- package/dist/options/audio-bitrate.d.ts +0 -2
- package/dist/options/audio-bitrate.js +0 -11
- package/dist/options/crf.d.ts +0 -2
- package/dist/options/crf.js +0 -11
- package/dist/options/enforce-audio.d.ts +0 -2
- package/dist/options/enforce-audio.js +0 -11
- package/dist/options/jpeg-quality.d.ts +0 -2
- package/dist/options/jpeg-quality.js +0 -11
- package/dist/options/mute.d.ts +0 -2
- package/dist/options/mute.js +0 -11
- package/dist/options/option.d.ts +0 -8
- package/dist/options/option.js +0 -2
- package/dist/options/scale.d.ts +0 -2
- package/dist/options/scale.js +0 -11
- package/dist/options/video-bitrate.d.ts +0 -2
- package/dist/options/video-bitrate.js +0 -11
- package/dist/options/video-codec.d.ts +0 -2
- package/dist/options/video-codec.js +0 -11
- package/ffmpeg/SOURCE.md +0 -1
- package/ffmpeg/linux-arm-musl.gz +0 -0
- package/ffmpeg/linux-arm.gz +0 -0
- package/ffmpeg/linux-x64-musl.gz +0 -0
- package/ffmpeg/linux-x64.gz +0 -0
- package/ffmpeg/macos-arm.gz +0 -0
- package/ffmpeg/macos-x64.gz +0 -0
- package/ffmpeg/windows.gz +0 -0
- package/install-toolchain.mjs +0 -42
|
@@ -37,23 +37,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
37
37
|
__setModuleDefault(result, mod);
|
|
38
38
|
return result;
|
|
39
39
|
};
|
|
40
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
41
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
42
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
43
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
44
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
45
|
-
};
|
|
46
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
47
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
48
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
49
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
50
|
-
};
|
|
51
40
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
52
41
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
53
42
|
};
|
|
54
|
-
var _BrowserFetcher_instances, _BrowserFetcher_product, _BrowserFetcher_downloadsFolder, _BrowserFetcher_downloadHost, _BrowserFetcher_platform, _BrowserFetcher_getFolderPath;
|
|
55
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
|
-
exports.
|
|
44
|
+
exports._downloadFile = exports.getRevisionInfo = exports.getFolderPath = exports.removeBrowser = exports.localRevisions = exports.download = exports.getDownloadHost = exports.getDownloadsFolder = exports.getPlatform = void 0;
|
|
57
45
|
const childProcess = __importStar(require("child_process"));
|
|
58
46
|
const fs = __importStar(require("fs"));
|
|
59
47
|
const http = __importStar(require("http"));
|
|
@@ -149,223 +137,147 @@ function existsAsync(filePath) {
|
|
|
149
137
|
});
|
|
150
138
|
});
|
|
151
139
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (options.platform) {
|
|
165
|
-
__classPrivateFieldSet(this, _BrowserFetcher_platform, options.platform, "f");
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
const platform = os.platform();
|
|
169
|
-
switch (platform) {
|
|
170
|
-
case 'darwin':
|
|
171
|
-
switch (__classPrivateFieldGet(this, _BrowserFetcher_product, "f")) {
|
|
172
|
-
case 'chrome':
|
|
173
|
-
__classPrivateFieldSet(this, _BrowserFetcher_platform, os.arch() === 'arm64' && PUPPETEER_EXPERIMENTAL_CHROMIUM_MAC_ARM
|
|
174
|
-
? 'mac_arm'
|
|
175
|
-
: 'mac', "f");
|
|
176
|
-
break;
|
|
177
|
-
case 'firefox':
|
|
178
|
-
__classPrivateFieldSet(this, _BrowserFetcher_platform, 'mac', "f");
|
|
179
|
-
break;
|
|
180
|
-
default:
|
|
181
|
-
throw new Error('unknown browser');
|
|
182
|
-
}
|
|
183
|
-
break;
|
|
184
|
-
case 'linux':
|
|
185
|
-
__classPrivateFieldSet(this, _BrowserFetcher_platform, 'linux', "f");
|
|
186
|
-
break;
|
|
187
|
-
case 'win32':
|
|
188
|
-
__classPrivateFieldSet(this, _BrowserFetcher_platform, os.arch() === 'x64' ? 'win64' : 'win32', "f");
|
|
189
|
-
return;
|
|
140
|
+
const getPlatform = (product) => {
|
|
141
|
+
const platform = os.platform();
|
|
142
|
+
switch (platform) {
|
|
143
|
+
case 'darwin':
|
|
144
|
+
switch (product) {
|
|
145
|
+
case 'chrome':
|
|
146
|
+
return os.arch() === 'arm64' &&
|
|
147
|
+
PUPPETEER_EXPERIMENTAL_CHROMIUM_MAC_ARM
|
|
148
|
+
? 'mac_arm'
|
|
149
|
+
: 'mac';
|
|
150
|
+
case 'firefox':
|
|
151
|
+
return 'mac';
|
|
190
152
|
default:
|
|
191
|
-
|
|
153
|
+
throw new Error('unknown browser');
|
|
192
154
|
}
|
|
193
|
-
|
|
194
|
-
|
|
155
|
+
case 'linux':
|
|
156
|
+
return 'linux';
|
|
157
|
+
case 'win32':
|
|
158
|
+
return os.arch() === 'x64' ? 'win64' : 'win32';
|
|
159
|
+
default:
|
|
160
|
+
(0, assert_1.assert)(false, 'Unsupported platform: ' + platform);
|
|
195
161
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
162
|
+
};
|
|
163
|
+
exports.getPlatform = getPlatform;
|
|
164
|
+
const getDownloadsFolder = (product) => {
|
|
165
|
+
return path.join((0, get_download_destination_1.getDownloadsCacheDir)(), browserConfig[product].destination);
|
|
166
|
+
};
|
|
167
|
+
exports.getDownloadsFolder = getDownloadsFolder;
|
|
168
|
+
const getDownloadHost = (product) => {
|
|
169
|
+
return browserConfig[product].host;
|
|
170
|
+
};
|
|
171
|
+
exports.getDownloadHost = getDownloadHost;
|
|
172
|
+
const download = async ({ revision, progressCallback, product, platform, downloadHost, downloadsFolder, }) => {
|
|
173
|
+
const url = _downloadURL(product, platform, downloadHost, revision);
|
|
174
|
+
const fileName = url.split('/').pop();
|
|
175
|
+
(0, assert_1.assert)(fileName, `A malformed download URL was found: ${url}.`);
|
|
176
|
+
const archivePath = path.join(downloadsFolder, fileName);
|
|
177
|
+
const outputPath = (0, exports.getFolderPath)(revision, downloadsFolder, platform);
|
|
178
|
+
if (await existsAsync(outputPath)) {
|
|
179
|
+
return (0, exports.getRevisionInfo)(revision, product);
|
|
202
180
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
product() {
|
|
208
|
-
return __classPrivateFieldGet(this, _BrowserFetcher_product, "f");
|
|
181
|
+
if (!(await existsAsync(downloadsFolder))) {
|
|
182
|
+
await mkdirAsync(downloadsFolder, {
|
|
183
|
+
recursive: true,
|
|
184
|
+
});
|
|
209
185
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
return __classPrivateFieldGet(this, _BrowserFetcher_downloadHost, "f");
|
|
186
|
+
// Use system Chromium builds on Linux ARM devices
|
|
187
|
+
if (os.platform() !== 'darwin' && os.arch() === 'arm64') {
|
|
188
|
+
handleArm64();
|
|
189
|
+
return;
|
|
215
190
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
* This method is affected by the current `product`.
|
|
220
|
-
* @param revision - The revision to check availability for.
|
|
221
|
-
* @returns A promise that resolves to `true` if the revision could be downloaded
|
|
222
|
-
* from the host.
|
|
223
|
-
*/
|
|
224
|
-
canDownload(revision) {
|
|
225
|
-
const url = _downloadURL(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), __classPrivateFieldGet(this, _BrowserFetcher_downloadHost, "f"), revision);
|
|
226
|
-
return new Promise((resolve) => {
|
|
227
|
-
const request = httpRequest(url, 'HEAD', (response) => {
|
|
228
|
-
resolve(response.statusCode === 200);
|
|
229
|
-
}, false);
|
|
230
|
-
request.on('error', (error) => {
|
|
231
|
-
console.error(error);
|
|
232
|
-
resolve(false);
|
|
233
|
-
});
|
|
234
|
-
});
|
|
191
|
+
try {
|
|
192
|
+
await _downloadFile(url, archivePath, progressCallback);
|
|
193
|
+
await install(archivePath, outputPath);
|
|
235
194
|
}
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
* This method is affected by the current `product`.
|
|
240
|
-
* @param revision - The revision to download.
|
|
241
|
-
* @param progressCallback - A function that will be called with two arguments:
|
|
242
|
-
* How many bytes have been downloaded and the total number of bytes of the download.
|
|
243
|
-
* @returns A promise with revision information when the revision is downloaded
|
|
244
|
-
* and extracted.
|
|
245
|
-
*/
|
|
246
|
-
async download(revision, progressCallback = () => undefined) {
|
|
247
|
-
const url = _downloadURL(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), __classPrivateFieldGet(this, _BrowserFetcher_downloadHost, "f"), revision);
|
|
248
|
-
const fileName = url.split('/').pop();
|
|
249
|
-
(0, assert_1.assert)(fileName, `A malformed download URL was found: ${url}.`);
|
|
250
|
-
const archivePath = path.join(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f"), fileName);
|
|
251
|
-
const outputPath = __classPrivateFieldGet(this, _BrowserFetcher_instances, "m", _BrowserFetcher_getFolderPath).call(this, revision);
|
|
252
|
-
if (await existsAsync(outputPath)) {
|
|
253
|
-
return this.revisionInfo(revision);
|
|
254
|
-
}
|
|
255
|
-
if (!(await existsAsync(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f")))) {
|
|
256
|
-
await mkdirAsync(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f"), {
|
|
257
|
-
recursive: true,
|
|
258
|
-
});
|
|
195
|
+
finally {
|
|
196
|
+
if (await existsAsync(archivePath)) {
|
|
197
|
+
await unlinkAsync(archivePath);
|
|
259
198
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
199
|
+
}
|
|
200
|
+
const revisionInfo = (0, exports.getRevisionInfo)(revision, product);
|
|
201
|
+
if (revisionInfo) {
|
|
202
|
+
await chmodAsync(revisionInfo.executablePath, 0o755);
|
|
203
|
+
}
|
|
204
|
+
return revisionInfo;
|
|
205
|
+
};
|
|
206
|
+
exports.download = download;
|
|
207
|
+
const localRevisions = async (downloadsFolder, product, platform) => {
|
|
208
|
+
if (!(await existsAsync(downloadsFolder))) {
|
|
209
|
+
return [];
|
|
210
|
+
}
|
|
211
|
+
const fileNames = await readdirAsync(downloadsFolder);
|
|
212
|
+
return fileNames
|
|
213
|
+
.map((fileName) => {
|
|
214
|
+
return parseFolderPath(product, fileName);
|
|
215
|
+
})
|
|
216
|
+
.filter((entry) => {
|
|
217
|
+
var _a;
|
|
218
|
+
return (_a = (entry && entry.platform === platform)) !== null && _a !== void 0 ? _a : false;
|
|
219
|
+
})
|
|
220
|
+
.map((entry) => {
|
|
221
|
+
return entry.revision;
|
|
222
|
+
});
|
|
223
|
+
};
|
|
224
|
+
exports.localRevisions = localRevisions;
|
|
225
|
+
const removeBrowser = async (revision, folderPath) => {
|
|
226
|
+
(0, assert_1.assert)(await existsAsync(folderPath), `Failed to remove: revision ${revision} is not downloaded`);
|
|
227
|
+
(0, delete_directory_1.deleteDirectory)(folderPath);
|
|
228
|
+
};
|
|
229
|
+
exports.removeBrowser = removeBrowser;
|
|
230
|
+
const getFolderPath = (revision, downloadsFolder, platform) => {
|
|
231
|
+
return path.resolve(downloadsFolder, `${platform}-${revision}`);
|
|
232
|
+
};
|
|
233
|
+
exports.getFolderPath = getFolderPath;
|
|
234
|
+
const getExecutablePath = (product, revision) => {
|
|
235
|
+
const downloadsFolder = (0, exports.getDownloadsFolder)(product);
|
|
236
|
+
const platform = (0, exports.getPlatform)(product);
|
|
237
|
+
const folderPath = (0, exports.getFolderPath)(revision, downloadsFolder, platform);
|
|
238
|
+
if (product === 'chrome') {
|
|
239
|
+
if (platform === 'mac' || platform === 'mac_arm') {
|
|
240
|
+
return path.join(folderPath, archiveName(product, platform, revision), 'Chromium.app', 'Contents', 'MacOS', 'Chromium');
|
|
273
241
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
await chmodAsync(revisionInfo.executablePath, 0o755);
|
|
242
|
+
if (platform === 'linux') {
|
|
243
|
+
return path.join(folderPath, archiveName(product, platform, revision), 'chrome');
|
|
277
244
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* @remarks
|
|
282
|
-
* This method is affected by the current `product`.
|
|
283
|
-
* @returns A promise with a list of all revision strings (for the current `product`)
|
|
284
|
-
* available locally on disk.
|
|
285
|
-
*/
|
|
286
|
-
async localRevisions() {
|
|
287
|
-
if (!(await existsAsync(__classPrivateFieldGet(this, _BrowserFetcher_downloadsFolder, "f")))) {
|
|
288
|
-
return [];
|
|
245
|
+
if (platform === 'win32' || platform === 'win64') {
|
|
246
|
+
return path.join(folderPath, archiveName(product, platform, revision), 'thorium.exe');
|
|
289
247
|
}
|
|
290
|
-
|
|
291
|
-
return fileNames
|
|
292
|
-
.map((fileName) => {
|
|
293
|
-
return parseFolderPath(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), fileName);
|
|
294
|
-
})
|
|
295
|
-
.filter((entry) => {
|
|
296
|
-
var _a;
|
|
297
|
-
return (_a = (entry && entry.platform === __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"))) !== null && _a !== void 0 ? _a : false;
|
|
298
|
-
})
|
|
299
|
-
.map((entry) => {
|
|
300
|
-
return entry.revision;
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* @remarks
|
|
305
|
-
* This method is affected by the current `product`.
|
|
306
|
-
* @param revision - A revision to remove for the current `product`.
|
|
307
|
-
* @returns A promise that resolves when the revision has been removes or
|
|
308
|
-
* throws if the revision has not been downloaded.
|
|
309
|
-
*/
|
|
310
|
-
async remove(revision) {
|
|
311
|
-
const folderPath = __classPrivateFieldGet(this, _BrowserFetcher_instances, "m", _BrowserFetcher_getFolderPath).call(this, revision);
|
|
312
|
-
(0, assert_1.assert)(await existsAsync(folderPath), `Failed to remove: revision ${revision} is not downloaded`);
|
|
313
|
-
(0, delete_directory_1.deleteDirectory)(folderPath);
|
|
248
|
+
throw new Error('Unsupported platform: ' + platform);
|
|
314
249
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
*/
|
|
319
|
-
revisionInfo(revision) {
|
|
320
|
-
const folderPath = __classPrivateFieldGet(this, _BrowserFetcher_instances, "m", _BrowserFetcher_getFolderPath).call(this, revision);
|
|
321
|
-
let executablePath = '';
|
|
322
|
-
if (__classPrivateFieldGet(this, _BrowserFetcher_product, "f") === 'chrome') {
|
|
323
|
-
if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'mac' || __classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'mac_arm') {
|
|
324
|
-
executablePath = path.join(folderPath, archiveName(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), revision), 'Chromium.app', 'Contents', 'MacOS', 'Chromium');
|
|
325
|
-
}
|
|
326
|
-
else if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'linux') {
|
|
327
|
-
executablePath = path.join(folderPath, archiveName(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), revision), 'chrome');
|
|
328
|
-
}
|
|
329
|
-
else if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'win32' || __classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'win64') {
|
|
330
|
-
executablePath = path.join(folderPath, archiveName(__classPrivateFieldGet(this, _BrowserFetcher_product, "f"), __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"), revision), 'thorium.exe');
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
throw new Error('Unsupported platform: ' + __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"));
|
|
334
|
-
}
|
|
250
|
+
if (product === 'firefox') {
|
|
251
|
+
if (platform === 'mac' || platform === 'mac_arm') {
|
|
252
|
+
return path.join(folderPath, 'Firefox Nightly.app', 'Contents', 'MacOS', 'firefox');
|
|
335
253
|
}
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
executablePath = path.join(folderPath, 'Firefox Nightly.app', 'Contents', 'MacOS', 'firefox');
|
|
339
|
-
}
|
|
340
|
-
else if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'linux') {
|
|
341
|
-
executablePath = path.join(folderPath, 'firefox', 'firefox');
|
|
342
|
-
}
|
|
343
|
-
else if (__classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'win32' || __classPrivateFieldGet(this, _BrowserFetcher_platform, "f") === 'win64') {
|
|
344
|
-
executablePath = path.join(folderPath, 'firefox', 'firefox.exe');
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
347
|
-
throw new Error('Unsupported platform: ' + __classPrivateFieldGet(this, _BrowserFetcher_platform, "f"));
|
|
348
|
-
}
|
|
254
|
+
if (platform === 'linux') {
|
|
255
|
+
return path.join(folderPath, 'firefox', 'firefox');
|
|
349
256
|
}
|
|
350
|
-
|
|
351
|
-
|
|
257
|
+
if (platform === 'win32' || platform === 'win64') {
|
|
258
|
+
return path.join(folderPath, 'firefox', 'firefox.exe');
|
|
352
259
|
}
|
|
353
|
-
|
|
354
|
-
const local = fs.existsSync(folderPath);
|
|
355
|
-
return {
|
|
356
|
-
revision,
|
|
357
|
-
executablePath,
|
|
358
|
-
folderPath,
|
|
359
|
-
local,
|
|
360
|
-
url,
|
|
361
|
-
product: __classPrivateFieldGet(this, _BrowserFetcher_product, "f"),
|
|
362
|
-
};
|
|
260
|
+
throw new Error('Unsupported platform: ' + platform);
|
|
363
261
|
}
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
262
|
+
throw new Error('Unsupported product: ' + product);
|
|
263
|
+
};
|
|
264
|
+
const getRevisionInfo = (revision, product) => {
|
|
265
|
+
const executablePath = getExecutablePath(product, revision);
|
|
266
|
+
const downloadsFolder = (0, exports.getDownloadsFolder)(product);
|
|
267
|
+
const platform = (0, exports.getPlatform)(product);
|
|
268
|
+
const folderPath = (0, exports.getFolderPath)(revision, downloadsFolder, platform);
|
|
269
|
+
const url = _downloadURL(product, platform, (0, exports.getDownloadHost)(product), revision);
|
|
270
|
+
const local = fs.existsSync(folderPath);
|
|
271
|
+
return {
|
|
272
|
+
revision,
|
|
273
|
+
executablePath,
|
|
274
|
+
folderPath,
|
|
275
|
+
local,
|
|
276
|
+
url,
|
|
277
|
+
product,
|
|
278
|
+
};
|
|
368
279
|
};
|
|
280
|
+
exports.getRevisionInfo = getRevisionInfo;
|
|
369
281
|
function parseFolderPath(product, folderPath) {
|
|
370
282
|
const name = path.basename(folderPath);
|
|
371
283
|
const splits = name.split('-');
|
|
@@ -419,6 +331,7 @@ function _downloadFile(url, destinationPath, progressCallback) {
|
|
|
419
331
|
});
|
|
420
332
|
return promise;
|
|
421
333
|
}
|
|
334
|
+
exports._downloadFile = _downloadFile;
|
|
422
335
|
function install(archivePath, folderPath) {
|
|
423
336
|
if (archivePath.endsWith('.zip')) {
|
|
424
337
|
return (0, extract_zip_1.default)(archivePath, { dir: folderPath });
|
|
@@ -105,14 +105,8 @@ class BrowserRunner {
|
|
|
105
105
|
stdio,
|
|
106
106
|
});
|
|
107
107
|
if (dumpio) {
|
|
108
|
-
(_a = this.proc.
|
|
109
|
-
|
|
110
|
-
process.stdout.write(d.toString().trimStart());
|
|
111
|
-
});
|
|
112
|
-
(_b = this.proc.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (d) => {
|
|
113
|
-
process.stderr.write(options.indentationString);
|
|
114
|
-
process.stderr.write(d.toString().trimStart());
|
|
115
|
-
});
|
|
108
|
+
(_a = this.proc.stderr) === null || _a === void 0 ? void 0 : _a.pipe(process.stderr);
|
|
109
|
+
(_b = this.proc.stdout) === null || _b === void 0 ? void 0 : _b.pipe(process.stdout);
|
|
116
110
|
}
|
|
117
111
|
__classPrivateFieldSet(this, _BrowserRunner_closed, false, "f");
|
|
118
112
|
__classPrivateFieldSet(this, _BrowserRunner_processClosing, new Promise((fulfill, reject) => {
|
|
@@ -33,7 +33,6 @@ const Connection_1 = require("./Connection");
|
|
|
33
33
|
const DOMWorld_1 = require("./DOMWorld");
|
|
34
34
|
const EventEmitter_1 = require("./EventEmitter");
|
|
35
35
|
const ExecutionContext_1 = require("./ExecutionContext");
|
|
36
|
-
const is_target_closed_err_1 = require("./is-target-closed-err");
|
|
37
36
|
const LifecycleWatcher_1 = require("./LifecycleWatcher");
|
|
38
37
|
const NetworkManager_1 = require("./NetworkManager");
|
|
39
38
|
const util_1 = require("./util");
|
|
@@ -136,7 +135,9 @@ class FrameManager extends EventEmitter_1.EventEmitter {
|
|
|
136
135
|
}
|
|
137
136
|
catch (error) {
|
|
138
137
|
// The target might have been closed before the initialization finished.
|
|
139
|
-
if ((0, util_1.isErrorLike)(error) &&
|
|
138
|
+
if ((0, util_1.isErrorLike)(error) &&
|
|
139
|
+
(error.message.includes('Target closed') ||
|
|
140
|
+
error.message.includes('Session closed'))) {
|
|
140
141
|
return;
|
|
141
142
|
}
|
|
142
143
|
throw error;
|
|
@@ -29,6 +29,5 @@ export interface LaunchOptions {
|
|
|
29
29
|
env?: Record<string, string | undefined>;
|
|
30
30
|
pipe?: boolean;
|
|
31
31
|
product?: Product;
|
|
32
|
-
indentationString: string;
|
|
33
32
|
}
|
|
34
33
|
export declare type PuppeteerNodeLaunchOptions = BrowserLaunchArgumentOptions & LaunchOptions & BrowserConnectOptions;
|
package/dist/browser/Launcher.js
CHANGED
|
@@ -47,8 +47,8 @@ const os = __importStar(require("os"));
|
|
|
47
47
|
const path = __importStar(require("path"));
|
|
48
48
|
const assert_1 = require("./assert");
|
|
49
49
|
const Browser_1 = require("./Browser");
|
|
50
|
-
const BrowserFetcher_1 = require("./BrowserFetcher");
|
|
51
50
|
const BrowserRunner_1 = require("./BrowserRunner");
|
|
51
|
+
const BrowserFetcher_1 = require("./BrowserFetcher");
|
|
52
52
|
const tmpDir = () => {
|
|
53
53
|
return process.env.PUPPETEER_TMP_DIR || os.tmpdir();
|
|
54
54
|
};
|
|
@@ -57,7 +57,7 @@ class ChromeLauncher {
|
|
|
57
57
|
this._preferredRevision = preferredRevision;
|
|
58
58
|
}
|
|
59
59
|
async launch(options) {
|
|
60
|
-
const { args = [], dumpio = false, executablePath, pipe = false, env = process.env, defaultViewport, timeout = 60000, debuggingPort,
|
|
60
|
+
const { args = [], dumpio = false, executablePath, pipe = false, env = process.env, defaultViewport, timeout = 60000, debuggingPort, } = options;
|
|
61
61
|
const chromeArguments = args;
|
|
62
62
|
if (!chromeArguments.some((argument) => {
|
|
63
63
|
return argument.startsWith('--remote-debugging-');
|
|
@@ -91,7 +91,6 @@ class ChromeLauncher {
|
|
|
91
91
|
dumpio,
|
|
92
92
|
env,
|
|
93
93
|
pipe: false,
|
|
94
|
-
indentationString,
|
|
95
94
|
});
|
|
96
95
|
let browser;
|
|
97
96
|
try {
|
|
@@ -132,12 +131,7 @@ class ChromeLauncher {
|
|
|
132
131
|
exports.ChromeLauncher = ChromeLauncher;
|
|
133
132
|
function resolveExecutablePath(launcher) {
|
|
134
133
|
const { product, _preferredRevision } = launcher;
|
|
135
|
-
const
|
|
136
|
-
product,
|
|
137
|
-
path: null,
|
|
138
|
-
platform: null,
|
|
139
|
-
});
|
|
140
|
-
const revisionInfo = browserFetcher.revisionInfo(_preferredRevision);
|
|
134
|
+
const revisionInfo = (0, BrowserFetcher_1.getRevisionInfo)(_preferredRevision, 'chrome');
|
|
141
135
|
const firefoxHelp = `Run \`PUPPETEER_PRODUCT=firefox npm install\` to download a supported Firefox browser binary.`;
|
|
142
136
|
const chromeHelp = `Run \`npm install\` to download the correct Chromium revision (${launcher._preferredRevision}).`;
|
|
143
137
|
const missingText = revisionInfo.local
|
|
@@ -15,8 +15,6 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import type { Browser } from './Browser';
|
|
17
17
|
import type { BrowserConnectOptions } from './BrowserConnector';
|
|
18
|
-
import type { BrowserFetcherOptions } from './BrowserFetcher';
|
|
19
|
-
import { BrowserFetcher } from './BrowserFetcher';
|
|
20
18
|
import type { ProductLauncher } from './Launcher';
|
|
21
19
|
import type { BrowserLaunchArgumentOptions, LaunchOptions } from './LaunchOptions';
|
|
22
20
|
import type { Product } from './Product';
|
|
@@ -35,6 +33,5 @@ export declare class PuppeteerNode {
|
|
|
35
33
|
executablePath(channel?: string): string;
|
|
36
34
|
get _launcher(): ProductLauncher;
|
|
37
35
|
get product(): string;
|
|
38
|
-
createBrowserFetcher(options: BrowserFetcherOptions): BrowserFetcher;
|
|
39
36
|
}
|
|
40
37
|
export {};
|
|
@@ -28,7 +28,6 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
28
28
|
var _PuppeteerNode_lazyLauncher, _PuppeteerNode_productName;
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
30
|
exports.PuppeteerNode = void 0;
|
|
31
|
-
const BrowserFetcher_1 = require("./BrowserFetcher");
|
|
32
31
|
const Launcher_1 = require("./Launcher");
|
|
33
32
|
const revisions_1 = require("./revisions");
|
|
34
33
|
class PuppeteerNode {
|
|
@@ -40,7 +39,6 @@ class PuppeteerNode {
|
|
|
40
39
|
this._preferredRevision = preferredRevision;
|
|
41
40
|
this.launch = this.launch.bind(this);
|
|
42
41
|
this.executablePath = this.executablePath.bind(this);
|
|
43
|
-
this.createBrowserFetcher = this.createBrowserFetcher.bind(this);
|
|
44
42
|
}
|
|
45
43
|
launch(options) {
|
|
46
44
|
if (options.product) {
|
|
@@ -66,9 +64,6 @@ class PuppeteerNode {
|
|
|
66
64
|
get product() {
|
|
67
65
|
return this._launcher.product;
|
|
68
66
|
}
|
|
69
|
-
createBrowserFetcher(options) {
|
|
70
|
-
return new BrowserFetcher_1.BrowserFetcher(options);
|
|
71
|
-
}
|
|
72
67
|
}
|
|
73
68
|
exports.PuppeteerNode = PuppeteerNode;
|
|
74
69
|
_PuppeteerNode_lazyLauncher = new WeakMap(), _PuppeteerNode_productName = new WeakMap();
|
|
@@ -16,62 +16,48 @@
|
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.downloadBrowser = void 0;
|
|
19
|
-
const
|
|
19
|
+
const BrowserFetcher_1 = require("./BrowserFetcher");
|
|
20
20
|
const revisions_1 = require("./revisions");
|
|
21
21
|
const supportedProducts = {
|
|
22
22
|
chrome: 'Chromium',
|
|
23
23
|
firefox: 'Firefox Nightly',
|
|
24
24
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
path: null,
|
|
29
|
-
platform: null,
|
|
30
|
-
});
|
|
31
|
-
const revision = await getRevision();
|
|
32
|
-
await fetchBinary(revision);
|
|
33
|
-
function getRevision() {
|
|
34
|
-
if (product === 'chrome') {
|
|
35
|
-
return revisions_1.PUPPETEER_REVISIONS.chromium;
|
|
36
|
-
}
|
|
37
|
-
throw new Error(`Unsupported product ${product}`);
|
|
25
|
+
function getRevision(product) {
|
|
26
|
+
if (product === 'chrome') {
|
|
27
|
+
return revisions_1.PUPPETEER_REVISIONS.chromium;
|
|
38
28
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
function onProgress(downloadedBytes, totalBytes) {
|
|
62
|
-
console.log('Downloading', supportedProducts[product], toMegabytes(downloadedBytes) + '/' + toMegabytes(totalBytes));
|
|
63
|
-
}
|
|
64
|
-
return browserFetcher
|
|
65
|
-
.download(revisionInfo.revision, onProgress)
|
|
66
|
-
.then(() => {
|
|
67
|
-
return browserFetcher.localRevisions();
|
|
29
|
+
throw new Error(`Unsupported product ${product}`);
|
|
30
|
+
}
|
|
31
|
+
async function downloadBrowser(product) {
|
|
32
|
+
const revision = getRevision(product);
|
|
33
|
+
const revisionInfo = (0, BrowserFetcher_1.getRevisionInfo)(revision, product);
|
|
34
|
+
try {
|
|
35
|
+
await (0, BrowserFetcher_1.download)({
|
|
36
|
+
revision: revisionInfo.revision,
|
|
37
|
+
progressCallback: (downloadedBytes, totalBytes) => {
|
|
38
|
+
console.log('Downloading', supportedProducts[product], toMegabytes(downloadedBytes) + '/' + toMegabytes(totalBytes));
|
|
39
|
+
},
|
|
40
|
+
product,
|
|
41
|
+
platform: (0, BrowserFetcher_1.getPlatform)(product),
|
|
42
|
+
downloadHost: (0, BrowserFetcher_1.getDownloadHost)(product),
|
|
43
|
+
downloadsFolder: (0, BrowserFetcher_1.getDownloadsFolder)(product),
|
|
44
|
+
});
|
|
45
|
+
const _localRevisions = await (0, BrowserFetcher_1.localRevisions)((0, BrowserFetcher_1.getDownloadsFolder)(product), product, (0, BrowserFetcher_1.getPlatform)(product));
|
|
46
|
+
console.log(`${supportedProducts[product]} (${revisionInfo.revision}) downloaded to ${revisionInfo.folderPath}`);
|
|
47
|
+
await Promise.all(_localRevisions
|
|
48
|
+
.filter((__revision) => {
|
|
49
|
+
return __revision !== revisionInfo.revision;
|
|
68
50
|
})
|
|
69
|
-
.
|
|
70
|
-
.
|
|
51
|
+
.map((__revision) => {
|
|
52
|
+
return (0, BrowserFetcher_1.removeBrowser)(__revision, (0, BrowserFetcher_1.getFolderPath)(revision, (0, BrowserFetcher_1.getDownloadsFolder)(product), (0, BrowserFetcher_1.getPlatform)(product)));
|
|
53
|
+
}));
|
|
71
54
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return `${Math.round(mb * 10) / 10} Mb`;
|
|
55
|
+
catch (err) {
|
|
56
|
+
throw new Error(`Failed to set up ${supportedProducts[product]} r${revision}! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.`);
|
|
75
57
|
}
|
|
76
58
|
}
|
|
77
59
|
exports.downloadBrowser = downloadBrowser;
|
|
60
|
+
function toMegabytes(bytes) {
|
|
61
|
+
const mb = bytes / 1024 / 1024;
|
|
62
|
+
return `${Math.round(mb * 10) / 10} Mb`;
|
|
63
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ActivateTargetRequest, AddScriptToEvaluateOnNewDocumentRequest, AddScriptToEvaluateOnNewDocumentResponse, CallFunctionOnRequest, CallFunctionOnResponse, CaptureScreenshotRequest, CaptureScreenshotResponse, CloseTargetRequest, CloseTargetResponse, CreateIsolatedWorldRequest, CreateIsolatedWorldResponse, DetachFromTargetRequest, DevtoolsRemoteObject, EnableRequest, ExceptionDetails, GetFrameTreeResponse, NavigateRequest, NavigateResponse,
|
|
1
|
+
import type { ActivateTargetRequest, AddScriptToEvaluateOnNewDocumentRequest, AddScriptToEvaluateOnNewDocumentResponse, CallFunctionOnRequest, CallFunctionOnResponse, CaptureScreenshotRequest, CaptureScreenshotResponse, CloseTargetRequest, CloseTargetResponse, CreateIsolatedWorldRequest, CreateIsolatedWorldResponse, DetachFromTargetRequest, DevtoolsRemoteObject, EnableRequest, ExceptionDetails, GetFrameTreeResponse, NavigateRequest, NavigateResponse, ReleaseObjectRequest, SetAutoAttachRequest, SetDefaultBackgroundColorOverrideRequest, SetDeviceMetricsOverrideRequest, SetLifecycleEventsEnabledRequest } from './devtools-types';
|
|
2
2
|
export interface Commands {
|
|
3
3
|
/**
|
|
4
4
|
* Does nothing.
|
|
@@ -216,10 +216,6 @@ export interface Commands {
|
|
|
216
216
|
paramsType: [CaptureScreenshotRequest?];
|
|
217
217
|
returnType: CaptureScreenshotResponse;
|
|
218
218
|
};
|
|
219
|
-
'Page.printToPDF': {
|
|
220
|
-
paramsType: [PrintPDFRequest];
|
|
221
|
-
returnType: PrintPDFResponse;
|
|
222
|
-
};
|
|
223
219
|
'Target.activateTarget': {
|
|
224
220
|
paramsType: [ActivateTargetRequest];
|
|
225
221
|
returnType: void;
|