blob: cb9cf5f3d49282fa4a0932a828a5792b2132b6ef [file] [log] [blame]
Kevin Lubick217056c2018-09-20 17:39:31 -04001/*
2 * This externs file prevents the Closure JS compiler from minifying away
3 * names of objects created by Emscripten.
4 * Basically, by defining empty objects and functions here, Closure will
5 * know not to rename them. This is needed because of our pre-js files,
6 * that is, the JS we hand-write to bundle into the output. That JS will be
7 * hit by the closure compiler and thus needs to know about what functions
8 * have special names and should not be minified.
9 *
10 * Emscripten does not support automatically generating an externs file, so we
11 * do it by hand. The general process is to write some JS code, and then put any
12 * calls to CanvasKit or related things in here. Running ./compile.sh and then
13 * looking at the minified results or running the Release trybot should
14 * verify nothing was missed. Optionally, looking directly at the minified
15 * pathkit.js can be useful when developing locally.
16 *
17 * Docs:
18 * https://github.com/cljsjs/packages/wiki/Creating-Externs
19 * https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System
20 *
21 * Example externs:
22 * https://github.com/google/closure-compiler/tree/master/externs
23 */
24
25var CanvasKit = {
26 // public API (i.e. things we declare in the pre-js file)
Kevin Lubick006a6f32018-10-19 14:34:34 -040027 Color: function() {},
28 /** @return {CanvasKit.SkRect} */
29 LTRBRect: function() {},
Kevin Lubick0a1293c2018-12-03 12:31:04 -050030 /** @return {CanvasKit.SkRect} */
31 XYWHRect: function() {},
Kevin Lubick7d644e12019-09-11 14:22:22 -040032 /** @return {CanvasKit.SkRRect} */
33 RRectXY: function() {},
Kevin Lubick52b9f372018-12-04 13:57:36 -050034 /** @return {ImageData} */
35 ImageData: function() {},
Kevin Lubick543f3522019-03-08 10:04:28 -050036
37 GetWebGLContext: function() {},
Kevin Lubick61ef7b22018-11-27 13:26:59 -050038 MakeBlurMaskFilter: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -040039 MakeCanvas: function() {},
40 MakeCanvasSurface: function() {},
Kevin Lubick543f3522019-03-08 10:04:28 -050041 MakeGrContext: function() {},
Kevin Lubick6b921b72019-09-18 16:18:17 -040042 /** @return {CanvasKit.SkAnimatedImage} */
43 MakeAnimatedImageFromEncoded: function() {},
Kevin Lubick0a1293c2018-12-03 12:31:04 -050044 /** @return {CanvasKit.SkImage} */
45 MakeImageFromEncoded: function() {},
Kevin Lubickeb2f6b02018-11-29 15:07:02 -050046 /** @return {LinearCanvasGradient} */
Kevin Lubickb5ae3b52018-11-03 07:51:19 -040047 MakeLinearGradientShader: function() {},
Kevin Lubick543f3522019-03-08 10:04:28 -050048 MakeOnScreenGLSurface: function() {},
Kevin Lubickda3d8ac2019-01-07 11:08:55 -050049 MakePathFromCmds: function() {},
Kevin Lubicka40f8322018-12-17 16:01:36 -050050 MakePathFromOp: function() {},
51 MakePathFromSVGString: function() {},
Kevin Lubick61ef7b22018-11-27 13:26:59 -050052 MakeRadialGradientShader: function() {},
Kevin Lubick543f3522019-03-08 10:04:28 -050053 MakeRenderTarget: function() {},
Kevin Lubick61ef7b22018-11-27 13:26:59 -050054 MakeSWCanvasSurface: function() {},
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050055 MakeManagedAnimation: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -040056 MakeSkDashPathEffect: function() {},
Kevin Lubickb5ae3b52018-11-03 07:51:19 -040057 MakeSkVertices: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -040058 MakeSurface: function() {},
Kevin Lubickeb2f6b02018-11-29 15:07:02 -050059 /** @return {RadialCanvasGradient} */
60 MakeTwoPointConicalGradientShader: function() {},
Kevin Lubick61ef7b22018-11-27 13:26:59 -050061 MakeWebGLCanvasSurface: function() {},
Kevin Lubicke25df6c2019-10-22 09:04:32 -040062 /** @return {TypedArray} */
63 Malloc: function() {},
Kevin Lubick50f377e2019-09-11 15:23:00 -040064 /** @return {TonalColors} */
65 computeTonalColors: function() {},
Kevin Lubick217056c2018-09-20 17:39:31 -040066 currentContext: function() {},
Kevin Lubick61ef7b22018-11-27 13:26:59 -050067 getColorComponents: function() {},
Kevin Lubick12c0e502018-11-28 12:51:56 -050068 getSkDataBytes: function() {},
Kevin Lubick12c0e502018-11-28 12:51:56 -050069 multiplyByAlpha: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -040070 setCurrentContext: function() {},
Kevin Lubick217056c2018-09-20 17:39:31 -040071
72 // private API (i.e. things declared in the bindings that we use
73 // in the pre-js file)
Kevin Lubick52b9f372018-12-04 13:57:36 -050074 _MakeImage: function() {},
Kevin Lubickb5ae3b52018-11-03 07:51:19 -040075 _MakeLinearGradientShader: function() {},
Kevin Lubickda3d8ac2019-01-07 11:08:55 -050076 _MakePathFromCmds: function() {},
Kevin Lubickb5ae3b52018-11-03 07:51:19 -040077 _MakeRadialGradientShader: function() {},
Kevin Lubickf5ea37f2019-02-28 10:06:18 -050078 _MakeManagedAnimation: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -040079 _MakeSkDashPathEffect: function() {},
Kevin Lubickb5ae3b52018-11-03 07:51:19 -040080 _MakeSkVertices: function() {},
Kevin Lubickeb2f6b02018-11-29 15:07:02 -050081 _MakeTwoPointConicalGradientShader: function() {},
Kevin Lubick6b921b72019-09-18 16:18:17 -040082 _decodeAnimatedImage: function() {},
Kevin Lubick0a1293c2018-12-03 12:31:04 -050083 _decodeImage: function() {},
Kevin Lubick1ba9c4d2019-02-22 10:04:06 -050084 _drawShapedText: function() {},
Kevin Lubickea905ec2018-11-30 14:05:58 -050085 _getRasterDirectSurface: function() {},
Kevin Lubick134be1d2018-10-30 15:05:04 -040086 _getRasterN32PremulSurface: function() {},
Kevin Lubick217056c2018-09-20 17:39:31 -040087
Kevin Lubick1a05fce2018-11-20 12:51:16 -050088 // The testing object is meant to expose internal functions
89 // for more fine-grained testing, e.g. parseColor
90 _testing: {},
91
Kevin Lubick217056c2018-09-20 17:39:31 -040092 // Objects and properties on CanvasKit
93
Kevin Lubickcd544662019-03-22 15:41:36 -040094 GrContext: {
95 // public API (from C++ bindings)
96 getResourceCacheLimitBytes: function() {},
97 getResourceCacheUsageBytes: function() {},
98 setResourceCacheLimitBytes: function() {},
99 },
100
Kevin Lubick369f6a52019-10-03 11:22:08 -0400101 Paragraph: {
102 // public API (from C++ bindings)
Kevin Lubick04912672019-11-15 14:48:55 -0500103 didExceedMaxLines: function() {},
104 getAlphabeticBaseline: function() {},
Kevin Lubick369f6a52019-10-03 11:22:08 -0400105 getGlyphPositionAtCoordinate: function() {},
Kevin Lubick04912672019-11-15 14:48:55 -0500106 getHeight: function() {},
107 getIdeographicBaseline: function() {},
108 getLongestLine: function() {},
109 getMaxIntrinsicWidth: function() {},
110 getMaxWidth: function() {},
111 getMinIntrinsicWidth: function() {},
112 getWordBoundary: function() {},
Kevin Lubick369f6a52019-10-03 11:22:08 -0400113 layout: function() {},
114
115 // private API
116 /** @return {Float32Array} */
117 _getRectsForRange: function() {},
118 },
119
120 ParagraphStyle: function() {},
Kevin Lubickd3cfbca2019-03-15 15:36:29 -0400121 RSXFormBuilder: function() {},
Kevin Lubickee91c072019-03-29 10:39:52 -0400122 SkColorBuilder: function() {},
123 SkRectBuilder: function() {},
Kevin Lubickd3cfbca2019-03-15 15:36:29 -0400124
Kevin Lubick1ba9c4d2019-02-22 10:04:06 -0500125 ShapedText: {
126 // public API (from C++ bindings)
127 getBounds: function() {},
128 },
129
Kevin Lubick6b921b72019-09-18 16:18:17 -0400130 SkAnimatedImage: {
131 // public API (from C++ bindings)
Kevin Lubick6b921b72019-09-18 16:18:17 -0400132 decodeNextFrame: function() {},
Kevin Lubick47bd9f12019-11-08 06:55:15 -0800133 getFrameCount: function() {},
134 getRepetitionCount: function() {},
135 height: function() {},
136 reset: function() {},
137 width: function() {},
Kevin Lubick6b921b72019-09-18 16:18:17 -0400138 },
139
Kevin Lubick006a6f32018-10-19 14:34:34 -0400140 SkCanvas: {
141 // public API (from C++ bindings)
142 clear: function() {},
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500143 clipPath: function() {},
Kevin Lubick6dbc4ed2019-10-22 09:43:34 -0400144 clipRRect: function() {},
Kevin Lubick5d5723c2018-12-07 10:09:11 -0500145 clipRect: function() {},
146 concat: function() {},
Kevin Lubick6dbc4ed2019-10-22 09:43:34 -0400147 drawAnimatedImage: function() {},
Kevin Lubickda3d8ac2019-01-07 11:08:55 -0500148 drawArc: function() {},
Kevin Lubicke384df42019-08-26 15:48:09 -0400149 drawCircle: function() {},
Kevin Lubick6dbc4ed2019-10-22 09:43:34 -0400150 drawColor: function() {},
Kevin Lubick2e5fe352019-09-03 12:59:06 -0400151 drawDRRect: function() {},
Kevin Lubick0a1293c2018-12-03 12:31:04 -0500152 drawImage: function() {},
Kevin Lubick37ab53e2019-11-11 10:06:08 -0500153 drawImageNine: function() {},
Kevin Lubick0a1293c2018-12-03 12:31:04 -0500154 drawImageRect: function() {},
Kevin Lubickda3d8ac2019-01-07 11:08:55 -0500155 drawLine: function() {},
156 drawOval: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400157 drawPaint: function() {},
Kevin Lubick369f6a52019-10-03 11:22:08 -0400158 drawParagraph: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400159 drawPath: function() {},
Kevin Lubickcc13fd32019-04-05 13:00:01 -0400160 drawPicture: function() {},
Kevin Lubick2e5fe352019-09-03 12:59:06 -0400161 drawRRect: function() {},
Kevin Lubick12c0e502018-11-28 12:51:56 -0500162 drawRect: function() {},
Kevin Lubickda3d8ac2019-01-07 11:08:55 -0500163 drawRoundRect: function() {},
Kevin Lubick61ef7b22018-11-27 13:26:59 -0500164 drawShadow: function() {},
Kevin Lubick12c0e502018-11-28 12:51:56 -0500165 drawText: function() {},
Kevin Lubickec4903d2019-01-14 08:36:08 -0500166 drawTextBlob: function() {},
Kevin Lubick12c0e502018-11-28 12:51:56 -0500167 drawVertices: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400168 flush: function() {},
Kevin Lubick2e5fe352019-09-03 12:59:06 -0400169 getSaveCount: function() {},
Kevin Lubick5d5723c2018-12-07 10:09:11 -0500170 getTotalMatrix: function() {},
Kevin Lubick543f3522019-03-08 10:04:28 -0500171 makeSurface: function() {},
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500172 restore: function() {},
Kevin Lubickb3574c92019-03-06 08:25:36 -0500173 restoreToCount: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400174 rotate: function() {},
175 save: function() {},
Kevin Lubickb3574c92019-03-06 08:25:36 -0500176 saveLayer: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400177 scale: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400178 skew: function() {},
179 translate: function() {},
180
181 // private API
Kevin Lubickee91c072019-03-29 10:39:52 -0400182 _drawAtlas: function() {},
Kevin Lubick37ab53e2019-11-11 10:06:08 -0500183 _drawPoints: function() {},
Kevin Lubickec4903d2019-01-14 08:36:08 -0500184 _drawSimpleText: function() {},
Kevin Lubick52b9f372018-12-04 13:57:36 -0500185 _readPixels: function() {},
186 _writePixels: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400187 delete: function() {},
188 },
189
Kevin Lubickd3729342019-09-12 11:11:25 -0400190 SkColorFilter: {
191 // public API (from C++ bindings and JS interface)
192 MakeBlend: function() {},
193 MakeCompose: function() {},
194 MakeLerp: function() {},
195 MakeLinearToSRGBGamma: function() {},
196 MakeMatrix: function() {},
197 MakeSRGBToLinearGamma: function() {},
198 // private API (from C++ bindings)
199 _makeMatrix: function() {},
200 },
201
202 SkColorMatrix: {
203 concat: function() {},
204 identity: function() {},
205 postTranslate: function() {},
206 rotated: function() {},
207 scaled: function() {},
208 },
209
Kevin Lubick35ac0382019-01-02 15:13:57 -0500210 SkFont: {
211 // public API (from C++ bindings)
212 getScaleX: function() {},
213 getSize: function() {},
214 getSkewX: function() {},
215 getTypeface: function() {},
216 measureText: function() {},
217 setScaleX: function() {},
218 setSize: function() {},
219 setSkewX: function() {},
220 setTypeface: function() {},
Kevin Lubickd3cfbca2019-03-15 15:36:29 -0400221 // private API (from C++ bindings)
222 _getWidths: function() {},
Kevin Lubick35ac0382019-01-02 15:13:57 -0500223 },
224
Kevin Lubickddd0a332018-12-12 10:35:13 -0500225 SkFontMgr: {
Kevin Lubick61887c72019-09-26 13:20:50 -0400226 // public API (from C++ and JS bindings)
227 FromData: function() {},
Kevin Lubickddd0a332018-12-12 10:35:13 -0500228 RefDefault: function() {},
229 countFamilies: function() {},
230
231 // private API
232 _makeTypefaceFromData: function() {},
Kevin Lubick61887c72019-09-26 13:20:50 -0400233 _fromData: function() {},
Kevin Lubickddd0a332018-12-12 10:35:13 -0500234 },
235
Kevin Lubick006a6f32018-10-19 14:34:34 -0400236 SkImage: {
Kevin Lubick0a1293c2018-12-03 12:31:04 -0500237 // public API (from C++ bindings)
238 height: function() {},
239 width: function() {},
Alexander Khovansky3e119332018-11-15 02:01:19 +0300240 // private API
241 _encodeToData: function() {},
242 _encodeToDataWithFormat: function() {},
Kevin Lubicka064c282019-04-04 09:28:53 -0400243 _makeShader: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400244 },
245
Kevin Lubick15b40232019-10-29 09:55:39 -0400246 SkImageFilter: {
247 MakeBlur: function() {},
248 MakeColorFilter: function() {},
249 MakeCompose: function() {},
Kevin Lubickd2677192019-11-15 14:13:20 -0500250 MakeMatrixTransform: function() {},
Kevin Lubick15b40232019-10-29 09:55:39 -0400251 },
252
Kevin Lubick1a05fce2018-11-20 12:51:16 -0500253 SkMatrix: {
Kevin Lubickb9db3902018-11-26 11:47:54 -0500254 identity: function() {},
Kevin Lubickf3555182019-03-14 10:55:10 -0400255 invert: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500256 mapPoints: function() {},
257 multiply: function() {},
Kevin Lubick1a05fce2018-11-20 12:51:16 -0500258 rotated: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500259 scaled: function() {},
260 skewed: function() {},
261 translated: function() {},
262 },
263
Kevin Lubick15b40232019-10-29 09:55:39 -0400264 SkMaskFilter: {
265 MakeBlur: function() {},
266 },
267
Kevin Lubickb9db3902018-11-26 11:47:54 -0500268 SkPaint: {
269 // public API (from C++ bindings)
270 /** @return {CanvasKit.SkPaint} */
271 copy: function() {},
Kevin Lubick12c0e502018-11-28 12:51:56 -0500272 getBlendMode: function() {},
Kevin Lubick61ef7b22018-11-27 13:26:59 -0500273 getColor: function() {},
Kevin Lubick0a1293c2018-12-03 12:31:04 -0500274 getFilterQuality: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500275 getStrokeCap: function() {},
276 getStrokeJoin: function() {},
277 getStrokeMiter: function() {},
278 getStrokeWidth: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500279 setAntiAlias: function() {},
Kevin Lubick12c0e502018-11-28 12:51:56 -0500280 setBlendMode: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500281 setColor: function() {},
Kevin Lubick0a1293c2018-12-03 12:31:04 -0500282 setFilterQuality: function() {},
Kevin Lubick15b40232019-10-29 09:55:39 -0400283 setImageFilter: function() {},
Kevin Lubick61ef7b22018-11-27 13:26:59 -0500284 setMaskFilter: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500285 setPathEffect: function() {},
286 setShader: function() {},
287 setStrokeCap: function() {},
288 setStrokeJoin: function() {},
289 setStrokeMiter: function() {},
290 setStrokeWidth: function() {},
291 setStyle: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500292
293 //private API
294 delete: function() {},
Kevin Lubick1a05fce2018-11-20 12:51:16 -0500295 },
296
Kevin Lubick006a6f32018-10-19 14:34:34 -0400297 SkPath: {
298 // public API (from C++ bindings)
Kevin Lubickb9db3902018-11-26 11:47:54 -0500299 computeTightBounds: function() {},
Kevin Lubick1646e7d2018-12-07 13:03:08 -0500300 contains: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500301 /** @return {CanvasKit.SkPath} */
302 copy: function() {},
303 countPoints: function() {},
304 equals: function() {},
305 getBounds: function() {},
306 getFillType: function() {},
307 getPoint: function() {},
Kevin Lubick1646e7d2018-12-07 13:03:08 -0500308 isEmpty: function() {},
Kevin Lubick2b79d1c2018-12-14 16:10:38 -0500309 isVolatile: function() {},
Kevin Lubickda3d8ac2019-01-07 11:08:55 -0500310 reset: function() {},
311 rewind: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500312 setFillType: function() {},
Kevin Lubick2b79d1c2018-12-14 16:10:38 -0500313 setIsVolatile: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500314 toSVGString: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400315
316 // private API
Kevin Lubick1a05fce2018-11-20 12:51:16 -0500317 _addArc: function() {},
Kevin Lubicke384df42019-08-26 15:48:09 -0400318 _addOval: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400319 _addPath: function() {},
Kevin Lubick1a05fce2018-11-20 12:51:16 -0500320 _addRect: function() {},
Kevin Lubick37ab53e2019-11-11 10:06:08 -0500321 _addPoly: function() {},
Kevin Lubickda3d8ac2019-01-07 11:08:55 -0500322 _addRoundRect: function() {},
Alexander Khovansky3e119332018-11-15 02:01:19 +0300323 _arc: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400324 _arcTo: function() {},
325 _close: function() {},
326 _conicTo: function() {},
327 _cubicTo: function() {},
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400328 _dash: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400329 _lineTo: function() {},
330 _moveTo: function() {},
331 _op: function() {},
332 _quadTo: function() {},
Kevin Lubick79b71342019-11-01 14:36:52 -0400333 _rArcTo: function() {},
334 _rConicTo: function() {},
335 _rCubicTo: function() {},
336 _rLineTo: function() {},
337 _rMoveTo: function() {},
338 _rQuadTo: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400339 _rect: function() {},
340 _simplify: function() {},
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400341 _stroke: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400342 _transform: function() {},
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400343 _trim: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400344 delete: function() {},
Kevin Lubickb9db3902018-11-26 11:47:54 -0500345 dump: function() {},
346 dumpHex: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400347 },
348
Kevin Lubickd3cfbca2019-03-15 15:36:29 -0400349 SkPathMeasure: {
350 getLength: function() {},
Kevin Lubick37ab53e2019-11-11 10:06:08 -0500351 getSegment: function() {},
Kevin Lubickd3cfbca2019-03-15 15:36:29 -0400352 getPosTan: function() {},
353 isClosed: function() {},
354 nextContour: function() {},
355 },
356
Kevin Lubickcc13fd32019-04-05 13:00:01 -0400357 SkPicture: {
358 DEBUGONLY_serialize: function() {},
359 },
360
361 SkPictureRecorder: {
362 beginRecording: function() {},
363 finishRecordingAsPicture: function() {},
364 },
365
Kevin Lubick006a6f32018-10-19 14:34:34 -0400366 SkRect: {
367 fLeft: {},
368 fTop: {},
369 fRight: {},
370 fBottom: {},
371 },
372
Kevin Lubick2e5fe352019-09-03 12:59:06 -0400373 SkRRect: {
374 rect: {},
Kevin Lubick7d644e12019-09-11 14:22:22 -0400375 rx1: {},
376 ry1: {},
377 rx2: {},
378 ry2: {},
379 rx3: {},
380 ry3: {},
381 rx4: {},
382 ry4: {},
Kevin Lubick2e5fe352019-09-03 12:59:06 -0400383 },
384
Kevin Lubick006a6f32018-10-19 14:34:34 -0400385 SkSurface: {
386 // public API (from C++ bindings)
387 /** @return {CanvasKit.SkCanvas} */
388 getCanvas: function() {},
389 /** @return {CanvasKit.SkImage} */
390 makeImageSnapshot: function() {},
Kevin Lubick543f3522019-03-08 10:04:28 -0500391 makeSurface: function() {},
Kevin Lubickcd544662019-03-22 15:41:36 -0400392 grContext: {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400393
394 // private API
395 _flush: function() {},
396 _getRasterN32PremulSurface: function() {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400397 delete: function() {},
398 },
399
Kevin Lubickec4903d2019-01-14 08:36:08 -0500400 SkTextBlob: {
Kevin Lubickd3cfbca2019-03-15 15:36:29 -0400401 // public API (both C++ and JS bindings)
402 MakeFromRSXform: function() {},
Kevin Lubickec4903d2019-01-14 08:36:08 -0500403 MakeFromText: function() {},
Kevin Lubickd3cfbca2019-03-15 15:36:29 -0400404 MakeOnPath: function() {},
405 // private API (from C++ bindings)
406 _MakeFromRSXform: function() {},
Kevin Lubickec4903d2019-01-14 08:36:08 -0500407 _MakeFromText: function() {},
408 },
409
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400410 SkVertices: {
411 // public API (from C++ bindings)
Kevin Lubick12c0e502018-11-28 12:51:56 -0500412 bounds: function() {},
413 mode: function() {},
414 uniqueID: function() {},
415 vertexCount: function() {},
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400416
417 // private API
418 /** @return {CanvasKit.SkVertices} */
419 _applyBones: function() {},
420 },
421
Kevin Lubickd6ba7252019-06-03 14:38:05 -0400422 _SkVerticesBuilder: {
423 // public API (from C++ bindings)
424 boneIndices: function() {},
425 boneWeights: function() {},
426 colors: function() {},
427 detach: function() {},
428 indices: function() {},
429 positions: function() {},
430 texCoords: function() {},
431 },
432
Kevin Lubick369f6a52019-10-03 11:22:08 -0400433 TextStyle: function() {},
434
Kevin Lubick006a6f32018-10-19 14:34:34 -0400435 // Constants and Enums
436 gpu: {},
437 skottie: {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400438
Kevin Lubick61ef7b22018-11-27 13:26:59 -0500439 TRANSPARENT: {},
440 RED: {},
441 BLUE: {},
442 YELLOW: {},
443 CYAN: {},
444 BLACK: {},
Kevin Lubickea905ec2018-11-30 14:05:58 -0500445 WHITE: {},
446
Kevin Lubickda3d8ac2019-01-07 11:08:55 -0500447 MOVE_VERB: {},
448 LINE_VERB: {},
449 QUAD_VERB: {},
450 CONIC_VERB: {},
451 CUBIC_VERB: {},
452 CLOSE_VERB: {},
453
Kevin Lubick369f6a52019-10-03 11:22:08 -0400454 NoDecoration: {},
455 UnderlineDecoration: {},
456 OverlineDecoration: {},
457 LineThroughDecoration: {},
458
Kevin Lubick77d9b5c2019-10-29 10:48:26 -0400459 SaveLayerInitWithPrevious: {},
460 SaveLayerF16ColorType: {},
461
Kevin Lubick369f6a52019-10-03 11:22:08 -0400462 Affinity: {
463 Upstream: {},
464 Downstream: {},
465 },
466
Kevin Lubickea905ec2018-11-30 14:05:58 -0500467 AlphaType: {
468 Opaque: {},
469 Premul: {},
470 Unpremul: {},
471 },
Kevin Lubick61ef7b22018-11-27 13:26:59 -0500472
473 BlendMode: {
474 Clear: {},
475 Src: {},
476 Dst: {},
477 SrcOver: {},
478 DstOver: {},
479 SrcIn: {},
480 DstIn: {},
481 SrcOut: {},
482 DstOut: {},
483 SrcATop: {},
484 DstATop: {},
485 Xor: {},
486 Plus: {},
487 Modulate: {},
488 Screen: {},
489 Overlay: {},
490 Darken: {},
491 Lighten: {},
492 ColorDodge: {},
493 ColorBurn: {},
494 HardLight: {},
495 SoftLight: {},
496 Difference: {},
497 Exclusion: {},
498 Multiply: {},
499 Hue: {},
500 Saturation: {},
501 Color: {},
502 Luminosity: {},
503 },
504
505 BlurStyle: {
506 Normal: {},
507 Solid: {},
508 Outer: {},
509 Inner: {},
510 },
511
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500512 ClipOp: {
513 Difference: {},
514 Intersect: {},
515 },
516
Kevin Lubickea905ec2018-11-30 14:05:58 -0500517 ColorType: {
518 Alpha_8: {},
519 RGB_565: {},
520 ARGB_4444: {},
521 RGBA_8888: {},
522 RGB_888x: {},
523 BGRA_8888: {},
524 RGBA_1010102: {},
525 RGB_101010x: {},
526 Gray_8: {},
527 RGBA_F16: {},
528 RGBA_F32: {},
529 },
530
Kevin Lubick006a6f32018-10-19 14:34:34 -0400531 FillType: {
Kevin Lubick1a05fce2018-11-20 12:51:16 -0500532 Winding: {},
533 EvenOdd: {},
534 InverseWinding: {},
535 InverseEvenOdd: {},
Kevin Lubick006a6f32018-10-19 14:34:34 -0400536 },
537
Kevin Lubick0a1293c2018-12-03 12:31:04 -0500538 FilterQuality: {
539 None: {},
540 Low: {},
541 Medium: {},
542 High: {},
543 },
544
Kevin Lubickd3b1fe62019-10-21 10:50:26 -0400545 FontSlant: {
546 Upright: {},
547 Italic: {},
548 Oblique: {},
549 },
550
551 FontWeight: {
552 Invisible: {},
553 Thin: {},
554 ExtraLight: {},
555 Light: {},
556 Normal: {},
557 Medium: {},
558 SemiBold: {},
559 Bold: {},
560 ExtraBold: {},
561 Black: {},
562 ExtraBlack: {},
563 },
564
565 FontWidth: {
566 UltraCondensed: {},
567 ExtraCondensed: {},
568 Condensed: {},
569 SemiCondensed: {},
570 Normal: {},
571 SemiExpanded: {},
572 Expanded: {},
573 ExtraExpanded: {},
574 UltraExpanded: {},
575 },
576
Alexander Khovansky3e119332018-11-15 02:01:19 +0300577 ImageFormat: {
578 PNG: {},
579 JPEG: {},
580 },
581
Kevin Lubickb9db3902018-11-26 11:47:54 -0500582 PaintStyle: {
583 Fill: {},
584 Stroke: {},
585 StrokeAndFill: {},
586 },
587
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500588 PathOp: {
589 Difference: {},
590 Intersect: {},
591 Union: {},
592 XOR: {},
593 ReverseDifference: {},
594 },
595
Kevin Lubick37ab53e2019-11-11 10:06:08 -0500596 PointMode: {
597 Points: {},
598 Lines: {},
599 Polygon: {},
600 },
601
Kevin Lubick369f6a52019-10-03 11:22:08 -0400602 RectHeightStyle: {
603 Tight: {},
604 Max: {},
Kevin Lubick4a5f4f22019-11-20 08:27:10 -0500605 IncludeLineSpacingMiddle: {},
606 IncludeLineSpacingTop: {},
607 IncludeLineSpacingBottom: {},
Kevin Lubick369f6a52019-10-03 11:22:08 -0400608 },
609
610 RectWidthStyle: {
611 Tight: {},
612 Max: {},
613 },
614
Kevin Lubickb9db3902018-11-26 11:47:54 -0500615 StrokeCap: {
616 Butt: {},
617 Round: {},
618 Square: {},
619 },
620
621 StrokeJoin: {
622 Miter: {},
623 Round: {},
624 Bevel: {},
625 },
626
Kevin Lubick369f6a52019-10-03 11:22:08 -0400627 TextAlign: {
628 Left: {},
629 Right: {},
630 Center: {},
631 Justify: {},
632 Start: {},
633 End: {},
634 },
635
Kevin Lubickd3b1fe62019-10-21 10:50:26 -0400636 TextDirection: {
637 LTR: {},
638 RTL: {},
639 },
640
Kevin Lubickec4903d2019-01-14 08:36:08 -0500641 TextEncoding: {
642 UTF8: {},
643 UTF16: {},
644 UTF32: {},
645 GlyphID: {},
646 },
647
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500648 TileMode: {
649 Clamp: {},
650 Repeat: {},
651 Mirror: {},
Kevin Lubickd29edd72018-12-07 08:29:52 -0500652 Decal: {},
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500653 },
654
655 VertexMode: {
656 Triangles: {},
657 TrianglesStrip: {},
658 TriangleFan: {},
659 },
660
Kevin Lubick006a6f32018-10-19 14:34:34 -0400661 // Things Enscriptem adds for us
662
Kevin Lubick53965c92018-10-11 08:51:55 -0400663 /**
664 * @type {Float32Array}
665 */
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400666 HEAPF32: {},
Kevin Lubick53965c92018-10-11 08:51:55 -0400667 /**
Kevin Lubickfa5a1382019-10-09 10:46:14 -0400668 * @type {Float64Array}
669 */
670 HEAPF64: {},
671 /**
Kevin Lubick53965c92018-10-11 08:51:55 -0400672 * @type {Uint8Array}
673 */
674 HEAPU8: {},
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400675 /**
676 * @type {Uint16Array}
677 */
678 HEAPU16: {},
679 /**
Kevin Lubickf5ea37f2019-02-28 10:06:18 -0500680 * @type {Uint32Array}
681 */
682 HEAPU32: {},
Kevin Lubickfa5a1382019-10-09 10:46:14 -0400683 /**
684 * @type {Int8Array}
685 */
686 HEAP8: {},
687 /**
688 * @type {Int16Array}
689 */
690 HEAP16: {},
691 /**
692 * @type {Int32Array}
693 */
694 HEAP32: {},
695
Kevin Lubick006a6f32018-10-19 14:34:34 -0400696 _malloc: function() {},
697 _free: function() {},
698 onRuntimeInitialized: function() {},
699};
Kevin Lubick217056c2018-09-20 17:39:31 -0400700
Kevin Lubick006a6f32018-10-19 14:34:34 -0400701// Public API things that are newly declared in the JS should go here.
702// It's not enough to declare them above, because closure can still erase them
703// unless they go on the prototype.
Kevin Lubick369f6a52019-10-03 11:22:08 -0400704CanvasKit.Paragraph.prototype.getRectsForRange = function() {};
705
Kevin Lubick1a05fce2018-11-20 12:51:16 -0500706CanvasKit.SkPath.prototype.addArc = function() {};
Kevin Lubicke384df42019-08-26 15:48:09 -0400707CanvasKit.SkPath.prototype.addOval = function() {};
Kevin Lubick217056c2018-09-20 17:39:31 -0400708CanvasKit.SkPath.prototype.addPath = function() {};
Kevin Lubick37ab53e2019-11-11 10:06:08 -0500709CanvasKit.SkPath.prototype.addPoly = function() {};
Kevin Lubick1a05fce2018-11-20 12:51:16 -0500710CanvasKit.SkPath.prototype.addRect = function() {};
Kevin Lubickda3d8ac2019-01-07 11:08:55 -0500711CanvasKit.SkPath.prototype.addRoundRect = function() {};
Alexander Khovansky3e119332018-11-15 02:01:19 +0300712CanvasKit.SkPath.prototype.arc = function() {};
Kevin Lubick006a6f32018-10-19 14:34:34 -0400713CanvasKit.SkPath.prototype.arcTo = function() {};
Kevin Lubick217056c2018-09-20 17:39:31 -0400714CanvasKit.SkPath.prototype.close = function() {};
Kevin Lubick006a6f32018-10-19 14:34:34 -0400715CanvasKit.SkPath.prototype.conicTo = function() {};
716CanvasKit.SkPath.prototype.cubicTo = function() {};
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400717CanvasKit.SkPath.prototype.dash = function() {};
Kevin Lubick006a6f32018-10-19 14:34:34 -0400718CanvasKit.SkPath.prototype.lineTo = function() {};
719CanvasKit.SkPath.prototype.moveTo = function() {};
Kevin Lubicke384df42019-08-26 15:48:09 -0400720CanvasKit.SkPath.prototype.offset = function() {};
Kevin Lubick006a6f32018-10-19 14:34:34 -0400721CanvasKit.SkPath.prototype.op = function() {};
722CanvasKit.SkPath.prototype.quadTo = function() {};
Kevin Lubick79b71342019-11-01 14:36:52 -0400723CanvasKit.SkPath.prototype.rArcTo = function() {};
724CanvasKit.SkPath.prototype.rConicTo = function() {};
725CanvasKit.SkPath.prototype.rCubicTo = function() {};
726CanvasKit.SkPath.prototype.rLineTo = function() {};
727CanvasKit.SkPath.prototype.rMoveTo = function() {};
728CanvasKit.SkPath.prototype.rQuadTo = function() {};
Kevin Lubick006a6f32018-10-19 14:34:34 -0400729CanvasKit.SkPath.prototype.rect = function() {};
Kevin Lubick217056c2018-09-20 17:39:31 -0400730CanvasKit.SkPath.prototype.simplify = function() {};
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400731CanvasKit.SkPath.prototype.stroke = function() {};
Kevin Lubick217056c2018-09-20 17:39:31 -0400732CanvasKit.SkPath.prototype.transform = function() {};
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400733CanvasKit.SkPath.prototype.trim = function() {};
Kevin Lubick217056c2018-09-20 17:39:31 -0400734
Kevin Lubickcc13fd32019-04-05 13:00:01 -0400735CanvasKit.SkPicture.prototype.DEBUGONLY_saveAsFile = function() {};
736
Kevin Lubick5b90b842018-10-17 07:57:18 -0400737CanvasKit.SkSurface.prototype.dispose = function() {};
Kevin Lubick359a7e32019-03-19 09:34:37 -0400738CanvasKit.SkSurface.prototype.flush = function() {};
739CanvasKit.SkSurface.prototype.requestAnimationFrame = function() {};
Kevin Lubickcc13fd32019-04-05 13:00:01 -0400740CanvasKit.SkSurface.prototype.captureFrameAsSkPicture = function() {};
Kevin Lubick53965c92018-10-11 08:51:55 -0400741
Kevin Lubick12c0e502018-11-28 12:51:56 -0500742/** @return {CanvasKit.SkVertices} */
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400743CanvasKit.SkVertices.prototype.applyBones = function() {};
744
Alexander Khovansky3e119332018-11-15 02:01:19 +0300745CanvasKit.SkImage.prototype.encodeToData = function() {};
Kevin Lubicka064c282019-04-04 09:28:53 -0400746CanvasKit.SkImage.prototype.makeShader = function() {};
Alexander Khovansky3e119332018-11-15 02:01:19 +0300747
Kevin Lubickee91c072019-03-29 10:39:52 -0400748CanvasKit.SkCanvas.prototype.drawAtlas = function() {};
Kevin Lubick37ab53e2019-11-11 10:06:08 -0500749CanvasKit.SkCanvas.prototype.drawPoints = function() {};
Kevin Lubickec4903d2019-01-14 08:36:08 -0500750CanvasKit.SkCanvas.prototype.drawText = function() {};
Kevin Lubick52b9f372018-12-04 13:57:36 -0500751/** @return {Uint8Array} */
752CanvasKit.SkCanvas.prototype.readPixels = function() {};
753CanvasKit.SkCanvas.prototype.writePixels = function() {};
754
Kevin Lubickddd0a332018-12-12 10:35:13 -0500755CanvasKit.SkFontMgr.prototype.MakeTypefaceFromData = function() {};
756
Kevin Lubickd3cfbca2019-03-15 15:36:29 -0400757CanvasKit.SkFont.prototype.getWidths = function() {};
758
759CanvasKit.RSXFormBuilder.prototype.build = function() {};
760CanvasKit.RSXFormBuilder.prototype.delete = function() {};
761CanvasKit.RSXFormBuilder.prototype.push = function() {};
Kevin Lubickee91c072019-03-29 10:39:52 -0400762CanvasKit.RSXFormBuilder.prototype.set = function() {};
763
764CanvasKit.SkColorBuilder.prototype.build = function() {};
765CanvasKit.SkColorBuilder.prototype.delete = function() {};
766CanvasKit.SkColorBuilder.prototype.push = function() {};
767CanvasKit.SkColorBuilder.prototype.set = function() {};
Kevin Lubickd3cfbca2019-03-15 15:36:29 -0400768
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400769// Define StrokeOpts object
770var StrokeOpts = {};
771StrokeOpts.prototype.width;
772StrokeOpts.prototype.miter_limit;
773StrokeOpts.prototype.cap;
774StrokeOpts.prototype.join;
Kevin Lubick1646e7d2018-12-07 13:03:08 -0500775StrokeOpts.prototype.precision;
Kevin Lubickb5ae3b52018-11-03 07:51:19 -0400776
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500777// Define everything created in the canvas2d spec here
Kevin Lubickb9db3902018-11-26 11:47:54 -0500778var HTMLCanvas = {};
Kevin Lubick0a1293c2018-12-03 12:31:04 -0500779HTMLCanvas.prototype.decodeImage = function() {};
780HTMLCanvas.prototype.dispose = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500781HTMLCanvas.prototype.getContext = function() {};
Kevin Lubick8e4a3312018-12-14 15:03:41 -0500782HTMLCanvas.prototype.loadFont = function() {};
Kevin Lubicka40f8322018-12-17 16:01:36 -0500783HTMLCanvas.prototype.makePath2D = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500784HTMLCanvas.prototype.toDataURL = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500785
786var CanvasRenderingContext2D = {};
787CanvasRenderingContext2D.prototype.addHitRegion = function() {};
788CanvasRenderingContext2D.prototype.arc = function() {};
789CanvasRenderingContext2D.prototype.arcTo = function() {};
790CanvasRenderingContext2D.prototype.beginPath = function() {};
791CanvasRenderingContext2D.prototype.bezierCurveTo = function() {};
792CanvasRenderingContext2D.prototype.clearHitRegions = function() {};
Kevin Lubick12c0e502018-11-28 12:51:56 -0500793CanvasRenderingContext2D.prototype.clearRect = function() {};
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500794CanvasRenderingContext2D.prototype.clip = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500795CanvasRenderingContext2D.prototype.closePath = function() {};
Kevin Lubick52b9f372018-12-04 13:57:36 -0500796CanvasRenderingContext2D.prototype.createImageData = function() {};
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500797CanvasRenderingContext2D.prototype.createLinearGradient = function() {};
Kevin Lubickd29edd72018-12-07 08:29:52 -0500798CanvasRenderingContext2D.prototype.createPattern = function() {};
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500799CanvasRenderingContext2D.prototype.createRadialGradient = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500800CanvasRenderingContext2D.prototype.drawFocusIfNeeded = function() {};
Kevin Lubick0a1293c2018-12-03 12:31:04 -0500801CanvasRenderingContext2D.prototype.drawImage = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500802CanvasRenderingContext2D.prototype.ellipse = function() {};
Kevin Lubick61ef7b22018-11-27 13:26:59 -0500803CanvasRenderingContext2D.prototype.fill = function() {};
Kevin Lubick12c0e502018-11-28 12:51:56 -0500804CanvasRenderingContext2D.prototype.fillRect = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500805CanvasRenderingContext2D.prototype.fillText = function() {};
Kevin Lubick52b9f372018-12-04 13:57:36 -0500806CanvasRenderingContext2D.prototype.getImageData = function() {};
Kevin Lubick12c0e502018-11-28 12:51:56 -0500807CanvasRenderingContext2D.prototype.getLineDash = function() {};
Kevin Lubick1646e7d2018-12-07 13:03:08 -0500808CanvasRenderingContext2D.prototype.isPointInPath = function() {};
809CanvasRenderingContext2D.prototype.isPointInStroke = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500810CanvasRenderingContext2D.prototype.lineTo = function() {};
811CanvasRenderingContext2D.prototype.measureText = function() {};
812CanvasRenderingContext2D.prototype.moveTo = function() {};
Kevin Lubick52b9f372018-12-04 13:57:36 -0500813CanvasRenderingContext2D.prototype.putImageData = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500814CanvasRenderingContext2D.prototype.quadraticCurveTo = function() {};
815CanvasRenderingContext2D.prototype.rect = function() {};
816CanvasRenderingContext2D.prototype.removeHitRegion = function() {};
817CanvasRenderingContext2D.prototype.resetTransform = function() {};
Kevin Lubick61ef7b22018-11-27 13:26:59 -0500818CanvasRenderingContext2D.prototype.restore = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500819CanvasRenderingContext2D.prototype.rotate = function() {};
Kevin Lubick61ef7b22018-11-27 13:26:59 -0500820CanvasRenderingContext2D.prototype.save = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500821CanvasRenderingContext2D.prototype.scale = function() {};
822CanvasRenderingContext2D.prototype.scrollPathIntoView = function() {};
Kevin Lubick12c0e502018-11-28 12:51:56 -0500823CanvasRenderingContext2D.prototype.setLineDash = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500824CanvasRenderingContext2D.prototype.setTransform = function() {};
825CanvasRenderingContext2D.prototype.stroke = function() {};
Kevin Lubick12c0e502018-11-28 12:51:56 -0500826CanvasRenderingContext2D.prototype.strokeRect = function() {};
Kevin Lubickb9db3902018-11-26 11:47:54 -0500827CanvasRenderingContext2D.prototype.strokeText = function() {};
828CanvasRenderingContext2D.prototype.transform = function() {};
829CanvasRenderingContext2D.prototype.translate = function() {};
830
Kevin Lubicka40f8322018-12-17 16:01:36 -0500831var Path2D = {};
832Path2D.prototype.addPath = function() {};
833Path2D.prototype.arc = function() {};
834Path2D.prototype.arcTo = function() {};
835Path2D.prototype.bezierCurveTo = function() {};
836Path2D.prototype.closePath = function() {};
837Path2D.prototype.ellipse = function() {};
838Path2D.prototype.lineTo = function() {};
839Path2D.prototype.moveTo = function() {};
840Path2D.prototype.quadraticCurveTo = function() {};
841Path2D.prototype.rect = function() {};
842
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500843var LinearCanvasGradient = {};
844LinearCanvasGradient.prototype.addColorStop = function() {};
845var RadialCanvasGradient = {};
846RadialCanvasGradient.prototype.addColorStop = function() {};
Kevin Lubickd29edd72018-12-07 08:29:52 -0500847var CanvasPattern = {};
848CanvasPattern.prototype.setTransform = function() {};
Kevin Lubickeb2f6b02018-11-29 15:07:02 -0500849
Kevin Lubick52b9f372018-12-04 13:57:36 -0500850var ImageData = {
851 /**
852 * @type {Uint8ClampedArray}
853 */
854 data: {},
855 height: {},
856 width: {},
857};
858
Kevin Lubickd29edd72018-12-07 08:29:52 -0500859var DOMMatrix = {
860 a: {},
861 b: {},
862 c: {},
863 d: {},
864 e: {},
865 f: {},
866};
867
Kevin Lubick217056c2018-09-20 17:39:31 -0400868// Not sure why this is needed - might be a bug in emsdk that this isn't properly declared.
Kevin Lubick6fccc9d2018-11-20 15:55:10 -0500869function loadWebAssemblyModule() {};