blob: a0028fa4ac36c6e13e18f7b737b1cf529b4a402f [file] [log] [blame]
/*
* This externs file prevents the Closure JS compiler from minifying away
* names of objects created by Emscripten.
* Basically, by defining empty objects and functions here, Closure will
* know not to rename them. This is needed because of our pre-js files,
* that is, the JS we hand-write to bundle into the output. That JS will be
* hit by the closure compiler and thus needs to know about what functions
* have special names and should not be minified.
*
* Emscripten does not support automatically generating an externs file, so we
* do it by hand. The general process is to write some JS code, and then put any
* calls to SkottieKit or related things in here. Running ./compile.sh and then
* looking at the minified results or running the Release trybot should
* verify nothing was missed. Optionally, looking directly at the minified
* pathkit.js can be useful when developing locally.
*
* Docs:
* https://github.com/cljsjs/packages/wiki/Creating-Externs
* https://github.com/google/closure-compiler/wiki/Types-in-the-Closure-Type-System
*
* Example externs:
* https://github.com/google/closure-compiler/tree/master/externs
*/
var SkottieKit = {
// public API (i.e. things we declare in the pre-js file or in the cpp bindings)
Color: function() {},
Color4f: function() {},
GetWebGLContext: function() {},
MakeCanvasSurface: function() {},
MakeGrContext: function() {},
MakeInMemorySurface: function() {},
MakeManagedAnimation: function() {},
MakeOnScreenGLSurface: function() {},
MakeSWCanvasSurface: function() {},
MakeWebGLCanvasSurface: function() {},
currentContext: function() {},
setCurrentContext: function() {},
_MakeManagedAnimation: function() {},
_getRasterDirectSurface: function() {},
GrContext: {
// public API (from C++ bindings)
getResourceCacheLimitBytes: function() {},
getResourceCacheUsageBytes: function() {},
releaseResourcesAndAbandonContext: function() {},
setResourceCacheLimitBytes: function() {},
},
SkCanvas: {
// public API (from C++ bindings)
clear: function() {},
prototype: {
requestAnimationFrame: function() {},
}
},
SkSurface: {
// public API (from C++ bindings)
flush: function() {},
getCanvas: function() {},
// private API
_clear: function() {},
prototype: {
clear: function() {},
}
},
// Constants and Enums
gpu: {},
skottie: {},
managed_skottie: {},
TRANSPARENT: {},
BLACK: {},
WHITE: {},
AlphaType: {
Opaque: {},
Premul: {},
Unpremul: {},
},
ColorType: {
RGBA_8888: {},
},
// Things Emscripten adds for us
/**
* @type {Float32Array}
*/
HEAPF32: {},
/**
* @type {Float64Array}
*/
HEAPF64: {},
/**
* @type {Uint8Array}
*/
HEAPU8: {},
/**
* @type {Uint16Array}
*/
HEAPU16: {},
/**
* @type {Uint32Array}
*/
HEAPU32: {},
/**
* @type {Int8Array}
*/
HEAP8: {},
/**
* @type {Int16Array}
*/
HEAP16: {},
/**
* @type {Int32Array}
*/
HEAP32: {},
_malloc: function() {},
_free: function() {},
onRuntimeInitialized: function() {},
};
// Not sure why this is needed - might be a bug in emsdk that this isn't properly declared.
function loadWebAssemblyModule() {};