@remotion/renderer 4.1.0-alpha1 → 4.1.0-alpha10

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.
Files changed (96) hide show
  1. package/dist/assets/download-and-map-assets-to-file.d.ts +2 -4
  2. package/dist/assets/download-and-map-assets-to-file.js +14 -10
  3. package/dist/assets/download-map.d.ts +4 -0
  4. package/dist/assets/download-map.js +3 -0
  5. package/dist/audio-codec.d.ts +1 -1
  6. package/dist/browser/Browser.d.ts +7 -6
  7. package/dist/browser/Browser.js +13 -13
  8. package/dist/browser/BrowserPage.d.ts +21 -6
  9. package/dist/browser/BrowserPage.js +80 -19
  10. package/dist/browser/BrowserRunner.d.ts +0 -1
  11. package/dist/browser/BrowserRunner.js +6 -6
  12. package/dist/browser/Connection.d.ts +9 -3
  13. package/dist/browser/Connection.js +11 -3
  14. package/dist/browser/ConsoleMessage.d.ts +8 -1
  15. package/dist/browser/ConsoleMessage.js +2 -1
  16. package/dist/browser/DOMWorld.d.ts +10 -4
  17. package/dist/browser/DOMWorld.js +16 -15
  18. package/dist/browser/ExecutionContext.js +4 -4
  19. package/dist/browser/FrameManager.d.ts +3 -6
  20. package/dist/browser/FrameManager.js +11 -16
  21. package/dist/browser/LaunchOptions.d.ts +2 -0
  22. package/dist/browser/Launcher.js +3 -3
  23. package/dist/browser/NetworkManager.d.ts +4 -1
  24. package/dist/browser/Target.d.ts +2 -1
  25. package/dist/browser/Target.js +3 -1
  26. package/dist/browser/create-browser-fetcher.js +19 -24
  27. package/dist/browser/devtools-types.d.ts +59 -0
  28. package/dist/browser/should-log-message.js +14 -0
  29. package/dist/chalk/index.d.ts +2 -1
  30. package/dist/chalk/index.js +3 -8
  31. package/dist/chalk/is-color-supported.d.ts +1 -1
  32. package/dist/chalk/is-color-supported.js +18 -10
  33. package/dist/client.d.ts +26 -31
  34. package/dist/compositor/compose.js +6 -1
  35. package/dist/compositor/compositor.d.ts +3 -2
  36. package/dist/compositor/compositor.js +10 -10
  37. package/dist/compositor/payloads.d.ts +15 -1
  38. package/dist/create-ffmpeg-merge-filter.js +1 -2
  39. package/dist/cycle-browser-tabs.d.ts +2 -1
  40. package/dist/cycle-browser-tabs.js +2 -2
  41. package/dist/format-logs.d.ts +3 -0
  42. package/dist/format-logs.js +207 -0
  43. package/dist/get-browser-instance.d.ts +3 -2
  44. package/dist/get-browser-instance.js +5 -5
  45. package/dist/get-bundle-url-from-serve-url.d.ts +2 -0
  46. package/dist/get-bundle-url-from-serve-url.js +30 -0
  47. package/dist/get-compositions.d.ts +7 -6
  48. package/dist/get-compositions.js +21 -11
  49. package/dist/get-extension-from-codec.d.ts +2 -2
  50. package/dist/get-local-browser-executable.js +15 -0
  51. package/dist/get-video-metadata.d.ts +2 -0
  52. package/dist/get-video-metadata.js +14 -0
  53. package/dist/index.d.ts +64 -61
  54. package/dist/index.js +3 -1
  55. package/dist/logger.d.ts +2 -2
  56. package/dist/logger.js +23 -18
  57. package/dist/offthread-video-server.d.ts +3 -3
  58. package/dist/offthread-video-server.js +65 -29
  59. package/dist/open-browser.d.ts +3 -2
  60. package/dist/open-browser.js +7 -5
  61. package/dist/options/crf.js +1 -1
  62. package/dist/options/video-codec.js +1 -1
  63. package/dist/perf.js +4 -2
  64. package/dist/prepare-server.d.ts +4 -5
  65. package/dist/prepare-server.js +16 -14
  66. package/dist/prespawn-ffmpeg.d.ts +2 -1
  67. package/dist/prespawn-ffmpeg.js +3 -31
  68. package/dist/puppeteer-evaluate.d.ts +4 -1
  69. package/dist/puppeteer-evaluate.js +5 -5
  70. package/dist/render-frames.d.ts +16 -8
  71. package/dist/render-frames.js +50 -22
  72. package/dist/render-media.d.ts +17 -9
  73. package/dist/render-media.js +41 -26
  74. package/dist/render-still.d.ts +13 -6
  75. package/dist/render-still.js +32 -17
  76. package/dist/replace-browser.d.ts +2 -1
  77. package/dist/replace-browser.js +2 -2
  78. package/dist/screenshot-task.js +4 -2
  79. package/dist/seek-to-frame.d.ts +8 -2
  80. package/dist/seek-to-frame.js +87 -25
  81. package/dist/select-composition.d.ts +10 -5
  82. package/dist/select-composition.js +39 -18
  83. package/dist/serialize-props.d.ts +6 -0
  84. package/dist/serialize-props.js +36 -0
  85. package/dist/serve-handler/index.js +1 -1
  86. package/dist/serve-static.d.ts +2 -3
  87. package/dist/serve-static.js +10 -4
  88. package/dist/set-props-and-env.d.ts +4 -1
  89. package/dist/set-props-and-env.js +52 -22
  90. package/dist/stitch-frames-to-video.d.ts +2 -1
  91. package/dist/stitch-frames-to-video.js +12 -22
  92. package/dist/symbolicate-stacktrace.d.ts +3 -2
  93. package/dist/symbolicate-stacktrace.js +14 -7
  94. package/dist/take-frame-and-compose.js +1 -1
  95. package/dist/validate-output-filename.d.ts +1 -1
  96. 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, emitter, }: {
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: (emitter: OffthreadVideoServerEmitter, onDownload: RenderMediaOnDownload | null) => () => void;
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, emitter, }) => {
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 emitter = new offthread_video_server_1.OffthreadVideoServerEmitter();
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 = (emitter, onDownload) => {
257
+ const attachDownloadListenerToEmitter = (downloadMap, onDownload) => {
261
258
  const cleanup = [];
262
259
  if (!onDownload) {
263
260
  return () => undefined;
264
261
  }
265
- const a = emitter.addEventListener('download', ({ detail: { src: initialSrc } }) => {
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;
@@ -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: const[];
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 {};
@@ -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
- constructor(client: CDPSession, target: Target, browser: HeadlessBrowser, sourcemapContext: AnySourceMapConsumer | null);
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: string, options?: WaitForOptions & {
79
- referer?: string;
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(client, target, browser, sourcemapContext);
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, __classPrivateFieldGet(this, _Page_timeoutSettings, "f")), "f");
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
- this.sourcemapContext = sourcemapContext;
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
- logger_1.Log.verboseAdvanced({
115
- logLevel: (0, logger_1.getLogLevel)(),
116
- tag: `console.${log.type}()`,
117
- secondTag: [origPosition.name, file].filter(truthy_1.truthy).join('@'),
118
- indent: false,
119
- }, log.text);
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: (0, logger_1.getLogLevel)(), tag: `console.${log.type}`, indent: false }, log.text);
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
- return __classPrivateFieldGet(this, _Page_client, "f").send('Emulation.setDeviceMetricsOverride', {
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
- this.sourcemapContext = context;
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(level, text, [], [{ url, lineNumber }]));
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 message = new ConsoleMessage_1.ConsoleMessage(eventType, textTokens.join(' '), args, stackTraceLocations);
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
  };
@@ -31,6 +31,5 @@ export declare class BrowserRunner {
31
31
  kill(): void;
32
32
  setupConnection(options: {
33
33
  timeout: number;
34
- preferredRevision: string;
35
34
  }): Promise<Connection>;
36
35
  }
@@ -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: (0, logger_1.getLogLevel)(), tag }, output);
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: (0, logger_1.getLogLevel)(), tag }, output);
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, preferredRevision } = options;
204
- const browserWSEndpoint = await waitForWSEndpoint(this.proc, timeout, preferredRevision);
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, preferredRevision) {
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! Only Chrome at revision r${preferredRevision} is guaranteed to work.`));
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<Commands[T]['returnType']>;
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<Commands[T]['returnType']>;
38
- _onMessage(object: CDPSessionOnMessageObject): void;
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
- constructor(type: ConsoleMessageType, text: string, args: JSHandle[], stackTraceLocations: ConsoleMessageLocation[]);
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
  }