Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/kriszyp/pintura into pack…
Browse files Browse the repository at this point in the history
…age-fix
  • Loading branch information
neonstalwart committed Aug 16, 2011
2 parents ec3a6db + 3692f67 commit ffd0035
Show file tree
Hide file tree
Showing 58 changed files with 643 additions and 182 deletions.
85 changes: 85 additions & 0 deletions compatibility/require-uri.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*
* The require-uri module provides a backwards compatible technique for
* requiring modules with URLs. This is designed to be used at the top of a module:
* require = require("require-uri").getRequire(require);
*/


exports.getRequire = function(require){
return function(id){
if(module.supportsUri || id.charAt(0) === '.'){
// if we support URLs, use the real require
return require(id);
}
id = resolveUri("", id, mappings);
if(id.indexOf(":") === -1){
return require(id);
}
// otherwise pray that required module is in the path
try{
return require(id.split("/lib/")[1]);
}
catch(e){
e.message += " Was trying to load module from " + id +
" and failed, check to ensure it is installed locally or use the web-modules asynchronous loader";
throw e;
}
};
};


function resolveUri(currentId, uri, mappings){
if(uri.charAt(0) === '.'){
currentId = currentId.substring(0, currentId.lastIndexOf('/') + 1);
return [(currentId + uri).replace(/\/\.\.\/[^\/]*/g,'').replace(/\.\//g,'')];
}
else{
return (mappings && mappings.some(function(mapping){
var from = mapping.from;
if(uri.substring(0, from.length) == from){
return mapping.to + uri.substring(from.length);
}
})) || uri;
}
}

var engine = typeof process !== "undefined" ? "node" : "narwhal";
var mappingsArray = [];
var allMappings = {};
exports.installPackage = function(packageData){
function addMappings(mappings){
if(mappings){
mappingsArray = mappingsArray.concat(Object.keys(mappings).filter(function(key){
return !(key in allMappings);
}).map(function(key){
var to = mappings[key];
return {
from: key,
to: resolveUri(packageUri, typeof to == "string" ? to : to.to)
};
}).sort(function(a, b){
return a.from.length < b.from.length ? 1 : -1;
}));
}
}
if(packageData.overlay){
Object.keys(packageData.overlay).forEach(function(condition){
try{
var matches = (engine == condition) || eval(condition);
}catch(e){}
if(matches){
addMappings(packageData.overlay[condition].mappings);
}
});
}
addMappings(packageData.mappings);
}

exports.installPackage({
mappings:{
"perstore/": "",
"commonjs-utils/": "",
"pintura/": "",
"wiky/": ""
}
});
52 changes: 52 additions & 0 deletions facet/jsgi.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/** This facet is designed for bundling multiple requests in a single request. This is
* based on the JSGI object structure.
*/

var Facet = require("perstore/facet").Facet,
directApp = require("../pintura").directApp,
defer = require("promised-io/promise").defer,
namedFacets = require("../facet-resolver").namedFacets;

namedFacets["application/jsgi"] = exports.JsgiFacet = Facet(Object, function(store){
return {
forStore: function(requestedStore){
function genericHandler(requests, metadata){
requests.forEach(function(request){
request.store = requestedStore;
(request.headers || (request.headers = {})).__proto__ = metadata;
metadata.clientConnection;
metadata.streamable;
try{
var response = directApp(request);
if(typeof response.body.observe === "function"){
response.body.observe()
}
var response = {

body: directApp(request)
};
}catch(e){
response = {
error: e
};
}
onResponse(response);
});
var responses = [];
var onResponse;
// maybe use lazy-array here
responses.forEach = function(callback){
onResponse = callback;
var deferred = defer();
return deferred.promise;
};
return responses;
}
return {
get: genericHandler,
put: genericHandler,
post: genericHandler
};
}
};
});
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
174 changes: 174 additions & 0 deletions jsgi/mime.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@

// returns MIME type for extension, or fallback, or octet-steam
exports.mimeType = function(ext, fallback) {
return exports.MIME_TYPES[ext.toLowerCase()] || fallback || 'application/octet-stream';
},

// List of most common mime-types, stolen from Rack.
exports.MIME_TYPES = {
".3gp" : "video/3gpp",
".a" : "application/octet-stream",
".ai" : "application/postscript",
".aif" : "audio/x-aiff",
".aiff" : "audio/x-aiff",
".asc" : "application/pgp-signature",
".asf" : "video/x-ms-asf",
".asm" : "text/x-asm",
".asx" : "video/x-ms-asf",
".atom" : "application/atom+xml",
".au" : "audio/basic",
".avi" : "video/x-msvideo",
".bat" : "application/x-msdownload",
".bin" : "application/octet-stream",
".bmp" : "image/bmp",
".bz2" : "application/x-bzip2",
".c" : "text/x-c",
".cab" : "application/vnd.ms-cab-compressed",
".cc" : "text/x-c",
".chm" : "application/vnd.ms-htmlhelp",
".class" : "application/octet-stream",
".com" : "application/x-msdownload",
".conf" : "text/plain",
".cpp" : "text/x-c",
".crt" : "application/x-x509-ca-cert",
".css" : "text/css",
".csv" : "text/csv",
".cxx" : "text/x-c",
".deb" : "application/x-debian-package",
".der" : "application/x-x509-ca-cert",
".diff" : "text/x-diff",
".djv" : "image/vnd.djvu",
".djvu" : "image/vnd.djvu",
".dll" : "application/x-msdownload",
".dmg" : "application/octet-stream",
".doc" : "application/msword",
".dot" : "application/msword",
".dtd" : "application/xml-dtd",
".dvi" : "application/x-dvi",
".ear" : "application/java-archive",
".eml" : "message/rfc822",
".eps" : "application/postscript",
".exe" : "application/x-msdownload",
".f" : "text/x-fortran",
".f77" : "text/x-fortran",
".f90" : "text/x-fortran",
".flv" : "video/x-flv",
".for" : "text/x-fortran",
".gem" : "application/octet-stream",
".gemspec" : "text/x-script.ruby",
".gif" : "image/gif",
".gz" : "application/x-gzip",
".h" : "text/x-c",
".hh" : "text/x-c",
".htm" : "text/html",
".html" : "text/html",
".ico" : "image/vnd.microsoft.icon",
".ics" : "text/calendar",
".ifb" : "text/calendar",
".iso" : "application/octet-stream",
".jar" : "application/java-archive",
".java" : "text/x-java-source",
".jnlp" : "application/x-java-jnlp-file",
".jpeg" : "image/jpeg",
".jpg" : "image/jpeg",
".js" : "application/javascript",
".json" : "application/json",
".log" : "text/plain",
".m3u" : "audio/x-mpegurl",
".m4v" : "video/mp4",
".man" : "text/troff",
".mathml" : "application/mathml+xml",
".mbox" : "application/mbox",
".mdoc" : "text/troff",
".me" : "text/troff",
".mid" : "audio/midi",
".midi" : "audio/midi",
".mime" : "message/rfc822",
".mml" : "application/mathml+xml",
".mng" : "video/x-mng",
".mov" : "video/quicktime",
".mp3" : "audio/mpeg",
".mp4" : "video/mp4",
".mp4v" : "video/mp4",
".mpeg" : "video/mpeg",
".mpg" : "video/mpeg",
".ms" : "text/troff",
".msi" : "application/x-msdownload",
".odp" : "application/vnd.oasis.opendocument.presentation",
".ods" : "application/vnd.oasis.opendocument.spreadsheet",
".odt" : "application/vnd.oasis.opendocument.text",
".ogg" : "application/ogg",
".p" : "text/x-pascal",
".pas" : "text/x-pascal",
".pbm" : "image/x-portable-bitmap",
".pdf" : "application/pdf",
".pem" : "application/x-x509-ca-cert",
".pgm" : "image/x-portable-graymap",
".pgp" : "application/pgp-encrypted",
".pkg" : "application/octet-stream",
".pl" : "text/x-script.perl",
".pm" : "text/x-script.perl-module",
".png" : "image/png",
".pnm" : "image/x-portable-anymap",
".ppm" : "image/x-portable-pixmap",
".pps" : "application/vnd.ms-powerpoint",
".ppt" : "application/vnd.ms-powerpoint",
".ps" : "application/postscript",
".psd" : "image/vnd.adobe.photoshop",
".py" : "text/x-script.python",
".qt" : "video/quicktime",
".ra" : "audio/x-pn-realaudio",
".rake" : "text/x-script.ruby",
".ram" : "audio/x-pn-realaudio",
".rar" : "application/x-rar-compressed",
".rb" : "text/x-script.ruby",
".rdf" : "application/rdf+xml",
".roff" : "text/troff",
".rpm" : "application/x-redhat-package-manager",
".rss" : "application/rss+xml",
".rtf" : "application/rtf",
".ru" : "text/x-script.ruby",
".s" : "text/x-asm",
".sgm" : "text/sgml",
".sgml" : "text/sgml",
".sh" : "application/x-sh",
".sig" : "application/pgp-signature",
".snd" : "audio/basic",
".so" : "application/octet-stream",
".svg" : "image/svg+xml",
".svgz" : "image/svg+xml",
".swf" : "application/x-shockwave-flash",
".t" : "text/troff",
".tar" : "application/x-tar",
".tbz" : "application/x-bzip-compressed-tar",
".tcl" : "application/x-tcl",
".tex" : "application/x-tex",
".texi" : "application/x-texinfo",
".texinfo" : "application/x-texinfo",
".text" : "text/plain",
".tif" : "image/tiff",
".tiff" : "image/tiff",
".torrent" : "application/x-bittorrent",
".tr" : "text/troff",
".txt" : "text/plain",
".vcf" : "text/x-vcard",
".vcs" : "text/x-vcalendar",
".vrml" : "model/vrml",
".war" : "application/java-archive",
".wav" : "audio/x-wav",
".wma" : "audio/x-ms-wma",
".wmv" : "video/x-ms-wmv",
".wmx" : "video/x-ms-wmx",
".wrl" : "model/vrml",
".wsdl" : "application/wsdl+xml",
".xbm" : "image/x-xbitmap",
".xhtml" : "application/xhtml+xml",
".xls" : "application/vnd.ms-excel",
".xml" : "application/xml",
".xpm" : "image/x-xpixmap",
".xsl" : "application/xml",
".xslt" : "application/xslt+xml",
".yaml" : "text/yaml",
".yml" : "text/yaml",
".zip" : "application/zip"
}
File renamed without changes.
23 changes: 23 additions & 0 deletions jsgi/put.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
var when = require("promised-io/promise").when,
fs = require("promised-io/fs"),
forEachableToString = require("../media").forEachableToString;

module.exports = function(nextApp) {
return function(request) {
if(request.method === "PUT") {
return when(forEachableToString(request.body), function(body){
fs.writeFile(request.filePath, body);
return {
status: 200,
headers: {},
body: ["successful"]
}
});
}
return nextApp ? nextApp(request) : {
status: 404,
headers: {},
body: []
};
};
};
Loading

0 comments on commit ffd0035

Please sign in to comment.