Skip to content

Commit

Permalink
NPM package and demo
Browse files Browse the repository at this point in the history
  • Loading branch information
cadorn committed Mar 7, 2011
1 parent 7b72304 commit 28d0b4b
Show file tree
Hide file tree
Showing 15 changed files with 266 additions and 2 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Original file line Diff line number Diff line change
@@ -1,4 +1,5 @@
.DS_Store .DS_Store
.tmp*~ .tmp*~
.pinf-* .pinf-*
*.local.* *.local.*
/.build/
11 changes: 11 additions & 0 deletions bin/publish-to-npm
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,11 @@
#! /usr/bin/env commonjs

exports.main = function(env)
{
var parts = module.id.split("/");

env.bootProgram({
program: parts.slice(0, parts.length-2).join("/") + "/programs/publish-to-npm/program.json",
args: env.args
});
}
40 changes: 40 additions & 0 deletions demos/NPMPackage/README.md
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,40 @@
NPM Package
===========

Sample [NPM](http://npmjs.org/) package that depends on `pinf-loader-js` and loads a program.


Test
----

Install:

npm install pinf-loader-js-demos-npmpackage

or

npm link .

Run:

npm start pinf-loader-js-demos-npmpackage


Usage
-----

Add dependency for `pinf-loader-js` to `package.json`:

{
"dependencies": {
"pinf-loader-js": ">=0.0.1"
}
}

Boot program from within module:

var PINF_LOADER = require("pinf-loader-js/lib/pinf-loader-js/loader");

PINF_LOADER.boot({
program: "/.../program.json"
});
37 changes: 37 additions & 0 deletions demos/NPMPackage/package.json
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"uid": "http://github.com/pinf/loader-js/demos/NPMPackage/",
"name": "pinf-loader-js-demos-npmpackage",
"version": "0.0.1",
"label": "PINF JavaScript Loader - Demo - NPMPackage",
"description": "Sample package that depends on pinf-loader-js and loads a program.",
"homepage": "https://github.com/pinf/loader-js/tree/master/demos/NPMPackage/",
"repositories": [
{
"type": "git",
"url": "git://github.com/pinf/loader-js.git",
"path": "demos/NPMPackage"
}
],
"maintainers": [
{
"name": "Christoph Dorn",
"email": "christoph@christophdorn.com",
"web": "http://www.christophdorn.com/"
}
],
"licenses": [
{
"type": "MIT",
"url": "http://www.opensource.org/licenses/mit-license.php"
}
],
"engines": {
"node": ">= 0.4"
},
"dependencies": {
"pinf-loader-js": ">=0.0.1"
},
"scripts": {
"start": "node server.js"
}
}
9 changes: 9 additions & 0 deletions demos/NPMPackage/programs/HelloWorld/main.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,9 @@

module.declare([], function(require, exports, module)
{
exports.main = function()
{
module.print("Hello World from HelloWorld program in NPMPackage!\n");
module.print("OK");
}
});
4 changes: 4 additions & 0 deletions demos/NPMPackage/programs/HelloWorld/package.json
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"uid": "http://github.com/pinf/loader-js/demos/NPMPackage/programs/HelloWorld/",
"main": "main.js"
}
10 changes: 10 additions & 0 deletions demos/NPMPackage/programs/HelloWorld/program.json
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"boot": "github.com/pinf/loader-js/demos/NPMPackage/programs/HelloWorld/",
"packages": {
"github.com/pinf/loader-js/demos/NPMPackage/programs/HelloWorld/": {
"locator": {
"location": "./"
}
}
}
}
11 changes: 11 additions & 0 deletions demos/NPMPackage/server.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,11 @@

var SYS = require("sys"),
PATH = require("path"),
PINF_LOADER = require("pinf-loader-js/lib/pinf-loader-js/loader");

SYS.print("Hello World from NPMPackage!\n");

PINF_LOADER.boot({
program: PATH.dirname(__filename) + "/programs/HelloWorld/program.json",
debug: true
});
5 changes: 5 additions & 0 deletions docs/Demos.md
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ Browser-based programs:
commonjs -v ./demos/ProgramServer commonjs -v ./demos/ProgramServer
commonjs -v ./demos/ACE commonjs -v ./demos/ACE


Via NPM:

npm install pinf-loader-js-demos-npmpackage
npm start pinf-loader-js-demos-npmpackage



