After one of the many several hour long discussions we've had lately in #jsan, it was sort of decided that we'd ask all modules to be scannable for file-level dependencies.
Which rocks, and I've wanted it since forever. The group dropped back to musings about whether it was needed or not later, but not before rob built a basic. JSAN::Parse::FileDeps .
Seeing this as a go to jump 4 steps ahead, I've taken the basic version and improved it to get the file deps out in detail.
Now, I'd already written a JavaScript library manager earlier this year, JavaScript::Librarian, but never had a way of indexing a library to test it.
But now I have! Because with a way to scan deps, and a framework to drop it into, it was only a hop skip and a jump to create JSAN::Librarian, which will index your JavaScript library for you, parse out the deps, build an index, and then let you present that index as a JavaScript::Librarian::Library object.
And what THAT lets you do is to then to create a Librarian object for your library, tell it what packages you need, and it will hand you back the code to load it, like this!
my $Librarian = JavaScript::Librarian->new(
base => URI->new('/jsan'),
library => JSAN::Library->new( '.openjsan.deps' ),
);
$Librarian->add('Foo/Bar.js');
print $Librarian->html;
# Prints something like this
<script language="JavaScript" src="/jsan/Foo.js"></script>
<script language="JavaScript" src="/jsan/Bar.js"></script>
<script language="JavaScript" src="/jsan/Foo/Bar.js"></script>
Of course, from here it's only a small step to implementing Collections, which would take those three files, and concatonate them together (safely) into a single file to create something like Prototype on-the-fly from the component parts. :)
And one more step beyond that to provide it all in the form of a use server, so you just require the packages you want and it hands them back as a single stripped, compressed file, with super-efficient caching logic I plan to recycle from elsewhere.
And all of this done in only 4 hours! What was that about depth-first programming being slower again? :)