class_docstr: A plugin definition.
  
  Args:
      directory: the directory containing the plugin
      metadata: a plugin metadata dict
class_docstr_tok: ["A","plugin","definition",".","Args",":","directory",":","the","directory","containing","the","plugin","metadata",":","a","plugin","metadata","dict"]
docstr: The relative path to the JS bundle file.
docstr_tok: ["The","relative","path","to","the","JS","bundle","file","."]
code: def js_bundle(self):
      """The relative path to the JS bundle file."""
      js_bundle = self._metadata.get("js_bundle", None)
  
      if not js_bundle and self.has_package_json:
          pkg = etas.read_json(self.package_json_path)
          js_bundle = pkg.get("fiftyone", {}).get("script", None)
  
      if not js_bundle:
          js_bundle = "dist/index.umd.js"
  
      return js_bundle
  
imports: import os
  import yaml
  import eta.core.serial
  import fiftyone
label_desc: Use image node_id 14 for calling the PluginDefinition obj's underlying member method code with example usage: obj.js_bundle() and returns: js_bundle