(defprotocol IJavaScript
(-foreign? [this] "Whether the Javascript represents a foreign
library (a js file that not have any goog.provide statement")
(-closure-lib? [this] "Whether the Javascript represents a Closure style
library")
(-url [this] [this opts] "The URL where this JavaScript is located. Returns nil
when JavaScript exists in memory only.")
(-relative-path [this] [this opts] "Relative path for this JavaScript.")
(-provides [this] "A list of namespaces that this JavaScript provides.")
(-requires [this] "A list of namespaces that this JavaScript requires.")
(-source [this] [this opts] "The JavaScript source string."))