Platform: Narwhal Platform: Narwhal
================= =================
Expand Down
11 changes: 11 additions & 0 deletions docs/UseCases.md
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -63,6 +63,17 @@ sets of modules available for loading on demand by the browser.
open http://localhost:8003/ open http://localhost:8003/




NPM
===

The loader can be used as an [NPM](http://npmjs.org/) package to boot a program.

npm install pinf-loader-js-demos-npmpackage
npm start pinf-loader-js-demos-npmpackage

See: [../demos/NPMPackage](https://github.com/pinf/loader-js/tree/master/demos/NPMPackage)


Cloud-based Services Cloud-based Services
==================== ====================


Expand Down
8 changes: 7 additions & 1 deletion lib/pinf-loader-js/loader.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -242,7 +242,13 @@ var boot = exports.boot = function(options)
} }


if (!API.FILE.exists(scriptPath)) if (!API.FILE.exists(scriptPath))
throw new Error("Script not found at: " + scriptPath); {
if (/\.js$/.test(scriptPath))
scriptPath = scriptPath.substring(0, scriptPath.length-3);

if (!API.FILE.exists(scriptPath))
throw new Error("Script not found at: " + scriptPath);
}


sandbox.init(); sandbox.init();
sandbox.declare([ scriptPath ], function(require, exports, module) sandbox.declare([ scriptPath ], function(require, exports, module)
Expand Down
66 changes: 66 additions & 0 deletions programs/publish-to-npm/main.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,66 @@

var PATH = require("nodejs/path"),
FS = require("nodejs/fs"),
EXEC = require("nodejs/child_process").exec;

exports.main = function(env)
{
var excludeFilePath = PATH.dirname(module.id) + "/rsync-exclude.txt",
sourcePath = PATH.dirname(PATH.dirname(PATH.dirname(module.id))),
targetPath = sourcePath + "/.build/npm/",
command;

command = "rm -Rf " + targetPath;
module.print(command + "\n");

EXEC(command, function (error, stdout, stderr)
{
if (!exists(targetPath))
{
module.print("Creating: " + targetPath + "\n");
mkdirs(PATH.dirname(targetPath), 0775);
}

command = "rsync -r --copy-links --exclude-from " + excludeFilePath + " " + sourcePath + "/* " + targetPath;
module.print(command + "\n");
EXEC(command, function (error, stdout, stderr)
{
module.print("Done. Now run: \0cyan(" + "sudo npm publish " + targetPath + "\0)" + "\n");
});
});

}

function exists(filename)
{
try
{
FS.statSync(filename);
return true;
}
catch(e)
{
return false;
}
}

function mkdirs(filename, mode)
{
// Oh boy. This is inefficient but should work for now.
filename = filename.split("/");
var parts = [];

while (!exists(filename.join("/")))
{
parts.push(filename.pop());
}

if (parts.length==0)
return;

while (parts.length > 0)
{
filename.push(parts.pop());
FS.mkdirSync(filename.join("/"), mode);
}
}
15 changes: 15 additions & 0 deletions programs/publish-to-npm/package.json
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"uid": "http://github.com/pinf/loader-js/programs/publish-to-npm/",
"main": "main.js",
"engine": [
"node"
],
"directories": {
"lib": ""
},
"mappings": {
"nodejs": {
"id": "nodejs.org"
}
}
}
16 changes: 16 additions & 0 deletions programs/publish-to-npm/program.json
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"boot": "github.com/pinf/loader-js/programs/publish-to-npm/",
"engine": [
"node"
],
"packages": {
"github.com/pinf/loader-js/programs/publish-to-npm/": {
"locator": {
"location": "./"
}
},
"nodejs.org": {
"provider": "nodejs.org"
}
}
}
22 changes: 22 additions & 0 deletions programs/publish-to-npm/rsync-exclude.txt
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,22 @@
.DS_Store
.git/
.tmp_*
README.md
.gitignore
.pinf-*
Thumbs.db
.build/
*.local.*

/bin/
/demos/
/docs/
/lib/pinf-loader-js/adapter/jetpack.js
/lib/pinf-loader-js/adapter/narwhal.js
/lib/pinf-loader-js/platform/jetpack/
/tests/
/programs/
/NOTES.md
/pinf-loader
/pinf-loader.js
/pinf-loader.sh

0 comments on commit 28d0b4b

Please sign in to comment.