@remotion/renderer 4.1.0-alpha1 → 4.1.0-alpha11
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/assets/download-and-map-assets-to-file.d.ts +2 -4
- package/dist/assets/download-and-map-assets-to-file.js +14 -10
- package/dist/assets/download-map.d.ts +4 -0
- package/dist/assets/download-map.js +3 -0
- package/dist/audio-codec.d.ts +1 -1
- package/dist/browser/Browser.d.ts +7 -6
- package/dist/browser/Browser.js +13 -13
- package/dist/browser/BrowserPage.d.ts +21 -6
- package/dist/browser/BrowserPage.js +80 -19
- package/dist/browser/BrowserRunner.d.ts +0 -1
- package/dist/browser/BrowserRunner.js +6 -6
- package/dist/browser/Connection.d.ts +9 -3
- package/dist/browser/Connection.js +11 -3
- package/dist/browser/ConsoleMessage.d.ts +8 -1
- package/dist/browser/ConsoleMessage.js +2 -1
- package/dist/browser/DOMWorld.d.ts +10 -4
- package/dist/browser/DOMWorld.js +16 -15
- package/dist/browser/ExecutionContext.js +4 -4
- package/dist/browser/FrameManager.d.ts +3 -6
- package/dist/browser/FrameManager.js +11 -16
- package/dist/browser/LaunchOptions.d.ts +2 -0
- package/dist/browser/Launcher.js +3 -3
- package/dist/browser/NetworkManager.d.ts +4 -1
- package/dist/browser/Target.d.ts +2 -1
- package/dist/browser/Target.js +3 -1
- package/dist/browser/create-browser-fetcher.js +19 -24
- package/dist/browser/devtools-types.d.ts +59 -0
- package/dist/browser/should-log-message.js +14 -0
- package/dist/chalk/index.d.ts +2 -1
- package/dist/chalk/index.js +3 -8
- package/dist/chalk/is-color-supported.d.ts +1 -1
- package/dist/chalk/is-color-supported.js +18 -10
- package/dist/client.d.ts +4 -9
- package/dist/combine-videos.js +5 -1
- package/dist/compositor/compose.js +6 -1
- package/dist/compositor/compositor.d.ts +3 -2
- package/dist/compositor/compositor.js +18 -14
- package/dist/compositor/payloads.d.ts +15 -1
- package/dist/create-ffmpeg-merge-filter.js +1 -2
- package/dist/cycle-browser-tabs.d.ts +2 -1
- package/dist/cycle-browser-tabs.js +2 -2
- package/dist/format-logs.d.ts +3 -0
- package/dist/format-logs.js +207 -0
- package/dist/get-browser-instance.d.ts +3 -2
- package/dist/get-browser-instance.js +5 -5
- package/dist/get-bundle-url-from-serve-url.d.ts +2 -0
- package/dist/get-bundle-url-from-serve-url.js +30 -0
- package/dist/get-compositions.d.ts +7 -6
- package/dist/get-compositions.js +21 -11
- package/dist/get-local-browser-executable.js +15 -0
- package/dist/get-video-metadata.d.ts +2 -0
- package/dist/get-video-metadata.js +14 -0
- package/dist/index.d.ts +45 -42
- package/dist/index.js +3 -1
- package/dist/logger.d.ts +2 -2
- package/dist/logger.js +23 -18
- package/dist/offthread-video-server.d.ts +3 -3
- package/dist/offthread-video-server.js +76 -31
- package/dist/open-browser.d.ts +3 -2
- package/dist/open-browser.js +7 -5
- package/dist/options/crf.js +1 -1
- package/dist/options/video-codec.js +1 -1
- package/dist/perf.js +4 -2
- package/dist/prepare-server.d.ts +4 -5
- package/dist/prepare-server.js +16 -14
- package/dist/prespawn-ffmpeg.d.ts +2 -1
- package/dist/prespawn-ffmpeg.js +3 -31
- package/dist/puppeteer-evaluate.d.ts +4 -1
- package/dist/puppeteer-evaluate.js +5 -5
- package/dist/render-frames.d.ts +16 -8
- package/dist/render-frames.js +50 -22
- package/dist/render-media.d.ts +17 -9
- package/dist/render-media.js +41 -26
- package/dist/render-still.d.ts +13 -6
- package/dist/render-still.js +32 -17
- package/dist/replace-browser.d.ts +2 -1
- package/dist/replace-browser.js +2 -2
- package/dist/screenshot-task.js +4 -2
- package/dist/seek-to-frame.d.ts +8 -2
- package/dist/seek-to-frame.js +87 -25
- package/dist/select-composition.d.ts +10 -5
- package/dist/select-composition.js +39 -18
- package/dist/serve-handler/index.js +1 -1
- package/dist/serve-static.d.ts +2 -3
- package/dist/serve-static.js +10 -4
- package/dist/set-props-and-env.d.ts +4 -1
- package/dist/set-props-and-env.js +52 -22
- package/dist/stitch-frames-to-video.d.ts +2 -1
- package/dist/stitch-frames-to-video.js +12 -22
- package/dist/symbolicate-stacktrace.d.ts +3 -2
- package/dist/symbolicate-stacktrace.js +20 -7
- package/dist/take-frame-and-compose.js +1 -1
- package/package.json +10 -10
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import type { TAsset } from 'remotion';
|
|
2
|
-
import { OffthreadVideoServerEmitter } from '../offthread-video-server';
|
|
3
2
|
import type { DownloadMap } from './download-map';
|
|
4
3
|
export type RenderMediaOnDownload = (src: string) => ((progress: {
|
|
5
4
|
percent: number | null;
|
|
6
5
|
downloaded: number;
|
|
7
6
|
totalSize: number | null;
|
|
8
7
|
}) => void) | undefined | void;
|
|
9
|
-
export declare const downloadAsset: ({ src, downloadMap,
|
|
8
|
+
export declare const downloadAsset: ({ src, downloadMap, }: {
|
|
10
9
|
src: string;
|
|
11
|
-
emitter: OffthreadVideoServerEmitter;
|
|
12
10
|
downloadMap: DownloadMap;
|
|
13
11
|
}) => Promise<string>;
|
|
14
12
|
export declare const markAllAssetsAsDownloaded: (downloadMap: DownloadMap) => void;
|
|
@@ -23,4 +21,4 @@ export declare const downloadAndMapAssetsToFileUrl: ({ asset, onDownload, downlo
|
|
|
23
21
|
onDownload: RenderMediaOnDownload | null;
|
|
24
22
|
downloadMap: DownloadMap;
|
|
25
23
|
}) => Promise<TAsset>;
|
|
26
|
-
export declare const attachDownloadListenerToEmitter: (
|
|
24
|
+
export declare const attachDownloadListenerToEmitter: (downloadMap: DownloadMap, onDownload: RenderMediaOnDownload | null) => () => void;
|
|
@@ -33,7 +33,6 @@ const remotion_1 = require("remotion");
|
|
|
33
33
|
const compress_assets_1 = require("../compress-assets");
|
|
34
34
|
const ensure_output_directory_1 = require("../ensure-output-directory");
|
|
35
35
|
const mime_types_1 = require("../mime-types");
|
|
36
|
-
const offthread_video_server_1 = require("../offthread-video-server");
|
|
37
36
|
const download_file_1 = require("./download-file");
|
|
38
37
|
const sanitize_filepath_1 = require("./sanitize-filepath");
|
|
39
38
|
const waitForAssetToBeDownloaded = ({ src, downloadDir, downloadMap, }) => {
|
|
@@ -116,7 +115,7 @@ function validateBufferEncoding(potentialEncoding, dataUrl) {
|
|
|
116
115
|
throw new TypeError(errMessage);
|
|
117
116
|
}
|
|
118
117
|
}
|
|
119
|
-
const downloadAsset = async ({ src, downloadMap,
|
|
118
|
+
const downloadAsset = async ({ src, downloadMap, }) => {
|
|
120
119
|
var _a, _b, _c;
|
|
121
120
|
if ((0, compress_assets_1.isAssetCompressed)(src)) {
|
|
122
121
|
return src;
|
|
@@ -146,7 +145,7 @@ const downloadAsset = async ({ src, downloadMap, emitter, }) => {
|
|
|
146
145
|
if (process.env.NODE_ENV === 'test') {
|
|
147
146
|
console.log('Actually downloading asset', src);
|
|
148
147
|
}
|
|
149
|
-
emitter.dispatchDownload(src);
|
|
148
|
+
downloadMap.emitter.dispatchDownload(src);
|
|
150
149
|
if (src.startsWith('data:')) {
|
|
151
150
|
const [assetDetails, assetData] = src.substring('data:'.length).split(',');
|
|
152
151
|
if (!assetDetails.includes(';')) {
|
|
@@ -176,7 +175,7 @@ const downloadAsset = async ({ src, downloadMap, emitter, }) => {
|
|
|
176
175
|
const { to } = await (0, download_file_1.downloadFile)({
|
|
177
176
|
url: src,
|
|
178
177
|
onProgress: (progress) => {
|
|
179
|
-
emitter.dispatchDownloadProgress(src, progress.percent, progress.downloaded, progress.totalSize);
|
|
178
|
+
downloadMap.emitter.dispatchDownloadProgress(src, progress.percent, progress.downloaded, progress.totalSize);
|
|
180
179
|
},
|
|
181
180
|
to: (contentDisposition, contentType) => (0, exports.getSanitizedFilenameForAssetUrl)({
|
|
182
181
|
contentDisposition,
|
|
@@ -243,11 +242,9 @@ const getSanitizedFilenameForAssetUrl = ({ src, downloadDir, contentDisposition,
|
|
|
243
242
|
};
|
|
244
243
|
exports.getSanitizedFilenameForAssetUrl = getSanitizedFilenameForAssetUrl;
|
|
245
244
|
const downloadAndMapAssetsToFileUrl = async ({ asset, onDownload, downloadMap, }) => {
|
|
246
|
-
const
|
|
247
|
-
const cleanup = (0, exports.attachDownloadListenerToEmitter)(emitter, onDownload);
|
|
245
|
+
const cleanup = (0, exports.attachDownloadListenerToEmitter)(downloadMap, onDownload);
|
|
248
246
|
const newSrc = await (0, exports.downloadAsset)({
|
|
249
247
|
src: asset.src,
|
|
250
|
-
emitter,
|
|
251
248
|
downloadMap,
|
|
252
249
|
});
|
|
253
250
|
cleanup();
|
|
@@ -257,14 +254,21 @@ const downloadAndMapAssetsToFileUrl = async ({ asset, onDownload, downloadMap, }
|
|
|
257
254
|
};
|
|
258
255
|
};
|
|
259
256
|
exports.downloadAndMapAssetsToFileUrl = downloadAndMapAssetsToFileUrl;
|
|
260
|
-
const attachDownloadListenerToEmitter = (
|
|
257
|
+
const attachDownloadListenerToEmitter = (downloadMap, onDownload) => {
|
|
261
258
|
const cleanup = [];
|
|
262
259
|
if (!onDownload) {
|
|
263
260
|
return () => undefined;
|
|
264
261
|
}
|
|
265
|
-
|
|
262
|
+
if (downloadMap.downloadListeners.includes(onDownload)) {
|
|
263
|
+
return () => undefined;
|
|
264
|
+
}
|
|
265
|
+
downloadMap.downloadListeners.push(onDownload);
|
|
266
|
+
cleanup.push(() => {
|
|
267
|
+
downloadMap.downloadListeners = downloadMap.downloadListeners.filter((l) => l !== onDownload);
|
|
268
|
+
});
|
|
269
|
+
const a = downloadMap.emitter.addEventListener('download', ({ detail: { src: initialSrc } }) => {
|
|
266
270
|
const progress = onDownload(initialSrc);
|
|
267
|
-
const b = emitter.addEventListener('progress', ({ detail: { downloaded, percent, src: progressSrc, totalSize } }) => {
|
|
271
|
+
const b = downloadMap.emitter.addEventListener('progress', ({ detail: { downloaded, percent, src: progressSrc, totalSize } }) => {
|
|
268
272
|
if (initialSrc === progressSrc) {
|
|
269
273
|
progress === null || progress === void 0 ? void 0 : progress({ downloaded, percent, totalSize });
|
|
270
274
|
}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { TAsset } from 'remotion';
|
|
2
|
+
import { OffthreadVideoServerEmitter } from '../offthread-video-server';
|
|
3
|
+
import type { RenderMediaOnDownload } from './download-and-map-assets-to-file';
|
|
2
4
|
export type AudioChannelsAndDurationResultCache = {
|
|
3
5
|
channels: number;
|
|
4
6
|
duration: number | null;
|
|
5
7
|
};
|
|
6
8
|
export type DownloadMap = {
|
|
7
9
|
id: string;
|
|
10
|
+
emitter: OffthreadVideoServerEmitter;
|
|
11
|
+
downloadListeners: RenderMediaOnDownload[];
|
|
8
12
|
isDownloadingMap: {
|
|
9
13
|
[src: string]: {
|
|
10
14
|
[downloadDir: string]: boolean;
|
|
@@ -30,6 +30,7 @@ exports.cleanDownloadMap = exports.makeDownloadMap = void 0;
|
|
|
30
30
|
const node_fs_1 = __importStar(require("node:fs"));
|
|
31
31
|
const node_path_1 = __importDefault(require("node:path"));
|
|
32
32
|
const delete_directory_1 = require("../delete-directory");
|
|
33
|
+
const offthread_video_server_1 = require("../offthread-video-server");
|
|
33
34
|
const tmp_dir_1 = require("../tmp-dir");
|
|
34
35
|
const makeAndReturn = (dir, name) => {
|
|
35
36
|
const p = node_path_1.default.join(dir, name);
|
|
@@ -51,6 +52,7 @@ const makeDownloadMap = () => {
|
|
|
51
52
|
durationOfAssetCache: {},
|
|
52
53
|
id: String(Math.random()),
|
|
53
54
|
assetDir: dir,
|
|
55
|
+
downloadListeners: [],
|
|
54
56
|
downloadDir: makeAndReturn(dir, 'remotion-assets-dir'),
|
|
55
57
|
complexFilter: makeAndReturn(dir, 'remotion-complex-filter'),
|
|
56
58
|
preEncode: makeAndReturn(dir, 'pre-encode'),
|
|
@@ -59,6 +61,7 @@ const makeDownloadMap = () => {
|
|
|
59
61
|
stitchFrames: makeAndReturn(dir, 'remotion-stitch-temp-dir'),
|
|
60
62
|
compositingDir: makeAndReturn(dir, 'remotion-compositing-temp-dir'),
|
|
61
63
|
compositorCache: {},
|
|
64
|
+
emitter: new offthread_video_server_1.OffthreadVideoServerEmitter(),
|
|
62
65
|
};
|
|
63
66
|
};
|
|
64
67
|
exports.makeDownloadMap = makeDownloadMap;
|
package/dist/audio-codec.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare const supportedAudioCodecs: {
|
|
|
5
5
|
readonly h264: readonly ["aac", "pcm-16"];
|
|
6
6
|
readonly 'h264-mkv': readonly ["pcm-16"];
|
|
7
7
|
readonly aac: readonly ["aac", "pcm-16"];
|
|
8
|
-
readonly gif:
|
|
8
|
+
readonly gif: readonly [];
|
|
9
9
|
readonly h265: readonly ["aac", "pcm-16"];
|
|
10
10
|
readonly mp3: readonly ["mp3", "pcm-16"];
|
|
11
11
|
readonly prores: readonly ["aac", "pcm-16"];
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
import type { LogLevel } from '../log-level';
|
|
16
17
|
import type { AnySourceMapConsumer } from '../symbolicate-stacktrace';
|
|
17
18
|
import type { Page } from './BrowserPage';
|
|
18
19
|
import type { Connection } from './Connection';
|
|
@@ -40,12 +41,12 @@ export declare class HeadlessBrowser extends EventEmitter {
|
|
|
40
41
|
get _targets(): Map<string, Target>;
|
|
41
42
|
constructor(connection: Connection, defaultViewport: Viewport, closeCallback?: BrowserCloseCallback);
|
|
42
43
|
browserContexts(): BrowserContext[];
|
|
43
|
-
newPage(context: AnySourceMapConsumer | null): Promise<Page>;
|
|
44
|
-
_createPageInContext(context: AnySourceMapConsumer | null): Promise<Page>;
|
|
44
|
+
newPage(context: Promise<AnySourceMapConsumer | null>, logLevel: LogLevel, indent: boolean): Promise<Page>;
|
|
45
|
+
_createPageInContext(context: Promise<AnySourceMapConsumer | null>, logLevel: LogLevel, indent: boolean): Promise<Page>;
|
|
45
46
|
targets(): Target[];
|
|
46
47
|
waitForTarget(predicate: (x: Target) => boolean | Promise<boolean>, options?: WaitForTargetOptions): Promise<Target>;
|
|
47
|
-
pages(): Promise<Page[]>;
|
|
48
|
-
close(silent: boolean): Promise<void>;
|
|
48
|
+
pages(logLevel: LogLevel, indent: boolean): Promise<Page[]>;
|
|
49
|
+
close(silent: boolean, logLevel: LogLevel, indent: boolean): Promise<void>;
|
|
49
50
|
disconnect(): void;
|
|
50
51
|
}
|
|
51
52
|
export declare class BrowserContext extends EventEmitter {
|
|
@@ -55,8 +56,8 @@ export declare class BrowserContext extends EventEmitter {
|
|
|
55
56
|
waitForTarget(predicate: (x: Target) => boolean | Promise<boolean>, options?: {
|
|
56
57
|
timeout?: number;
|
|
57
58
|
}): Promise<Target>;
|
|
58
|
-
pages(): Promise<Page[]>;
|
|
59
|
-
newPage(context: AnySourceMapConsumer | null): Promise<Page>;
|
|
59
|
+
pages(logLevel: LogLevel, indent: boolean): Promise<Page[]>;
|
|
60
|
+
newPage(context: Promise<AnySourceMapConsumer | null>, logLevel: LogLevel, indent: boolean): Promise<Page>;
|
|
60
61
|
browser(): HeadlessBrowser;
|
|
61
62
|
}
|
|
62
63
|
export {};
|
package/dist/browser/Browser.js
CHANGED
|
@@ -65,11 +65,11 @@ class HeadlessBrowser extends EventEmitter_1.EventEmitter {
|
|
|
65
65
|
browserContexts() {
|
|
66
66
|
return [__classPrivateFieldGet(this, _HeadlessBrowser_defaultContext, "f"), ...Array.from(__classPrivateFieldGet(this, _HeadlessBrowser_contexts, "f").values())];
|
|
67
67
|
}
|
|
68
|
-
newPage(context) {
|
|
69
|
-
return __classPrivateFieldGet(this, _HeadlessBrowser_defaultContext, "f").newPage(context);
|
|
68
|
+
newPage(context, logLevel, indent) {
|
|
69
|
+
return __classPrivateFieldGet(this, _HeadlessBrowser_defaultContext, "f").newPage(context, logLevel, indent);
|
|
70
70
|
}
|
|
71
|
-
async _createPageInContext(context) {
|
|
72
|
-
const { targetId } = await this.connection.send('Target.createTarget', {
|
|
71
|
+
async _createPageInContext(context, logLevel, indent) {
|
|
72
|
+
const { value: { targetId }, } = await this.connection.send('Target.createTarget', {
|
|
73
73
|
url: 'about:blank',
|
|
74
74
|
browserContextId: undefined,
|
|
75
75
|
});
|
|
@@ -81,7 +81,7 @@ class HeadlessBrowser extends EventEmitter_1.EventEmitter {
|
|
|
81
81
|
if (!initialized) {
|
|
82
82
|
throw new Error(`Failed to create target for page (id = ${targetId})`);
|
|
83
83
|
}
|
|
84
|
-
const page = await target.page(context);
|
|
84
|
+
const page = await target.page(context, logLevel, indent);
|
|
85
85
|
if (!page) {
|
|
86
86
|
throw new Error(`Failed to create a page for context`);
|
|
87
87
|
}
|
|
@@ -119,18 +119,18 @@ class HeadlessBrowser extends EventEmitter_1.EventEmitter {
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
|
-
async pages() {
|
|
122
|
+
async pages(logLevel, indent) {
|
|
123
123
|
const contextPages = await Promise.all(this.browserContexts().map((context) => {
|
|
124
|
-
return context.pages();
|
|
124
|
+
return context.pages(logLevel, indent);
|
|
125
125
|
}));
|
|
126
126
|
// Flatten array.
|
|
127
127
|
return contextPages.reduce((acc, x) => {
|
|
128
128
|
return acc.concat(x);
|
|
129
129
|
}, []);
|
|
130
130
|
}
|
|
131
|
-
async close(silent) {
|
|
131
|
+
async close(silent, logLevel, indent) {
|
|
132
132
|
await __classPrivateFieldGet(this, _HeadlessBrowser_closeCallback, "f").call(null);
|
|
133
|
-
(await this.pages()).forEach((page) => {
|
|
133
|
+
(await this.pages(logLevel, indent)).forEach((page) => {
|
|
134
134
|
page.emit("disposed" /* PageEmittedEvents.Disposed */);
|
|
135
135
|
page.closed = true;
|
|
136
136
|
});
|
|
@@ -196,16 +196,16 @@ class BrowserContext extends EventEmitter_1.EventEmitter {
|
|
|
196
196
|
return target.browserContext() === this && predicate(target);
|
|
197
197
|
}, options);
|
|
198
198
|
}
|
|
199
|
-
async pages() {
|
|
199
|
+
async pages(logLevel, indent) {
|
|
200
200
|
const pages = await Promise.all(this.targets()
|
|
201
201
|
.filter((target) => target.type() === 'page')
|
|
202
|
-
.map((target) => target.page(null)));
|
|
202
|
+
.map((target) => target.page(Promise.resolve(null), logLevel, indent)));
|
|
203
203
|
return pages.filter((page) => {
|
|
204
204
|
return Boolean(page);
|
|
205
205
|
});
|
|
206
206
|
}
|
|
207
|
-
newPage(context) {
|
|
208
|
-
return __classPrivateFieldGet(this, _BrowserContext_browser, "f")._createPageInContext(context);
|
|
207
|
+
newPage(context, logLevel, indent) {
|
|
208
|
+
return __classPrivateFieldGet(this, _BrowserContext_browser, "f")._createPageInContext(context, logLevel, indent);
|
|
209
209
|
}
|
|
210
210
|
browser() {
|
|
211
211
|
return __classPrivateFieldGet(this, _BrowserContext_browser, "f");
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
import type { LogLevel } from '../log-level';
|
|
16
17
|
import type { AnySourceMapConsumer } from '../symbolicate-stacktrace';
|
|
17
18
|
import type { HeadlessBrowser } from './Browser';
|
|
18
19
|
import type { CDPSession } from './Connection';
|
|
@@ -41,18 +42,28 @@ interface PageEventObject {
|
|
|
41
42
|
export declare class Page extends EventEmitter {
|
|
42
43
|
#private;
|
|
43
44
|
id: string;
|
|
44
|
-
static _create({ client, target, defaultViewport, browser, sourcemapContext, }: {
|
|
45
|
+
static _create({ client, target, defaultViewport, browser, sourcemapContext, logLevel, indent, }: {
|
|
45
46
|
client: CDPSession;
|
|
46
47
|
target: Target;
|
|
47
48
|
defaultViewport: Viewport;
|
|
48
49
|
browser: HeadlessBrowser;
|
|
49
|
-
sourcemapContext: AnySourceMapConsumer | null
|
|
50
|
+
sourcemapContext: Promise<AnySourceMapConsumer | null>;
|
|
51
|
+
logLevel: LogLevel;
|
|
52
|
+
indent: boolean;
|
|
50
53
|
}): Promise<Page>;
|
|
51
54
|
closed: boolean;
|
|
52
55
|
browser: HeadlessBrowser;
|
|
53
56
|
screenshotTaskQueue: TaskQueue;
|
|
54
57
|
sourcemapContext: AnySourceMapConsumer | null;
|
|
55
|
-
|
|
58
|
+
logLevel: LogLevel;
|
|
59
|
+
constructor({ client, target, browser, sourcemapContext, logLevel, indent, }: {
|
|
60
|
+
client: CDPSession;
|
|
61
|
+
target: Target;
|
|
62
|
+
browser: HeadlessBrowser;
|
|
63
|
+
sourcemapContext: Promise<AnySourceMapConsumer | null>;
|
|
64
|
+
logLevel: LogLevel;
|
|
65
|
+
indent: boolean;
|
|
66
|
+
});
|
|
56
67
|
/**
|
|
57
68
|
* Listen to page events.
|
|
58
69
|
*/
|
|
@@ -75,8 +86,12 @@ export declare class Page extends EventEmitter {
|
|
|
75
86
|
setDefaultTimeout(timeout: number): void;
|
|
76
87
|
evaluateHandle<HandlerType extends JSHandle = JSHandle>(pageFunction: EvaluateHandleFn, ...args: SerializableOrJSHandle[]): Promise<HandlerType>;
|
|
77
88
|
url(): string;
|
|
78
|
-
goto(url
|
|
79
|
-
|
|
89
|
+
goto({ url, timeout, options, }: {
|
|
90
|
+
url: string;
|
|
91
|
+
timeout: number;
|
|
92
|
+
options?: WaitForOptions & {
|
|
93
|
+
referer?: string;
|
|
94
|
+
};
|
|
80
95
|
}): Promise<HTTPResponse | null>;
|
|
81
96
|
bringToFront(): Promise<void>;
|
|
82
97
|
evaluate<T extends EvaluateFn>(pageFunction: T, ...args: SerializableOrJSHandle[]): Promise<UnwrapPromiseLike<EvaluateFnReturnType<T>>>;
|
|
@@ -84,6 +99,6 @@ export declare class Page extends EventEmitter {
|
|
|
84
99
|
close(options?: {
|
|
85
100
|
runBeforeUnload?: boolean;
|
|
86
101
|
}): Promise<void>;
|
|
87
|
-
setBrowserSourceMapContext(context: AnySourceMapConsumer | null): void;
|
|
102
|
+
setBrowserSourceMapContext(context: Promise<AnySourceMapConsumer | null>): void;
|
|
88
103
|
}
|
|
89
104
|
export {};
|
|
@@ -29,6 +29,7 @@ var _Page_instances, _Page_client, _Page_target, _Page_timeoutSettings, _Page_fr
|
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
30
|
exports.Page = void 0;
|
|
31
31
|
const remotion_1 = require("remotion");
|
|
32
|
+
const format_logs_1 = require("../format-logs");
|
|
32
33
|
const logger_1 = require("../logger");
|
|
33
34
|
const truthy_1 = require("../truthy");
|
|
34
35
|
const assert_1 = require("./assert");
|
|
@@ -39,14 +40,29 @@ const JSHandle_1 = require("./JSHandle");
|
|
|
39
40
|
const TaskQueue_1 = require("./TaskQueue");
|
|
40
41
|
const TimeoutSettings_1 = require("./TimeoutSettings");
|
|
41
42
|
const util_1 = require("./util");
|
|
43
|
+
const shouldHideWarning = (log) => {
|
|
44
|
+
// Mixed Content warnings caused by localhost should not be displayed
|
|
45
|
+
if (log.text.includes('Mixed Content:') &&
|
|
46
|
+
log.text.includes('http://localhost:')) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
};
|
|
42
51
|
class Page extends EventEmitter_1.EventEmitter {
|
|
43
|
-
static async _create({ client, target, defaultViewport, browser, sourcemapContext, }) {
|
|
44
|
-
const page = new Page(
|
|
52
|
+
static async _create({ client, target, defaultViewport, browser, sourcemapContext, logLevel, indent, }) {
|
|
53
|
+
const page = new Page({
|
|
54
|
+
client,
|
|
55
|
+
target,
|
|
56
|
+
browser,
|
|
57
|
+
sourcemapContext,
|
|
58
|
+
logLevel,
|
|
59
|
+
indent,
|
|
60
|
+
});
|
|
45
61
|
await __classPrivateFieldGet(page, _Page_instances, "m", _Page_initialize).call(page);
|
|
46
62
|
await page.setViewport(defaultViewport);
|
|
47
63
|
return page;
|
|
48
64
|
}
|
|
49
|
-
constructor(client, target, browser, sourcemapContext) {
|
|
65
|
+
constructor({ client, target, browser, sourcemapContext, logLevel, indent, }) {
|
|
50
66
|
super();
|
|
51
67
|
_Page_instances.add(this);
|
|
52
68
|
this.closed = false;
|
|
@@ -55,13 +71,17 @@ class Page extends EventEmitter_1.EventEmitter {
|
|
|
55
71
|
_Page_timeoutSettings.set(this, new TimeoutSettings_1.TimeoutSettings());
|
|
56
72
|
_Page_frameManager.set(this, void 0);
|
|
57
73
|
_Page_pageBindings.set(this, new Map());
|
|
74
|
+
this.sourcemapContext = null;
|
|
58
75
|
__classPrivateFieldSet(this, _Page_client, client, "f");
|
|
59
76
|
__classPrivateFieldSet(this, _Page_target, target, "f");
|
|
60
|
-
__classPrivateFieldSet(this, _Page_frameManager, new FrameManager_1.FrameManager(client, this
|
|
77
|
+
__classPrivateFieldSet(this, _Page_frameManager, new FrameManager_1.FrameManager(client, this), "f");
|
|
61
78
|
this.screenshotTaskQueue = new TaskQueue_1.TaskQueue();
|
|
62
79
|
this.browser = browser;
|
|
63
80
|
this.id = String(Math.random());
|
|
64
|
-
|
|
81
|
+
sourcemapContext.then((context) => {
|
|
82
|
+
this.sourcemapContext = context;
|
|
83
|
+
});
|
|
84
|
+
this.logLevel = logLevel;
|
|
65
85
|
client.on('Target.attachedToTarget', (event) => {
|
|
66
86
|
switch (event.targetInfo.type) {
|
|
67
87
|
case 'iframe':
|
|
@@ -97,6 +117,9 @@ class Page extends EventEmitter_1.EventEmitter {
|
|
|
97
117
|
this.on('console', (log) => {
|
|
98
118
|
var _a;
|
|
99
119
|
const { url, columnNumber, lineNumber } = log.location();
|
|
120
|
+
if (shouldHideWarning(log)) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
100
123
|
if ((url === null || url === void 0 ? void 0 : url.endsWith(remotion_1.Internals.bundleName)) &&
|
|
101
124
|
lineNumber &&
|
|
102
125
|
this.sourcemapContext) {
|
|
@@ -111,15 +134,27 @@ class Page extends EventEmitter_1.EventEmitter {
|
|
|
111
134
|
]
|
|
112
135
|
.filter(truthy_1.truthy)
|
|
113
136
|
.join(':');
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
137
|
+
const tag = [origPosition === null || origPosition === void 0 ? void 0 : origPosition.name, file].filter(truthy_1.truthy).join('@');
|
|
138
|
+
if (log.type === 'error') {
|
|
139
|
+
logger_1.Log.errorAdvanced({
|
|
140
|
+
logLevel,
|
|
141
|
+
tag,
|
|
142
|
+
indent,
|
|
143
|
+
}, log.previewString);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
logger_1.Log.verboseAdvanced({
|
|
147
|
+
logLevel,
|
|
148
|
+
tag,
|
|
149
|
+
indent,
|
|
150
|
+
}, log.previewString);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (log.type === 'error') {
|
|
154
|
+
logger_1.Log.errorAdvanced({ logLevel, tag: `console.${log.type}`, indent }, log.text);
|
|
120
155
|
}
|
|
121
156
|
else {
|
|
122
|
-
logger_1.Log.verboseAdvanced({ logLevel
|
|
157
|
+
logger_1.Log.verboseAdvanced({ logLevel, tag: `console.${log.type}`, indent }, log.text);
|
|
123
158
|
}
|
|
124
159
|
});
|
|
125
160
|
}
|
|
@@ -157,8 +192,8 @@ class Page extends EventEmitter_1.EventEmitter {
|
|
|
157
192
|
mainFrame() {
|
|
158
193
|
return __classPrivateFieldGet(this, _Page_frameManager, "f").mainFrame();
|
|
159
194
|
}
|
|
160
|
-
setViewport(viewport) {
|
|
161
|
-
|
|
195
|
+
async setViewport(viewport) {
|
|
196
|
+
const { value } = await __classPrivateFieldGet(this, _Page_client, "f").send('Emulation.setDeviceMetricsOverride', {
|
|
162
197
|
mobile: false,
|
|
163
198
|
width: viewport.width,
|
|
164
199
|
height: viewport.height,
|
|
@@ -168,6 +203,7 @@ class Page extends EventEmitter_1.EventEmitter {
|
|
|
168
203
|
type: 'portraitPrimary',
|
|
169
204
|
},
|
|
170
205
|
});
|
|
206
|
+
return value;
|
|
171
207
|
}
|
|
172
208
|
setDefaultNavigationTimeout(timeout) {
|
|
173
209
|
__classPrivateFieldGet(this, _Page_timeoutSettings, "f").setDefaultNavigationTimeout(timeout);
|
|
@@ -182,8 +218,8 @@ class Page extends EventEmitter_1.EventEmitter {
|
|
|
182
218
|
url() {
|
|
183
219
|
return this.mainFrame().url();
|
|
184
220
|
}
|
|
185
|
-
goto(url, options = {}) {
|
|
186
|
-
return __classPrivateFieldGet(this, _Page_frameManager, "f").mainFrame().goto(url, options);
|
|
221
|
+
goto({ url, timeout, options = {}, }) {
|
|
222
|
+
return __classPrivateFieldGet(this, _Page_frameManager, "f").mainFrame().goto(url, timeout, options);
|
|
187
223
|
}
|
|
188
224
|
async bringToFront() {
|
|
189
225
|
await __classPrivateFieldGet(this, _Page_client, "f").send('Page.bringToFront');
|
|
@@ -214,7 +250,9 @@ class Page extends EventEmitter_1.EventEmitter {
|
|
|
214
250
|
}
|
|
215
251
|
}
|
|
216
252
|
setBrowserSourceMapContext(context) {
|
|
217
|
-
|
|
253
|
+
context.then((ctx) => {
|
|
254
|
+
this.sourcemapContext = ctx;
|
|
255
|
+
});
|
|
218
256
|
}
|
|
219
257
|
}
|
|
220
258
|
exports.Page = Page;
|
|
@@ -238,8 +276,21 @@ _Page_client = new WeakMap(), _Page_target = new WeakMap(), _Page_timeoutSetting
|
|
|
238
276
|
return (0, util_1.releaseObject)(__classPrivateFieldGet(this, _Page_client, "f"), arg);
|
|
239
277
|
});
|
|
240
278
|
}
|
|
279
|
+
const previewString = args
|
|
280
|
+
? args
|
|
281
|
+
.map((arg) => {
|
|
282
|
+
return (0, format_logs_1.formatRemoteObject)(arg);
|
|
283
|
+
})
|
|
284
|
+
.join(', ')
|
|
285
|
+
: '';
|
|
241
286
|
if (source !== 'worker') {
|
|
242
|
-
this.emit("console" /* PageEmittedEvents.Console */, new ConsoleMessage_1.ConsoleMessage(
|
|
287
|
+
this.emit("console" /* PageEmittedEvents.Console */, new ConsoleMessage_1.ConsoleMessage({
|
|
288
|
+
type: level,
|
|
289
|
+
text,
|
|
290
|
+
args: [],
|
|
291
|
+
stackTraceLocations: [{ url, lineNumber }],
|
|
292
|
+
previewString,
|
|
293
|
+
}));
|
|
243
294
|
}
|
|
244
295
|
}, _Page_onConsoleAPI = function _Page_onConsoleAPI(event) {
|
|
245
296
|
if (event.executionContextId === 0) {
|
|
@@ -310,6 +361,16 @@ _Page_client = new WeakMap(), _Page_target = new WeakMap(), _Page_timeoutSetting
|
|
|
310
361
|
});
|
|
311
362
|
}
|
|
312
363
|
}
|
|
313
|
-
const
|
|
364
|
+
const previewString = args
|
|
365
|
+
.map((a) => (0, format_logs_1.formatRemoteObject)(a._remoteObject))
|
|
366
|
+
.filter(Boolean)
|
|
367
|
+
.join(' ');
|
|
368
|
+
const message = new ConsoleMessage_1.ConsoleMessage({
|
|
369
|
+
type: eventType,
|
|
370
|
+
text: textTokens.join(' '),
|
|
371
|
+
args,
|
|
372
|
+
stackTraceLocations,
|
|
373
|
+
previewString,
|
|
374
|
+
});
|
|
314
375
|
this.emit("console" /* PageEmittedEvents.Console */, message);
|
|
315
376
|
};
|
|
@@ -103,7 +103,7 @@ class BrowserRunner {
|
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
105
105
|
const { output, tag } = formatted;
|
|
106
|
-
logger_1.Log.verboseAdvanced({ indent: options.indent, logLevel:
|
|
106
|
+
logger_1.Log.verboseAdvanced({ indent: options.indent, logLevel: options.logLevel, tag }, output);
|
|
107
107
|
}
|
|
108
108
|
});
|
|
109
109
|
(_b = this.proc.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (d) => {
|
|
@@ -114,7 +114,7 @@ class BrowserRunner {
|
|
|
114
114
|
return;
|
|
115
115
|
}
|
|
116
116
|
const { output, tag } = formatted;
|
|
117
|
-
logger_1.Log.verboseAdvanced({ indent: options.indent, logLevel:
|
|
117
|
+
logger_1.Log.verboseAdvanced({ indent: options.indent, logLevel: options.logLevel, tag }, output);
|
|
118
118
|
}
|
|
119
119
|
});
|
|
120
120
|
}
|
|
@@ -200,8 +200,8 @@ class BrowserRunner {
|
|
|
200
200
|
}
|
|
201
201
|
async setupConnection(options) {
|
|
202
202
|
(0, assert_1.assert)(this.proc, 'BrowserRunner not started.');
|
|
203
|
-
const { timeout
|
|
204
|
-
const browserWSEndpoint = await waitForWSEndpoint(this.proc, timeout
|
|
203
|
+
const { timeout } = options;
|
|
204
|
+
const browserWSEndpoint = await waitForWSEndpoint(this.proc, timeout);
|
|
205
205
|
const transport = await NodeWebSocketTransport_1.NodeWebSocketTransport.create(browserWSEndpoint);
|
|
206
206
|
this.connection = new Connection_1.Connection(transport);
|
|
207
207
|
return this.connection;
|
|
@@ -209,7 +209,7 @@ class BrowserRunner {
|
|
|
209
209
|
}
|
|
210
210
|
exports.BrowserRunner = BrowserRunner;
|
|
211
211
|
_BrowserRunner_executablePath = new WeakMap(), _BrowserRunner_processArguments = new WeakMap(), _BrowserRunner_userDataDir = new WeakMap(), _BrowserRunner_closed = new WeakMap(), _BrowserRunner_listeners = new WeakMap(), _BrowserRunner_processClosing = new WeakMap();
|
|
212
|
-
function waitForWSEndpoint(browserProcess, timeout
|
|
212
|
+
function waitForWSEndpoint(browserProcess, timeout) {
|
|
213
213
|
(0, assert_1.assert)(browserProcess.stderr, '`browserProcess` does not have stderr.');
|
|
214
214
|
const rl = readline.createInterface(browserProcess.stderr);
|
|
215
215
|
let stderr = '';
|
|
@@ -240,7 +240,7 @@ function waitForWSEndpoint(browserProcess, timeout, preferredRevision) {
|
|
|
240
240
|
}
|
|
241
241
|
function onTimeout() {
|
|
242
242
|
cleanup();
|
|
243
|
-
reject(new Errors_1.TimeoutError(`Timed out after ${timeout} ms while trying to connect to the browser
|
|
243
|
+
reject(new Errors_1.TimeoutError(`Timed out after ${timeout} ms while trying to connect to the browser!`));
|
|
244
244
|
}
|
|
245
245
|
function onLine(line) {
|
|
246
246
|
stderr += line + '\n';
|
|
@@ -7,7 +7,10 @@ export declare class Connection extends EventEmitter {
|
|
|
7
7
|
constructor(transport: NodeWebSocketTransport);
|
|
8
8
|
static fromSession(session: CDPSession): Connection | undefined;
|
|
9
9
|
session(sessionId: string): CDPSession | null;
|
|
10
|
-
send<T extends keyof Commands>(method: T, ...paramArgs: Commands[T]['paramsType']): Promise<
|
|
10
|
+
send<T extends keyof Commands>(method: T, ...paramArgs: Commands[T]['paramsType']): Promise<{
|
|
11
|
+
value: Commands[T]['returnType'];
|
|
12
|
+
size: number;
|
|
13
|
+
}>;
|
|
11
14
|
_rawSend(message: Record<string, unknown>): number;
|
|
12
15
|
dispose(): void;
|
|
13
16
|
/**
|
|
@@ -34,8 +37,11 @@ export declare class CDPSession extends EventEmitter {
|
|
|
34
37
|
#private;
|
|
35
38
|
constructor(connection: Connection, targetType: string, sessionId: string);
|
|
36
39
|
connection(): Connection | undefined;
|
|
37
|
-
send<T extends keyof Commands>(method: T, ...paramArgs: Commands[T]['paramsType']): Promise<
|
|
38
|
-
|
|
40
|
+
send<T extends keyof Commands>(method: T, ...paramArgs: Commands[T]['paramsType']): Promise<{
|
|
41
|
+
value: Commands[T]['returnType'];
|
|
42
|
+
size: number;
|
|
43
|
+
}>;
|
|
44
|
+
_onMessage(object: CDPSessionOnMessageObject, size: number): void;
|
|
39
45
|
_onClosed(): void;
|
|
40
46
|
id(): string;
|
|
41
47
|
}
|
|
@@ -68,6 +68,7 @@ class Connection extends EventEmitter_1.EventEmitter {
|
|
|
68
68
|
reject,
|
|
69
69
|
error: new Errors_1.ProtocolError(),
|
|
70
70
|
method,
|
|
71
|
+
returnSize: true,
|
|
71
72
|
});
|
|
72
73
|
});
|
|
73
74
|
}
|
|
@@ -87,7 +88,7 @@ class Connection extends EventEmitter_1.EventEmitter {
|
|
|
87
88
|
* @returns The CDP session that is created
|
|
88
89
|
*/
|
|
89
90
|
async createSession(targetInfo) {
|
|
90
|
-
const { sessionId } = await this.send('Target.attachToTarget', {
|
|
91
|
+
const { value: { sessionId }, } = await this.send('Target.attachToTarget', {
|
|
91
92
|
targetId: targetInfo.targetId,
|
|
92
93
|
flatten: true,
|
|
93
94
|
});
|
|
@@ -126,7 +127,7 @@ _Connection_transport = new WeakMap(), _Connection_lastId = new WeakMap(), _Conn
|
|
|
126
127
|
if (object.sessionId) {
|
|
127
128
|
const session = __classPrivateFieldGet(this, _Connection_sessions, "f").get(object.sessionId);
|
|
128
129
|
if (session) {
|
|
129
|
-
session._onMessage(object);
|
|
130
|
+
session._onMessage(object, message.length);
|
|
130
131
|
}
|
|
131
132
|
}
|
|
132
133
|
else if (object.id) {
|
|
@@ -137,6 +138,9 @@ _Connection_transport = new WeakMap(), _Connection_lastId = new WeakMap(), _Conn
|
|
|
137
138
|
if (object.error) {
|
|
138
139
|
callback.reject(createProtocolError(callback.error, callback.method, object));
|
|
139
140
|
}
|
|
141
|
+
else if (callback.returnSize) {
|
|
142
|
+
callback.resolve({ value: object.result, size: message.length });
|
|
143
|
+
}
|
|
140
144
|
else {
|
|
141
145
|
callback.resolve(object.result);
|
|
142
146
|
}
|
|
@@ -195,16 +199,20 @@ class CDPSession extends EventEmitter_1.EventEmitter {
|
|
|
195
199
|
reject,
|
|
196
200
|
error: new Errors_1.ProtocolError(),
|
|
197
201
|
method,
|
|
202
|
+
returnSize: true,
|
|
198
203
|
});
|
|
199
204
|
});
|
|
200
205
|
}
|
|
201
|
-
_onMessage(object) {
|
|
206
|
+
_onMessage(object, size) {
|
|
202
207
|
const callback = object.id ? __classPrivateFieldGet(this, _CDPSession_callbacks, "f").get(object.id) : undefined;
|
|
203
208
|
if (object.id && callback) {
|
|
204
209
|
__classPrivateFieldGet(this, _CDPSession_callbacks, "f").delete(object.id);
|
|
205
210
|
if (object.error) {
|
|
206
211
|
callback.reject(createProtocolError(callback.error, callback.method, object));
|
|
207
212
|
}
|
|
213
|
+
else if (callback.returnSize) {
|
|
214
|
+
callback.resolve({ value: object.result, size });
|
|
215
|
+
}
|
|
208
216
|
else {
|
|
209
217
|
callback.resolve(object.result);
|
|
210
218
|
}
|
|
@@ -25,7 +25,14 @@ export declare class ConsoleMessage {
|
|
|
25
25
|
type: ConsoleMessageType;
|
|
26
26
|
text: string;
|
|
27
27
|
args: JSHandle[];
|
|
28
|
-
|
|
28
|
+
previewString: string;
|
|
29
|
+
constructor({ type, text, args, stackTraceLocations, previewString, }: {
|
|
30
|
+
type: ConsoleMessageType;
|
|
31
|
+
text: string;
|
|
32
|
+
args: JSHandle[];
|
|
33
|
+
stackTraceLocations: ConsoleMessageLocation[];
|
|
34
|
+
previewString: string;
|
|
35
|
+
});
|
|
29
36
|
location(): ConsoleMessageLocation;
|
|
30
37
|
stackTrace(): ConsoleMessageLocation[];
|
|
31
38
|
}
|