Redesign of the sproutcore buildtools. WARNING: these buildtools do not work yet and are in constant state of flux as the design is fleshed out and functionality is added. Design In the original Garcon design the major components of a build tools set were partly intermixed in the code. This redesign separates these major components: 1. application + dependencies on disk, 2. representation of an application, for example as server representation (development environment), and saving/deploying representation In addition to these components also transforming functionality is used on two different levels: - file level: transforming content of single files (coffee script, typescript etc) - framework level: transforming content of sets of files, usually of the same type (sass, compass, less) With the exception of layer 1 everything is a plugin. Plugin: - Plugins are singletons. - Plugins are defined on the app, and should internally declare on what level they are supposed to work - Plugins should take care of caching results if necessary - Plugins can be of three types, depending on the level of operation - file level: transforming content of files (coffeescript, typescript) - framework level: transforming content of sets of files (sass, compass, less) - app level: transforming the way the app is represented (saving plugins, serving plugins) Project layout The project layout is more or less the same, only the configuration files have changed. The root of the project should contain a project.json file (see example). A framework can also contain a json file (name should be the same as the framework name), which contains extra information about the framework, including dependencies (!). Commands There is essentially one command: "sproutcore [action]" The default action of the command, when executed in the project folder is to start the dev server. Anything else should be defined. Currently only build is recognised to start a build. Generators can easily be added later (if necessary).