Sky Module System
=================

This document describes the Sky module system.

Overview
--------

The Sky module system is based on the ```import``` element. In its
most basic form, you import a module as follows:

```html
<import src="path/to/module.sky" />
```

As these ```import``` elements are inserted into a document, the
document's list of outstanding dependencies grows. When an imported
module completes, it is removed from the document's list of
outstanding dependencies.

Before executing any ```script``` elements, the parser waits until the
list of outstanding dependencies is empty. After the parser has
finished parsing, the document waits until its list of outstanding
dependencies is empty before the module it represents is marked
complete.

Module API
----------

Within a script in a module, the ```module``` identifier is bound to
the ```Module``` object that represents the module:

```javascript
interface Module : EventTarget {
  constructor (Application application, Document document); // O(1)
  attribute any exports; // O(1) // defaults to the module's document
  readonly attribute Document document; // O(1) // the module's document
  readonly attribute Application application; // O(1)
}
```

### Exporting values ###

A module can export a value by assigning the ```exports``` property of
its ```Module``` object. By default, the ```exports``` property of a
```Module``` is its ```Document``` object, so that a script-less
import is still useful (it exposes its contents, e.g. templates that
the import might have been written to provide).

Naming modules
--------------

The ```as``` attribute on the ```import``` element binds a name to the
imported module:

```html
<import src="path/to/chocolate.sky" as="chocolate" />
```

The parser executes the contents of script elements inside a module as
if they were executed as follow:

```javascript
(new Function(name_1, ..., name_n, module, source_code)).call(
  value_1, ..., value_n, source_module);
```

Where ```name_1``` through ```name_n``` are the names bound to the
various named imports in the script element's document,
```source_code``` is the text content of the script element,
```source_module`` is the ```Module``` object of the script element's
module, and ```value_1``` through ```value_n``` are the values
exported by the various named imports in the script element's
document.

When an import fails to load, the ```as``` name for the import gets
bound to ```undefined```.
