code: 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 }];
          }, []);
  }
docs: 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.