gulp/closure-task.js
function getPublicExportedNames(entryModule) {
    const fn = function() {};
    const isStaticOrProtoName = (x) => (
        !(x in fn) &&
        (x !== `default`) &&
        (x !== `undefined`) &&
        (x !== `__esModule`) &&
        (x !== `constructor`)
    );
    return Object
        .getOwnPropertyNames(entryModule)
        .filter((name) => name !== 'default')
        .filter((name) => (
            typeof entryModule[name] === `object` ||
            typeof entryModule[name] === `function`
        ))
        .map((name) => [name, entryModule[name]])
        .reduce((reserved, [name, value]) => {

            const staticNames = value &&
                typeof value === 'object' ? Object.getOwnPropertyNames(value).filter(isStaticOrProtoName) :
                typeof value === 'function' ? Object.getOwnPropertyNames(value).filter(isStaticOrProtoName) : [];

            const instanceNames = (typeof value === `function` && Object.getOwnPropertyNames(value.prototype || {}) || []).filter(isStaticOrProtoName);

            return [...reserved, { exportName: name, staticNames, instanceNames }];
        }, []);
}
function getPublicExportedNames(entryModule) {
    const fn = function() {};
    const isStaticOrProtoName = (x) => (
        !(x in fn) &&
        (x !== `default`) &&
        (x !== `undefined`) &&
        (x !== `__esModule`) &&
        (x !== `constructor`)
    );
    return Object
        .getOwnPropertyNames(entryModule)
        .filter((name) => name !== 'default')
        .filter((name) => (
            typeof entryModule[name] === `object` ||
            typeof entryModule[name] === `function`
        ))
        .map((name) => [name, entryModule[name]])
        .reduce((reserved, [name, value]) => {

            const staticNames = value &&
                typeof value === 'object' ? Object.getOwnPropertyNames(value).filter(isStaticOrProtoName) :
                typeof value === 'function' ? Object.getOwnPropertyNames(value).filter(isStaticOrProtoName) : [];

            const instanceNames = (typeof value === `function` && Object.getOwnPropertyNames(value.prototype || {}) || []).filter(isStaticOrProtoName);

            return [...reserved, { exportName: name, staticNames, instanceNames }];
        }, []);
}
function getPublicExportedNames ( entryModule ) { const fn = function ( ) { } ; const isStaticOrProtoName = ( x ) => ( ! ( x in fn ) && ( x !== ` ` ) && ( x !== ` ` ) && ( x !== ` ` ) && ( x !== ` ` ) ) ; return Object . getOwnPropertyNames ( entryModule ) . filter ( ( name ) => name !== 'default' ) . filter ( ( name ) => ( typeof entryModule [ name ] === ` ` || typeof entryModule [ name ] === ` ` ) ) . map ( ( name ) => [ name , entryModule [ name ] ] ) . reduce ( ( reserved , [ name , value ] ) => { const staticNames = value && typeof value === 'object' ? Object . getOwnPropertyNames ( value ) . filter ( isStaticOrProtoName ) : typeof value === 'function' ? Object . getOwnPropertyNames ( value ) . filter ( isStaticOrProtoName ) : [ ] ; const instanceNames = ( typeof value === ` ` && Object . getOwnPropertyNames ( value . prototype || { } ) || [ ] ) . filter ( isStaticOrProtoName ) ; return [ ... reserved , { exportName : name , staticNames , instanceNames } ] ; } , [ ] ) ; }
Reflect on the Ix entrypoint module to build the closure externs file. Assume all the non-inherited static and prototype members of the Ix entrypoint and its direct exports are public, and should be preserved through minification.
Reflect on the Ix entrypoint module to build the closure externs file . Assume all the non - inherited static and prototype members of the Ix entrypoint and its direct exports are public and should be preserved through minification .