Skip to content

Latest commit

 

History

History
executable file
·
238 lines (165 loc) · 12.2 KB

README.md

File metadata and controls

executable file
·
238 lines (165 loc) · 12.2 KB

Versatile & Complete Cross-Platform CommonJS JavaScript Module, Package & Program Loader

Status: BETA - Mostly stable API undergoing wider testing.

The PINF JavaScript Loader asynchronously combines what you would traditionally call a package installer and class loader and is intended to be used as the core to all your JavaScript applications no matter what platform they run on.

The loader allows for bootstrapping a consistent and state-of-the-art CommonJS environment for any supported platform (on servers, in browsers, desktop applications, secure sandboxes, and embedded) and thus is ideally suited to be used as the target for the commonjs command and the development of cross-platform JavaScript applications and libraries that may be shared with the CommonJS ecosystem.

Status: See ./NOTES.md

Loader overview image

This module loader brings CommonJS Modules/2 (currently in draft) plus CommonJS Packages, Package Mappings and further concepts to the following platforms:

  • NodeJS - Boot via commonjs program.json or via pinf-loader-js npm package.
  • Jetpack - Use it in any Gecko/XULRunner extension or application
  • Titanium - Use it in any Appcelerator Titanium application
  • RingoJS - Use it in any RingoJS application
  • AdobeAir - Use it in any AdobeAir application
  • GPSEE - Use it in any GPSEE application
  • v8cgi - Use it in any v8cgi application
  • Narwhal - Use it with any Narwhal engine platform
  • Wakanda (In Progress)
  • CouchApp (Initial exploration)
  • Rhino (Not Yet Implemented)
  • PhoneGap (Not Yet Implemented)
  • Browser - For development and optimized production purposes
    • Standalone - Just include one small file in your page (6.2 KB minified & gziped)
    • jQuery (Not Yet Implemented)
    • NobleJS (Not Yet Implemented)
    • RequireJS (Not Yet Implemented)
    • Dojo (Not Yet Implemented)
  • Services
    • Duostack - No npm & hassle free deployment with secret configuration (Not Yet Implemented)
    • no.de (Not Yet Implemented)
    • NodeSocket (Not Yet Implemented)
    • Google App Engine Use it to run JavaScript on the Java stack (Not Yet Implemented)

The loader implements or is compatible with the following specs:

The loader extends the core CommonJS platform defined by the above specifications with the following additions:

  • CommonJS Programs/A (strawman) (Not Yet Documented)
  • Various additions and generalizations to be able to load a wide range of packages. (Not Yet Documented)

The loader can be used:

  • By calling it from the command line to run a program
  • By require()ing it from any CommonJS module to load a sub-program
  • By setting it up as a package server to load programs into a browser

The loader:

  • Aims to be complete and fully specification compliant where possible.
  • Aims to validate the CommonJS Program and Mappings approaches and inform CommonJS specifications.
  • Provisions and executes programs by downloading and linking dependencies on first use.
  • By default isolates the dependencies for each program.
  • Can provision complex applications (programs) composed of hundreds of packages by contacting an open network of public registry and repository servers. (Not Yet Implemented)
  • Can load complex applications (programs) composed of hundreds of packages from Content Delivery Networks fed by a simple program server. (Not Yet Implemented)
  • Supports REMOTE LIVE application DEBUGGING and EDITING for DEPLOYED applications running on any ANY PLATFORM (eval() or equivalent required). (Not Yet Implemented)

The loader is a sub-project of the PINF Toolchain Automation Platform where an application (program) is a view into the toolchain that statically links package-based dependencies.

The toolchain is an organized body of code & services maintained collectively for the purpose of automating software production and system operation. Any CommonJS package may be used as part of the toolchain.

Platform overview image

Demo: Hello World

Assumes NodeJS is installed. See ./docs/Setup.md for instructions.

git clone git://github.com/pinf/loader-js.git
cd ./loader-js
node ./pinf-loader -v ./demos/HelloWorld

# If `commonjs` is linked to `./pinf-loader.sh` and on `$PATH`

commonjs -v ./demos/HelloWorld

For more internal development focused demos see: ./docs/Demos.md

For more user-ready demos and instructions see the PINF JavaScript Test Programs project.

Documentation

Related Projects:

Support, Feedback & News

Developer mailing list: http://groups.google.com/group/pinf-dev/

Twitter: http://twitter.com/pinf

Blog: http://christophdorn.com/Blog/

TODO

Priority: High

  • Clean hierarchical sandbox implementation.
  • Refactored and abstracted program server to support various plugins.
  • Consistent and reliable file and line info for errors and stack traces across all platforms.

Priority: Low

  • Refactor to leverage Q promises throughout.
  • Run exported programs on all platforms (not just browser).
  • Refactor, abstract and simplify various concepts like descriptors, locators, mapping resolver.

Contribute

You can find a list of things to get involved with here: ./NOTES.md

Collaboration Platform: https://github.com/pinf/loader-js/

Collaboration Process:

  1. Discuss your change on the mailing list
  2. Write a patch on your own
  3. Send pull request on github & ping mailing list
  4. Discuss pull request on github to refine

You must explicitly license your patch by adding the following to the top of any file you modify in order for your patch to be accepted:

//  - <GithubUsername>, First Last <Email>, Copyright YYYY, MIT License

Author

This project is a part of the PINF project maintained by Christoph Dorn.

Credits

This project would not be possible without the following:

  • CommonJS - For framing requirements into specifications
  • BravoJS - For a pure and clean CommonJS Modules/2 loader implementation
  • NodeJS - For providing a solid runtime used by default
  • Firefox - For providing an amazing browser platform
  • Jetpack - For providing a decent extension environment, API and tooling
  • Firebug - For the amazing developer tool it is
  • nodules - For implementing and refining CommonJS Packages/Mappings/C
  • pinf - For implementing and refining various designs and specifications
  • Narwhal - For providing an experimentation ground while prototyping conceps
  • Github - For igniting a generation of collaborative development
  • JavaScript - For the awesome language it is

This project uses code from:

Documentation License

Creative Commons Attribution-NonCommercial-ShareAlike 3.0

Copyright (c) 2011+ Christoph Dorn

Code License

MIT License

Copyright (c) 2011+ Christoph Dorn

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.