Sorry to dump another large email on the list, but I'm hoping this one is
at least less controversial :). I wrote up a plan for moving module->symbol
mapping out of common.js & platform.js and into individual plugins.

If you have feedback/comments, let me know.

* Goals:

   - Change from listing module->symbol mapping within common.js &
   platform.js, to listing this within the plugins themselves.
   - Support apps that don't want us to clobber global symbols.
      - aka, allow module->symbol mapping to be turned off
   - Allow retrieval of clobbered globals
      - Currently modules save it themselves when they are loaded
      - This won't work (reliably) for saving references to globals
      overridden by other modules
      - This gets in the way of the idea of lazy-loading modules via getters
   - Support the use of other module loaders
      - So... don't do crazy things at require() time.


Requirements:

   - Plugins must be able to declare dependencies
   - Plugins must be able to delay onDeviceReady()
   - Plugins must be able to run code to initialize


Implementation modulemapper.js:

   - clobbers(...)
   - merges(...)
   - defaults(...)
   - mapModules(wnd)
   - getOriginalSymbol('FileSystem')


Start-up flow:

   1. Parse all modules
   2. common-bootstrap:
      1. Loads list of modules named "cordova.*/symbols"
      2. Run modulemapper.mapModules(window);
      3. Loads list of modules named "cordova.*/main"


symbols.js files:

   - Will make calls to modulemapper instead of exporting {clobbers:}
      - This make dependencies work by require()ing dependent symbols
   - We want the to be an evaluated .js file instead of something listed in
   plugin.xml
      - So that it can export based on browser version


Implementation Steps

   1. Expose list of registered modules in scripts/require.js so that we
   can loop over them
   2. Write modulemapper.js (and have unit tests, of course)
   3. Add logic to bootstrap.js that calls into modulemapper
   4. create $PLUGIN_NAME/symbols.js files for each plugin within cordova.
   5. Add logic to bootstrap.js that calls into modulemapper
   6. Create main.js files for those that currently have logic in their
   platform.js files

*

Reply via email to