Skip to content
This repository

EARLY STALLED EXPLORATION

README.md

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

The PINF JavaScript Loader combines what you would traditionally call a package installer and class loader and is intended to be used instead of tools such as npm, RequireJS and tusk.

The loader allows for bootstrapping a consistent and state-of-the-art CommonJS environment for any supported platform (on server & in browser) 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.

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.
  • Narwhal - Use it with any Narwhal engine platform
  • Jetpack - Use it in any Gecko/XULRunner extension or application
  • Rhino (Not Yet Implemented)
  • RingoJS (Not Yet Implemented)
  • GPSEE (Not Yet Implemented)
  • CouchApp (Not Yet Implemented)
  • Titanium (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)
    • 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)
  • PINF Workspace/A (strawman) (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

For more demos see: ./docs/Demos.md

Documentation

Support & Feedback

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

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.

Something went wrong with that request. Please try again.