Commit 860aea39 authored by Ryan LeFevre's avatar Ryan LeFevre

Merge branch 'master' into channel_images

parents c895ffd7 e63bf76d
language: node_js language: node_js
node_js: node_js:
# - "0.11" - "0.11"
- "0.10" - "0.10"
# - "0.8"
\ No newline at end of file
...@@ -9,7 +9,6 @@ task 'compile', 'Compile with browserify for the web', -> ...@@ -9,7 +9,6 @@ task 'compile', 'Compile with browserify for the web', ->
.transform('coffeeify') .transform('coffeeify')
.require('./shims/png.coffee', expose: './image_exports/png.coffee') .require('./shims/png.coffee', expose: './image_exports/png.coffee')
.require('./shims/init.coffee', expose: './psd/init.coffee') .require('./shims/init.coffee', expose: './psd/init.coffee')
.require('./shims/rgb.coffee', expose: './image_modes/rgb.coffee')
.require('./lib/psd.coffee', expose: 'psd') .require('./lib/psd.coffee', expose: 'psd')
.bundle (err, src) -> .bundle (err, src) ->
return console.log(err) if err? return console.log(err) if err?
......
...@@ -4,13 +4,11 @@ ...@@ -4,13 +4,11 @@
A general purpose PSD parser written in Coffeescript. Based off of [PSD.rb](https://github.com/layervault/psd.rb). A general purpose PSD parser written in Coffeescript. Based off of [PSD.rb](https://github.com/layervault/psd.rb).
Runs in both NodeJS and the browser (using browserify). There are still some pieces missing that are present in PSD.rb, such as layer comp filtering, a built-in renderer, and many layer info blocks. The eventual goal is full feature parity with PSD.rb. Runs in both NodeJS and the browser (using browserify). There are still some pieces missing that are present in PSD.rb, such as layer comp filtering, layer image exporting, a built-in renderer, and many layer info blocks. The eventual goal is full feature parity with PSD.rb.
## Installation ## Installation
Before installing from npm, you must install libpng, which is available on all popular package management systems. On OSX with homebrew, you can do `brew install libpng`. The install success for node-png is currently hit or miss, so alternate image packages are currently under consideration. PSD.js has no native dependencies. Simply add `psd` to your package.json or run `npm install psd`.
Once your system is ready, simply add to your package.json dependencies or run `npm install psd`.
## Basic Usage ## Basic Usage
......
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"aS3ana":[function(require,module,exports){ require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"aS3ana":[function(require,module,exports){
var File, Header, Image, LayerMask, LazyExecute, Module, PSD, Resources, var File, Header, Image, LayerMask, LazyExecute, Module, PSD, RSVP, Resources,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
RSVP = require('rsvp');
Module = require('coffeescript-module').Module; Module = require('coffeescript-module').Module;
File = require('./psd/file.coffee'); File = require('./psd/file.coffee');
...@@ -35,6 +37,9 @@ module.exports = PSD = (function(_super) { ...@@ -35,6 +37,9 @@ module.exports = PSD = (function(_super) {
return this.layerMask.layers; return this.layerMask.layers;
} }
}); });
RSVP.on('error', function(reason) {
return console.error(reason);
});
} }
PSD.prototype.parse = function() { PSD.prototype.parse = function() {
...@@ -80,7 +85,7 @@ module.exports = PSD = (function(_super) { ...@@ -80,7 +85,7 @@ module.exports = PSD = (function(_super) {
})(Module); })(Module);
},{"./psd/file.coffee":5,"./psd/header.coffee":6,"./psd/image.coffee":7,"./psd/init.coffee":"/ioUh4","./psd/layer_mask.coffee":33,"./psd/lazy_execute.coffee":34,"./psd/nodes/root.coffee":40,"./psd/resources.coffee":44,"coffeescript-module":48}],"psd":[function(require,module,exports){ },{"./psd/file.coffee":5,"./psd/header.coffee":6,"./psd/image.coffee":7,"./psd/init.coffee":"/ioUh4","./psd/layer_mask.coffee":34,"./psd/lazy_execute.coffee":35,"./psd/nodes/root.coffee":41,"./psd/resources.coffee":45,"coffeescript-module":49,"rsvp":53}],"psd":[function(require,module,exports){
module.exports=require('aS3ana'); module.exports=require('aS3ana');
},{}],3:[function(require,module,exports){ },{}],3:[function(require,module,exports){
var BlendMode, Module, var BlendMode, Module,
...@@ -157,7 +162,7 @@ module.exports = BlendMode = (function(_super) { ...@@ -157,7 +162,7 @@ module.exports = BlendMode = (function(_super) {
})(Module); })(Module);
},{"coffeescript-module":48}],4:[function(require,module,exports){ },{"coffeescript-module":49}],4:[function(require,module,exports){
var Descriptor; var Descriptor;
module.exports = Descriptor = (function() { module.exports = Descriptor = (function() {
...@@ -550,7 +555,7 @@ module.exports = File = (function() { ...@@ -550,7 +555,7 @@ module.exports = File = (function() {
})(); })();
},{"./util.coffee":46,"jspack":50}],6:[function(require,module,exports){ },{"./util.coffee":47,"jspack":51}],6:[function(require,module,exports){
var Header; var Header;
module.exports = Header = (function() { module.exports = Header = (function() {
...@@ -738,7 +743,7 @@ module.exports = Image = (function(_super) { ...@@ -738,7 +743,7 @@ module.exports = Image = (function(_super) {
})(Module); })(Module);
},{"./image_export.coffee":8,"./image_format.coffee":9,"./image_mode.coffee":12,"coffeescript-module":48}],8:[function(require,module,exports){ },{"./image_export.coffee":8,"./image_format.coffee":9,"./image_mode.coffee":12,"coffeescript-module":49}],8:[function(require,module,exports){
module.exports = { module.exports = {
PNG: require('./image_exports/png.coffee') PNG: require('./image_exports/png.coffee')
}; };
...@@ -831,7 +836,44 @@ module.exports = { ...@@ -831,7 +836,44 @@ module.exports = {
}; };
},{"./image_modes/rgb.coffee":"DhO9gV"}],13:[function(require,module,exports){ },{"./image_modes/rgb.coffee":13}],13:[function(require,module,exports){
module.exports = {
combineRgbChannel: function() {
var a, b, chan, g, i, index, r, rgbChannels, val, _i, _j, _len, _ref, _results;
rgbChannels = this.channelsInfo.map(function(ch) {
return ch.id;
}).filter(function(ch) {
return ch >= -1;
});
_results = [];
for (i = _i = 0, _ref = this.numPixels; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
r = g = b = 0;
a = 255;
for (index = _j = 0, _len = rgbChannels.length; _j < _len; index = ++_j) {
chan = rgbChannels[index];
val = this.channelData[i + (this.channelLength * index)];
switch (chan) {
case -1:
a = val;
break;
case 0:
r = val;
break;
case 1:
g = val;
break;
case 2:
b = val;
}
}
_results.push(this.pixelData.push(r, g, b, a));
}
return _results;
}
};
},{}],14:[function(require,module,exports){
var Layer, Module, var Layer, Module,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -911,7 +953,7 @@ module.exports = Layer = (function(_super) { ...@@ -911,7 +953,7 @@ module.exports = Layer = (function(_super) {
})(Module); })(Module);
},{"./layer/blend_modes.coffee":14,"./layer/blending_ranges.coffee":15,"./layer/helpers.coffee":16,"./layer/info.coffee":17,"./layer/mask.coffee":18,"./layer/name.coffee":19,"./layer/position_channels.coffee":20,"coffeescript-module":48}],14:[function(require,module,exports){ },{"./layer/blend_modes.coffee":15,"./layer/blending_ranges.coffee":16,"./layer/helpers.coffee":17,"./layer/info.coffee":18,"./layer/mask.coffee":19,"./layer/name.coffee":20,"./layer/position_channels.coffee":21,"coffeescript-module":49}],15:[function(require,module,exports){
var BlendMode; var BlendMode;
BlendMode = require('../blend_mode.coffee'); BlendMode = require('../blend_mode.coffee');
...@@ -933,7 +975,7 @@ module.exports = { ...@@ -933,7 +975,7 @@ module.exports = {
}; };
},{"../blend_mode.coffee":3}],15:[function(require,module,exports){ },{"../blend_mode.coffee":3}],16:[function(require,module,exports){
module.exports = { module.exports = {
parseBlendingRanges: function() { parseBlendingRanges: function() {
var i, length, numChannels, _i, _results; var i, length, numChannels, _i, _results;
...@@ -968,7 +1010,7 @@ module.exports = { ...@@ -968,7 +1010,7 @@ module.exports = {
}; };
},{}],16:[function(require,module,exports){ },{}],17:[function(require,module,exports){
module.exports = { module.exports = {
isFolder: function() { isFolder: function() {
if (this.adjustments['sectionDivider'] != null) { if (this.adjustments['sectionDivider'] != null) {
...@@ -991,7 +1033,7 @@ module.exports = { ...@@ -991,7 +1033,7 @@ module.exports = {
}; };
},{}],17:[function(require,module,exports){ },{}],18:[function(require,module,exports){
var LAYER_INFO, LazyExecute, Util, var LAYER_INFO, LazyExecute, Util,
__hasProp = {}.hasOwnProperty; __hasProp = {}.hasOwnProperty;
...@@ -1054,7 +1096,7 @@ module.exports = { ...@@ -1054,7 +1096,7 @@ module.exports = {
}; };
},{"../layer_info/blend_clipping_elements.coffee":22,"../layer_info/blend_interior_elements.coffee":23,"../layer_info/fill_opacity.coffee":24,"../layer_info/gradient_fill.coffee":25,"../layer_info/layer_id.coffee":26,"../layer_info/layer_name_source.coffee":27,"../layer_info/locked.coffee":28,"../layer_info/metadata.coffee":29,"../layer_info/nested_section_divider.coffee":30,"../layer_info/section_divider.coffee":31,"../layer_info/unicode_name.coffee":32,"../lazy_execute.coffee":34,"../util.coffee":46}],18:[function(require,module,exports){ },{"../layer_info/blend_clipping_elements.coffee":23,"../layer_info/blend_interior_elements.coffee":24,"../layer_info/fill_opacity.coffee":25,"../layer_info/gradient_fill.coffee":26,"../layer_info/layer_id.coffee":27,"../layer_info/layer_name_source.coffee":28,"../layer_info/locked.coffee":29,"../layer_info/metadata.coffee":30,"../layer_info/nested_section_divider.coffee":31,"../layer_info/section_divider.coffee":32,"../layer_info/unicode_name.coffee":33,"../lazy_execute.coffee":35,"../util.coffee":47}],19:[function(require,module,exports){
var Mask; var Mask;
Mask = require('../mask.coffee'); Mask = require('../mask.coffee');
...@@ -1066,7 +1108,7 @@ module.exports = { ...@@ -1066,7 +1108,7 @@ module.exports = {
}; };
},{"../mask.coffee":35}],19:[function(require,module,exports){ },{"../mask.coffee":36}],20:[function(require,module,exports){
var Util; var Util;
Util = require('../util.coffee'); Util = require('../util.coffee');
...@@ -1080,7 +1122,7 @@ module.exports = { ...@@ -1080,7 +1122,7 @@ module.exports = {
}; };
},{"../util.coffee":46}],20:[function(require,module,exports){ },{"../util.coffee":47}],21:[function(require,module,exports){
module.exports = { module.exports = {
parsePositionAndChannels: function() { parsePositionAndChannels: function() {
var i, id, length, _i, _ref, _results; var i, id, length, _i, _ref, _results;
...@@ -1105,7 +1147,7 @@ module.exports = { ...@@ -1105,7 +1147,7 @@ module.exports = {
}; };
},{}],21:[function(require,module,exports){ },{}],22:[function(require,module,exports){
var LayerInfo; var LayerInfo;
module.exports = LayerInfo = (function() { module.exports = LayerInfo = (function() {
...@@ -1130,7 +1172,7 @@ module.exports = LayerInfo = (function() { ...@@ -1130,7 +1172,7 @@ module.exports = LayerInfo = (function() {
})(); })();
},{}],22:[function(require,module,exports){ },{}],23:[function(require,module,exports){
var BlendClippingElements, LayerInfo, var BlendClippingElements, LayerInfo,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1158,7 +1200,7 @@ module.exports = BlendClippingElements = (function(_super) { ...@@ -1158,7 +1200,7 @@ module.exports = BlendClippingElements = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../layer_info.coffee":21}],23:[function(require,module,exports){ },{"../layer_info.coffee":22}],24:[function(require,module,exports){
var BlendInteriorElements, LayerInfo, var BlendInteriorElements, LayerInfo,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1186,7 +1228,7 @@ module.exports = BlendInteriorElements = (function(_super) { ...@@ -1186,7 +1228,7 @@ module.exports = BlendInteriorElements = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../layer_info.coffee":21}],24:[function(require,module,exports){ },{"../layer_info.coffee":22}],25:[function(require,module,exports){
var FillOpacity, LayerInfo, var FillOpacity, LayerInfo,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1213,7 +1255,7 @@ module.exports = FillOpacity = (function(_super) { ...@@ -1213,7 +1255,7 @@ module.exports = FillOpacity = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../layer_info.coffee":21}],25:[function(require,module,exports){ },{"../layer_info.coffee":22}],26:[function(require,module,exports){
var Descriptor, GradientFill, LayerInfo, var Descriptor, GradientFill, LayerInfo,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1243,7 +1285,7 @@ module.exports = GradientFill = (function(_super) { ...@@ -1243,7 +1285,7 @@ module.exports = GradientFill = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../descriptor.coffee":4,"../layer_info.coffee":21}],26:[function(require,module,exports){ },{"../descriptor.coffee":4,"../layer_info.coffee":22}],27:[function(require,module,exports){
var LayerId, LayerInfo, var LayerId, LayerInfo,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1270,7 +1312,7 @@ module.exports = LayerId = (function(_super) { ...@@ -1270,7 +1312,7 @@ module.exports = LayerId = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../layer_info.coffee":21}],27:[function(require,module,exports){ },{"../layer_info.coffee":22}],28:[function(require,module,exports){
var LayerInfo, LayerNameSource, var LayerInfo, LayerNameSource,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1297,7 +1339,7 @@ module.exports = LayerNameSource = (function(_super) { ...@@ -1297,7 +1339,7 @@ module.exports = LayerNameSource = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../layer_info.coffee":21}],28:[function(require,module,exports){ },{"../layer_info.coffee":22}],29:[function(require,module,exports){
var LayerInfo, Locked, var LayerInfo, Locked,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1307,14 +1349,18 @@ LayerInfo = require('../layer_info.coffee'); ...@@ -1307,14 +1349,18 @@ LayerInfo = require('../layer_info.coffee');
module.exports = Locked = (function(_super) { module.exports = Locked = (function(_super) {
__extends(Locked, _super); __extends(Locked, _super);
function Locked() {
return Locked.__super__.constructor.apply(this, arguments);
}
Locked.shouldParse = function(key) { Locked.shouldParse = function(key) {
return key === 'lspf'; return key === 'lspf';
}; };
function Locked(layer, length) {
Locked.__super__.constructor.call(this, layer, length);
this.transparencyLocked = false;
this.compositeLocked = false;
this.positionLocked = false;
this.allLocked = false;
}
Locked.prototype.parse = function() { Locked.prototype.parse = function() {
var locked; var locked;
locked = this.file.readInt(); locked = this.file.readInt();
...@@ -1329,7 +1375,7 @@ module.exports = Locked = (function(_super) { ...@@ -1329,7 +1375,7 @@ module.exports = Locked = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../layer_info.coffee":21}],29:[function(require,module,exports){ },{"../layer_info.coffee":22}],30:[function(require,module,exports){
var Descriptor, LayerInfo, Metadata, var Descriptor, LayerInfo, Metadata,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1378,7 +1424,7 @@ module.exports = Metadata = (function(_super) { ...@@ -1378,7 +1424,7 @@ module.exports = Metadata = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../descriptor.coffee":4,"../layer_info.coffee":21}],30:[function(require,module,exports){ },{"../descriptor.coffee":4,"../layer_info.coffee":22}],31:[function(require,module,exports){
var LayerInfo, NestedSectionDivider, var LayerInfo, NestedSectionDivider,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1415,7 +1461,7 @@ module.exports = NestedSectionDivider = (function(_super) { ...@@ -1415,7 +1461,7 @@ module.exports = NestedSectionDivider = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../layer_info.coffee":21}],31:[function(require,module,exports){ },{"../layer_info.coffee":22}],32:[function(require,module,exports){
var LayerInfo, NestedSectionDivider, var LayerInfo, NestedSectionDivider,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1470,7 +1516,7 @@ module.exports = NestedSectionDivider = (function(_super) { ...@@ -1470,7 +1516,7 @@ module.exports = NestedSectionDivider = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../layer_info.coffee":21}],32:[function(require,module,exports){ },{"../layer_info.coffee":22}],33:[function(require,module,exports){
var LayerInfo, UnicodeName, var LayerInfo, UnicodeName,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1501,7 +1547,7 @@ module.exports = UnicodeName = (function(_super) { ...@@ -1501,7 +1547,7 @@ module.exports = UnicodeName = (function(_super) {
})(LayerInfo); })(LayerInfo);
},{"../layer_info.coffee":21}],33:[function(require,module,exports){ },{"../layer_info.coffee":22}],34:[function(require,module,exports){
var Layer, LayerMask, Util, _; var Layer, LayerMask, Util, _;
_ = require('lodash'); _ = require('lodash');
...@@ -1576,7 +1622,7 @@ module.exports = LayerMask = (function() { ...@@ -1576,7 +1622,7 @@ module.exports = LayerMask = (function() {
})(); })();
},{"./layer.coffee":13,"./util.coffee":46,"lodash":51}],34:[function(require,module,exports){ },{"./layer.coffee":14,"./util.coffee":47,"lodash":52}],35:[function(require,module,exports){
var LazyExecute, var LazyExecute,
__slice = [].slice, __slice = [].slice,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
...@@ -1653,7 +1699,7 @@ module.exports = LazyExecute = (function() { ...@@ -1653,7 +1699,7 @@ module.exports = LazyExecute = (function() {
})(); })();
},{}],35:[function(require,module,exports){ },{}],36:[function(require,module,exports){
var Mask; var Mask;
module.exports = Mask = (function() { module.exports = Mask = (function() {
...@@ -1710,7 +1756,7 @@ module.exports = Mask = (function() { ...@@ -1710,7 +1756,7 @@ module.exports = Mask = (function() {
})(); })();
},{}],36:[function(require,module,exports){ },{}],37:[function(require,module,exports){
var Module, Node, _, var Module, Node, _,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -1899,7 +1945,7 @@ module.exports = Node = (function(_super) { ...@@ -1899,7 +1945,7 @@ module.exports = Node = (function(_super) {
})(Module); })(Module);
},{"./nodes/ancestry.coffee":37,"./nodes/search.coffee":41,"coffeescript-module":48,"lodash":51}],37:[function(require,module,exports){ },{"./nodes/ancestry.coffee":38,"./nodes/search.coffee":42,"coffeescript-module":49,"lodash":52}],38:[function(require,module,exports){
var _; var _;
_ = require('lodash'); _ = require('lodash');
...@@ -1985,7 +2031,7 @@ module.exports = { ...@@ -1985,7 +2031,7 @@ module.exports = {
}; };
},{"lodash":51}],38:[function(require,module,exports){ },{"lodash":52}],39:[function(require,module,exports){
var Group, Node, _, var Group, Node, _,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -2037,7 +2083,7 @@ module.exports = Group = (function(_super) { ...@@ -2037,7 +2083,7 @@ module.exports = Group = (function(_super) {
})(Node); })(Node);
},{"../node.coffee":36,"lodash":51}],39:[function(require,module,exports){ },{"../node.coffee":37,"lodash":52}],40:[function(require,module,exports){
var Layer, Node, _, var Layer, Node, _,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -2072,7 +2118,7 @@ module.exports = Layer = (function(_super) { ...@@ -2072,7 +2118,7 @@ module.exports = Layer = (function(_super) {
})(Node); })(Node);
},{"../node.coffee":36,"lodash":51}],40:[function(require,module,exports){ },{"../node.coffee":37,"lodash":52}],41:[function(require,module,exports){
var Group, Layer, Node, Root, _, var Group, Layer, Node, Root, _,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
...@@ -2128,6 +2174,7 @@ module.exports = Root = (function(_super) { ...@@ -2128,6 +2174,7 @@ module.exports = Root = (function(_super) {
}; };
Root.prototype["export"] = function() { Root.prototype["export"] = function() {
var _ref;
return { return {
children: this._children.map(function(c) { children: this._children.map(function(c) {
return c["export"](); return c["export"]();
...@@ -2136,7 +2183,7 @@ module.exports = Root = (function(_super) { ...@@ -2136,7 +2183,7 @@ module.exports = Root = (function(_super) {
width: this.width, width: this.width,
height: this.height, height: this.height,
resources: { resources: {
layerComps: this.psd.resources.resource('layerComps')["export"](), layerComps: ((_ref = this.psd.resources.resource('layerComps')) != null ? _ref["export"]() : void 0) || [],
guides: [], guides: [],
slices: [] slices: []
} }
...@@ -2170,7 +2217,7 @@ module.exports = Root = (function(_super) { ...@@ -2170,7 +2217,7 @@ module.exports = Root = (function(_super) {
})(Node); })(Node);
},{"../node.coffee":36,"./group.coffee":38,"./layer.coffee":39,"lodash":51}],41:[function(require,module,exports){ },{"../node.coffee":37,"./group.coffee":39,"./layer.coffee":40,"lodash":52}],42:[function(require,module,exports){
var _; var _;
_ = require('lodash'); _ = require('lodash');
...@@ -2206,7 +2253,7 @@ module.exports = { ...@@ -2206,7 +2253,7 @@ module.exports = {
}; };
},{"lodash":51}],42:[function(require,module,exports){ },{"lodash":52}],43:[function(require,module,exports){
var Resource, Util; var Resource, Util;
Util = require('./util.coffee'); Util = require('./util.coffee');
...@@ -2235,7 +2282,7 @@ module.exports = Resource = (function() { ...@@ -2235,7 +2282,7 @@ module.exports = Resource = (function() {
})(); })();
},{"./resource_section.coffee":43,"./util.coffee":46}],43:[function(require,module,exports){ },{"./resource_section.coffee":44,"./util.coffee":47}],44:[function(require,module,exports){
var ResourceSection, _; var ResourceSection, _;
_ = require('lodash'); _ = require('lodash');
...@@ -2266,7 +2313,7 @@ module.exports = ResourceSection = (function() { ...@@ -2266,7 +2313,7 @@ module.exports = ResourceSection = (function() {
})(); })();
},{"./resources/layer_comps.coffee":45,"lodash":51}],44:[function(require,module,exports){ },{"./resources/layer_comps.coffee":46,"lodash":52}],45:[function(require,module,exports){
var Resource, Resources; var Resource, Resources;
Resource = require('./resource.coffee'); Resource = require('./resource.coffee');
...@@ -2323,7 +2370,7 @@ module.exports = Resources = (function() { ...@@ -2323,7 +2370,7 @@ module.exports = Resources = (function() {
})(); })();
},{"./resource.coffee":42}],45:[function(require,module,exports){ },{"./resource.coffee":43}],46:[function(require,module,exports){
var Descriptor, LayerComps; var Descriptor, LayerComps;
Descriptor = require('../descriptor.coffee'); Descriptor = require('../descriptor.coffee');
...@@ -2376,7 +2423,7 @@ module.exports = LayerComps = (function() { ...@@ -2376,7 +2423,7 @@ module.exports = LayerComps = (function() {
})(); })();
},{"../descriptor.coffee":4}],46:[function(require,module,exports){ },{"../descriptor.coffee":4}],47:[function(require,module,exports){
var Util; var Util;
module.exports = Util = (function() { module.exports = Util = (function() {
...@@ -2407,7 +2454,7 @@ module.exports = Util = (function() { ...@@ -2407,7 +2454,7 @@ module.exports = Util = (function() {
})(); })();
},{}],47:[function(require,module,exports){ },{}],48:[function(require,module,exports){
// shim for using process in browser // shim for using process in browser
var process = module.exports = {}; var process = module.exports = {};
...@@ -2455,8 +2502,11 @@ process.argv = []; ...@@ -2455,8 +2502,11 @@ process.argv = [];
function noop() {} function noop() {}
process.on = noop; process.on = noop;
process.addListener = noop;
process.once = noop; process.once = noop;
process.off = noop; process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop; process.emit = noop;
process.binding = function (name) { process.binding = function (name) {
...@@ -2469,9 +2519,9 @@ process.chdir = function (dir) { ...@@ -2469,9 +2519,9 @@ process.chdir = function (dir) {
throw new Error('process.chdir is not supported'); throw new Error('process.chdir is not supported');
}; };
},{}],48:[function(require,module,exports){ },{}],49:[function(require,module,exports){
module.exports = require('./module'); module.exports = require('./module');
},{"./module":49}],49:[function(require,module,exports){ },{"./module":50}],50:[function(require,module,exports){
// Generated by CoffeeScript 1.7.1 // Generated by CoffeeScript 1.7.1
var Module, moduleKeywords, var Module, moduleKeywords,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
...@@ -2551,7 +2601,7 @@ exports.Module = Module = (function() { ...@@ -2551,7 +2601,7 @@ exports.Module = Module = (function() {
})(); })();
},{}],50:[function(require,module,exports){ },{}],51:[function(require,module,exports){
/*! /*!
* Copyright © 2008 Fair Oaks Labs, Inc. * Copyright © 2008 Fair Oaks Labs, Inc.
* All rights reserved. * All rights reserved.
...@@ -2807,7 +2857,7 @@ function JSPack() ...@@ -2807,7 +2857,7 @@ function JSPack()
exports.jspack = new JSPack(); exports.jspack = new JSPack();
},{}],51:[function(require,module,exports){ },{}],52:[function(require,module,exports){
(function (global){ (function (global){
/** /**
* @license * @license
...@@ -9596,7 +9646,7 @@ exports.jspack = new JSPack(); ...@@ -9596,7 +9646,7 @@ exports.jspack = new JSPack();
}.call(this)); }.call(this));
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}],52:[function(require,module,exports){ },{}],53:[function(require,module,exports){
"use strict"; "use strict";
var Promise = require("./rsvp/promise")["default"]; var Promise = require("./rsvp/promise")["default"];
var EventTarget = require("./rsvp/events")["default"]; var EventTarget = require("./rsvp/events")["default"];
...@@ -9659,11 +9709,243 @@ exports.reject = reject; ...@@ -9659,11 +9709,243 @@ exports.reject = reject;
exports.async = async; exports.async = async;
exports.map = map; exports.map = map;
exports.filter = filter; exports.filter = filter;
},{"./rsvp/all":54,"./rsvp/all-settled":53,"./rsvp/asap":55,"./rsvp/config":56,"./rsvp/defer":57,"./rsvp/events":58,"./rsvp/filter":59,"./rsvp/hash":61,"./rsvp/hash-settled":60,"./rsvp/map":63,"./rsvp/node":64,"./rsvp/promise":65,"./rsvp/race":71,"./rsvp/reject":72,"./rsvp/resolve":73,"./rsvp/rethrow":74}],53:[function(require,module,exports){ },{"./rsvp/all":56,"./rsvp/all-settled":55,"./rsvp/asap":57,"./rsvp/config":58,"./rsvp/defer":59,"./rsvp/events":61,"./rsvp/filter":62,"./rsvp/hash":64,"./rsvp/hash-settled":63,"./rsvp/map":66,"./rsvp/node":67,"./rsvp/promise":69,"./rsvp/race":75,"./rsvp/reject":76,"./rsvp/resolve":77,"./rsvp/rethrow":78}],54:[function(require,module,exports){
'use strict';
var objectOrFunction = require('./utils').objectOrFunction;
var isFunction = require('./utils').isFunction;
var now = require('./utils').now;
var instrument = require('./instrument')['default'];
var config = require('./config').config;
function noop() {
}
var PENDING = void 0;
var FULFILLED = 1;
var REJECTED = 2;
var GET_THEN_ERROR = new ErrorObject();
function getThen(promise) {
try {
return promise.then;
} catch (error) {
GET_THEN_ERROR.error = error;
return GET_THEN_ERROR;
}
}
function tryThen(then, value, fulfillmentHandler, rejectionHandler) {
try {
then.call(value, fulfillmentHandler, rejectionHandler);
} catch (e) {
return e;
}
}
function handleForeignThenable(promise, thenable, then) {
config.async(function (promise$2) {
var sealed = false;
var error = tryThen(then, thenable, function (value) {
if (sealed) {
return;
}
sealed = true;
if (thenable !== value) {
resolve(promise$2, value);
} else {
fulfill(promise$2, value);
}
}, function (reason) {
if (sealed) {
return;
}
sealed = true;
reject(promise$2, reason);
}, 'Settle: ' + (promise$2._label || ' unknown promise'));
if (!sealed && error) {
sealed = true;
reject(promise$2, error);
}
}, promise);
}
function handleOwnThenable(promise, thenable) {
promise._onerror = null;
if (thenable._state === FULFILLED) {
fulfill(promise, thenable._result);
} else if (promise._state === REJECTED) {
reject(promise, thenable._result);
} else {
subscribe(thenable, undefined, function (value) {
if (thenable !== value) {
resolve(promise, value);
} else {
fulfill(promise, value);
}
}, function (reason) {
reject(promise, reason);
});
}
}
function handleMaybeThenable(promise, maybeThenable) {
if (maybeThenable instanceof promise.constructor) {
handleOwnThenable(promise, maybeThenable);
} else {
var then = getThen(maybeThenable);
if (then === GET_THEN_ERROR) {
reject(promise, GET_THEN_ERROR.error);
} else if (then === undefined) {
fulfill(promise, maybeThenable);
} else if (isFunction(then)) {
handleForeignThenable(promise, maybeThenable, then);
} else {
fulfill(promise, maybeThenable);
}
}
}
function resolve(promise, value) {
if (promise === value) {
fulfill(promise, value);
} else if (objectOrFunction(value)) {
handleMaybeThenable(promise, value);
} else {
fulfill(promise, value);
}
}
function publishRejection(promise) {
if (promise._onerror) {
promise._onerror(promise._result);
}
publish(promise);
}
function fulfill(promise, value) {
if (promise._state !== PENDING) {
return;
}
promise._result = value;
promise._state = FULFILLED;
if (promise._subscribers.length === 0) {
if (config.instrument) {
instrument('fulfilled', promise);
}
} else {
config.async(publish, promise);
}
}
function reject(promise, reason) {
if (promise._state !== PENDING) {
return;
}
promise._state = REJECTED;
promise._result = reason;
config.async(publishRejection, promise);
}
function subscribe(parent, child, onFulfillment, onRejection) {
var subscribers = parent._subscribers;
var length = subscribers.length;
parent._onerror = null;
subscribers[length] = child;
subscribers[length + FULFILLED] = onFulfillment;
subscribers[length + REJECTED] = onRejection;
if (length === 0 && parent._state) {
config.async(publish, parent);
}
}
function publish(promise) {
var subscribers = promise._subscribers;
var settled = promise._state;
if (config.instrument) {
instrument(settled === FULFILLED ? 'fulfilled' : 'rejected', promise);
}
if (subscribers.length === 0) {
return;
}
var child, callback, detail = promise._result;
for (var i = 0; i < subscribers.length; i += 3) {
child = subscribers[i];
callback = subscribers[i + settled];
if (child) {
invokeCallback(settled, child, callback, detail);
} else {
callback(detail);
}
}
promise._subscribers.length = 0;
}
function ErrorObject() {
this.error = null;
}
var TRY_CATCH_ERROR = new ErrorObject();
function tryCatch(callback, detail) {
try {
return callback(detail);
} catch (e) {
TRY_CATCH_ERROR.error = e;
return TRY_CATCH_ERROR;
}
}
function invokeCallback(settled, promise, callback, detail) {
var hasCallback = isFunction(callback), value, error, succeeded, failed;
if (hasCallback) {
value = tryCatch(callback, detail);
if (value === TRY_CATCH_ERROR) {
failed = true;
error = value.error;
value = null;
} else {
succeeded = true;
}
if (promise === value) {
reject(promise, new TypeError('A promises callback cannot return that same promise.'));
return;
}
} else {
value = detail;
succeeded = true;
}
if (promise._state !== PENDING) {
} // noop
else if (hasCallback && succeeded) {
resolve(promise, value);
} else if (failed) {
reject(promise, error);
} else if (settled === FULFILLED) {
fulfill(promise, value);
} else if (settled === REJECTED) {
reject(promise, value);
}
}
function initializePromise(promise, resolver) {
try {
resolver(function resolvePromise(value) {
resolve(promise, value);
}, function rejectPromise(reason) {
reject(promise, reason);
});
} catch (e) {
reject(promise, e);
}
}
exports.noop = noop;
exports.resolve = resolve;
exports.reject = reject;
exports.fulfill = fulfill;
exports.subscribe = subscribe;
exports.publish = publish;
exports.publishRejection = publishRejection;
exports.initializePromise = initializePromise;
exports.invokeCallback = invokeCallback;
exports.FULFILLED = FULFILLED;
exports.REJECTED = REJECTED;
},{"./config":58,"./instrument":65,"./utils":79}],55:[function(require,module,exports){
'use strict'; 'use strict';
var Enumerator = require('./enumerator')['default'];
var makeSettledResult = require('./enumerator').makeSettledResult;
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
var isArray = require('./utils').isArray; var o_create = require('./utils').o_create;
var isNonThenable = require('./utils').isNonThenable; function AllSettled(Constructor, entries, label) {
this._superConstructor(Constructor, entries, false, label);
}
AllSettled.prototype = o_create(Enumerator.prototype);
AllSettled.prototype._superConstructor = Enumerator;
AllSettled.prototype._makeResult = makeSettledResult;
AllSettled.prototype._validationError = function () {
return new Error('allSettled must be called with an array');
};
/** /**
`RSVP.allSettled` is similar to `RSVP.all`, but instead of implementing `RSVP.allSettled` is similar to `RSVP.all`, but instead of implementing
a fail-fast method, it waits until all the promises have returned and a fail-fast method, it waits until all the promises have returned and
...@@ -9716,56 +9998,9 @@ var isNonThenable = require('./utils').isNonThenable; ...@@ -9716,56 +9998,9 @@ var isNonThenable = require('./utils').isNonThenable;
states of the constituent promises. states of the constituent promises.
*/ */
exports['default'] = function allSettled(entries, label) { exports['default'] = function allSettled(entries, label) {
return new Promise(function (resolve, reject) { return new AllSettled(Promise, entries, label).promise;
if (!isArray(entries)) {
throw new TypeError('You must pass an array to allSettled.');
}
var remaining = entries.length;
var entry;
if (remaining === 0) {
resolve([]);
return;
}
var results = new Array(remaining);
function fulfilledResolver(index$2) {
return function (value) {
resolveAll(index$2, fulfilled(value));
};
}
function rejectedResolver(index$2) {
return function (reason) {
resolveAll(index$2, rejected(reason));
};
}
function resolveAll(index$2, value) {
results[index$2] = value;
if (--remaining === 0) {
resolve(results);
}
}
for (var index = 0; index < entries.length; index++) {
entry = entries[index];
if (isNonThenable(entry)) {
resolveAll(index, fulfilled(entry));
} else {
Promise.resolve(entry).then(fulfilledResolver(index), rejectedResolver(index));
}
}
}, label);
}; };
function fulfilled(value) { },{"./enumerator":60,"./promise":69,"./utils":79}],56:[function(require,module,exports){
return {
state: 'fulfilled',
value: value
};
}
function rejected(reason) {
return {
state: 'rejected',
reason: reason
};
}
},{"./promise":65,"./utils":75}],54:[function(require,module,exports){
'use strict'; 'use strict';
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
/** /**
...@@ -9781,15 +10016,15 @@ var Promise = require('./promise')['default']; ...@@ -9781,15 +10016,15 @@ var Promise = require('./promise')['default'];
exports['default'] = function all(array, label) { exports['default'] = function all(array, label) {
return Promise.all(array, label); return Promise.all(array, label);
}; };
},{"./promise":65}],55:[function(require,module,exports){ },{"./promise":69}],57:[function(require,module,exports){
(function (process){ (function (process){
'use strict'; 'use strict';
var length = 0;
exports['default'] = function asap(callback, arg) { exports['default'] = function asap(callback, arg) {
var length = queue.push([ queue[length] = callback;
callback, queue[length + 1] = arg;
arg length += 2;
]); if (length === 2) {
if (length === 1) {
// If length is 1, that means that we need to schedule an async flush. // If length is 1, that means that we need to schedule an async flush.
// If additional callbacks are queued before the queue is flushed, they // If additional callbacks are queued before the queue is flushed, they
// will be processed by this flush that we are scheduling. // will be processed by this flush that we are scheduling.
...@@ -9798,6 +10033,8 @@ exports['default'] = function asap(callback, arg) { ...@@ -9798,6 +10033,8 @@ exports['default'] = function asap(callback, arg) {
}; };
var browserGlobal = typeof window !== 'undefined' ? window : {}; var browserGlobal = typeof window !== 'undefined' ? window : {};
var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
// test for web worker but not in IE10
var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';
// node // node
function useNextTick() { function useNextTick() {
return function () { return function () {
...@@ -9813,19 +10050,29 @@ function useMutationObserver() { ...@@ -9813,19 +10050,29 @@ function useMutationObserver() {
node.data = iterations = ++iterations % 2; node.data = iterations = ++iterations % 2;
}; };
} }
// web worker
function useMessageChannel() {
var channel = new MessageChannel();
channel.port1.onmessage = flush;
return function () {
channel.port2.postMessage(0);
};
}
function useSetTimeout() { function useSetTimeout() {
return function () { return function () {
setTimeout(flush, 1); setTimeout(flush, 1);
}; };
} }
var queue = []; var queue = new Array(1000);
function flush() { function flush() {
for (var i = 0; i < queue.length; i++) { for (var i = 0; i < length; i += 2) {
var tuple = queue[i]; var callback = queue[i];
var callback = tuple[0], arg = tuple[1]; var arg = queue[i + 1];
callback(arg); callback(arg);
queue[i] = undefined;
queue[i + 1] = undefined;
} }
queue.length = 0; length = 0;
} }
var scheduleFlush; var scheduleFlush;
// Decide what async method to use to triggering processing of queued callbacks: // Decide what async method to use to triggering processing of queued callbacks:
...@@ -9833,11 +10080,13 @@ if (typeof process !== 'undefined' && {}.toString.call(process) === '[object pro ...@@ -9833,11 +10080,13 @@ if (typeof process !== 'undefined' && {}.toString.call(process) === '[object pro
scheduleFlush = useNextTick(); scheduleFlush = useNextTick();
} else if (BrowserMutationObserver) { } else if (BrowserMutationObserver) {
scheduleFlush = useMutationObserver(); scheduleFlush = useMutationObserver();
} else if (isWorker) {
scheduleFlush = useMessageChannel();
} else { } else {
scheduleFlush = useSetTimeout(); scheduleFlush = useSetTimeout();
} }
}).call(this,require("/Users/ryanlefevre/Repositories/psd.js/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js")) }).call(this,require("FWaASH"))
},{"/Users/ryanlefevre/Repositories/psd.js/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":47}],56:[function(require,module,exports){ },{"FWaASH":48}],58:[function(require,module,exports){
'use strict'; 'use strict';
var EventTarget = require('./events')['default']; var EventTarget = require('./events')['default'];
var config = { instrument: false }; var config = { instrument: false };
...@@ -9858,7 +10107,7 @@ function configure(name, value) { ...@@ -9858,7 +10107,7 @@ function configure(name, value) {
} }
exports.config = config; exports.config = config;
exports.configure = configure; exports.configure = configure;
},{"./events":58}],57:[function(require,module,exports){ },{"./events":61}],59:[function(require,module,exports){
'use strict'; 'use strict';
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
/** /**
...@@ -9901,7 +10150,113 @@ exports['default'] = function defer(label) { ...@@ -9901,7 +10150,113 @@ exports['default'] = function defer(label) {
}, label); }, label);
return deferred; return deferred;
}; };
},{"./promise":65}],58:[function(require,module,exports){ },{"./promise":69}],60:[function(require,module,exports){
'use strict';
var isArray = require('./utils').isArray;
var isMaybeThenable = require('./utils').isMaybeThenable;
var noop = require('./-internal').noop;
var reject = require('./-internal').reject;
var fulfill = require('./-internal').fulfill;
var subscribe = require('./-internal').subscribe;
var FULFILLED = require('./-internal').FULFILLED;
var REJECTED = require('./-internal').REJECTED;
var PENDING = require('./-internal').PENDING;
var ABORT_ON_REJECTION = true;
exports.ABORT_ON_REJECTION = ABORT_ON_REJECTION;
function makeSettledResult(state, position, value) {
if (state === FULFILLED) {
return {
state: 'fulfilled',
value: value
};
} else {
return {
state: 'rejected',
reason: value
};
}
}
exports.makeSettledResult = makeSettledResult;
function Enumerator(Constructor, input, abortOnReject, label) {
this._instanceConstructor = Constructor;
this.promise = new Constructor(noop, label);
this._abortOnReject = abortOnReject;
if (this._validateInput(input)) {
this._input = input;
this.length = input.length;
this._remaining = input.length;
this._init();
if (this.length === 0) {
fulfill(this.promise, this._result);
} else {
this.length = this.length || 0;
this._enumerate();
if (this._remaining === 0) {
fulfill(this.promise, this._result);
}
}
} else {
reject(this.promise, this._validationError());
}
}
Enumerator.prototype._validateInput = function (input) {
return isArray(input);
};
Enumerator.prototype._validationError = function () {
return new Error('Array Methods must be provided an Array');
};
Enumerator.prototype._init = function () {
this._result = new Array(this.length);
};
exports['default'] = Enumerator;
Enumerator.prototype._enumerate = function () {
var length = this.length;
var promise = this.promise;
var input = this._input;
for (var i = 0; promise._state === PENDING && i < length; i++) {
this._eachEntry(input[i], i);
}
};
Enumerator.prototype._eachEntry = function (entry, i) {
var c = this._instanceConstructor;
if (isMaybeThenable(entry)) {
if (entry.constructor === c && entry._state !== PENDING) {
entry._onerror = null;
this._settledAt(entry._state, i, entry._result);
} else {
this._willSettleAt(c.resolve(entry), i);
}
} else {
this._remaining--;
this._result[i] = this._makeResult(FULFILLED, i, entry);
}
};
Enumerator.prototype._settledAt = function (state, i, value) {
var promise = this.promise;
if (promise._state === PENDING) {
this._remaining--;
if (this._abortOnReject && state === REJECTED) {
reject(promise, value);
} else {
this._result[i] = this._makeResult(state, i, value);
}
}
if (this._remaining === 0) {
fulfill(promise, this._result);
}
};
Enumerator.prototype._makeResult = function (state, i, value) {
return value;
};
Enumerator.prototype._willSettleAt = function (promise, i) {
var enumerator = this;
subscribe(promise, undefined, function (value) {
enumerator._settledAt(FULFILLED, i, value);
}, function (reason) {
enumerator._settledAt(REJECTED, i, reason);
});
};
},{"./-internal":54,"./utils":79}],61:[function(require,module,exports){
'use strict'; 'use strict';
function indexOf(callbacks, callback) { function indexOf(callbacks, callback) {
for (var i = 0, l = callbacks.length; i < l; i++) { for (var i = 0, l = callbacks.length; i < l; i++) {
...@@ -9962,10 +10317,11 @@ exports['default'] = { ...@@ -9962,10 +10317,11 @@ exports['default'] = {
} }
} }
}; };
},{}],59:[function(require,module,exports){ },{}],62:[function(require,module,exports){
'use strict'; 'use strict';
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
var isFunction = require('./utils').isFunction; var isFunction = require('./utils').isFunction;
var isMaybeThenable = require('./utils').isMaybeThenable;
/** /**
`RSVP.filter` is similar to JavaScript's native `filter` method, except that it `RSVP.filter` is similar to JavaScript's native `filter` method, except that it
waits for all promises to become fulfilled before running the `filterFn` on waits for all promises to become fulfilled before running the `filterFn` on
...@@ -9981,6 +10337,8 @@ var isFunction = require('./utils').isFunction; ...@@ -9981,6 +10337,8 @@ var isFunction = require('./utils').isFunction;
var promise2 = RSVP.resolve(2); var promise2 = RSVP.resolve(2);
var promise3 = RSVP.resolve(3); var promise3 = RSVP.resolve(3);
var promises = [promise1, promise2, promise3];
var filterFn = function(item){ var filterFn = function(item){
return item > 1; return item > 1;
}; };
...@@ -10063,7 +10421,7 @@ exports['default'] = function filter(promises, filterFn, label) { ...@@ -10063,7 +10421,7 @@ exports['default'] = function filter(promises, filterFn, label) {
var results = new Array(length); var results = new Array(length);
var newLength = 0; var newLength = 0;
for (var i$2 = 0; i$2 < length; i$2++) { for (var i$2 = 0; i$2 < length; i$2++) {
if (filtered$2[i$2] === true) { if (filtered$2[i$2]) {
results[newLength] = values[i$2]; results[newLength] = values[i$2];
newLength++; newLength++;
} }
...@@ -10073,11 +10431,22 @@ exports['default'] = function filter(promises, filterFn, label) { ...@@ -10073,11 +10431,22 @@ exports['default'] = function filter(promises, filterFn, label) {
}); });
}); });
}; };
},{"./promise":65,"./utils":75}],60:[function(require,module,exports){ },{"./promise":69,"./utils":79}],63:[function(require,module,exports){
'use strict'; 'use strict';
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
var isNonThenable = require('./utils').isNonThenable; var makeSettledResult = require('./enumerator').makeSettledResult;
var keysOf = require('./utils').keysOf; var PromiseHash = require('./promise-hash')['default'];
var Enumerator = require('./enumerator')['default'];
var o_create = require('./utils').o_create;
function HashSettled(Constructor, object, label) {
this._superConstructor(Constructor, object, false, label);
}
HashSettled.prototype = o_create(PromiseHash.prototype);
HashSettled.prototype._superConstructor = Enumerator;
HashSettled.prototype._makeResult = makeSettledResult;
HashSettled.prototype._validationError = function () {
return new Error('hashSettled must be called with an object');
};
/** /**
`RSVP.hashSettled` is similar to `RSVP.allSettled`, but takes an object `RSVP.hashSettled` is similar to `RSVP.allSettled`, but takes an object
instead of an array for its `promises` argument. instead of an array for its `promises` argument.
...@@ -10180,59 +10549,13 @@ var keysOf = require('./utils').keysOf; ...@@ -10180,59 +10549,13 @@ var keysOf = require('./utils').keysOf;
@static @static
*/ */
exports['default'] = function hashSettled(object, label) { exports['default'] = function hashSettled(object, label) {
return new Promise(function (resolve, reject) { return new HashSettled(Promise, object, label).promise;
var results = {};
var keys = keysOf(object);
var remaining = keys.length;
var entry, property;
if (remaining === 0) {
resolve(results);
return;
}
function fulfilledResolver(property$2) {
return function (value) {
resolveAll(property$2, fulfilled(value));
};
}
function rejectedResolver(property$2) {
return function (reason) {
resolveAll(property$2, rejected(reason));
};
}
function resolveAll(property$2, value) {
results[property$2] = value;
if (--remaining === 0) {
resolve(results);
}
}
for (var i = 0; i < keys.length; i++) {
property = keys[i];
entry = object[property];
if (isNonThenable(entry)) {
resolveAll(property, fulfilled(entry));
} else {
Promise.resolve(entry).then(fulfilledResolver(property), rejectedResolver(property));
}
}
});
}; };
function fulfilled(value) { },{"./enumerator":60,"./promise":69,"./promise-hash":68,"./utils":79}],64:[function(require,module,exports){
return {
state: 'fulfilled',
value: value
};
}
function rejected(reason) {
return {
state: 'rejected',
reason: reason
};
}
},{"./promise":65,"./utils":75}],61:[function(require,module,exports){
'use strict'; 'use strict';
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
var isNonThenable = require('./utils').isNonThenable; var PromiseHash = require('./promise-hash')['default'];
var keysOf = require('./utils').keysOf; var ABORT_ON_REJECTION = require('./enumerator').ABORT_ON_REJECTION;
/** /**
`RSVP.hash` is similar to `RSVP.all`, but takes an object instead of an array `RSVP.hash` is similar to `RSVP.all`, but takes an object instead of an array
for its `promises` argument. for its `promises` argument.
...@@ -10322,64 +10645,37 @@ var keysOf = require('./utils').keysOf; ...@@ -10322,64 +10645,37 @@ var keysOf = require('./utils').keysOf;
have been fulfilled, or rejected if any of them become rejected. have been fulfilled, or rejected if any of them become rejected.
*/ */
exports['default'] = function hash(object, label) { exports['default'] = function hash(object, label) {
return new Promise(function (resolve, reject) { return new PromiseHash(Promise, object, label).promise;
var results = {};
var keys = keysOf(object);
var remaining = keys.length;
var entry, property;
if (remaining === 0) {
resolve(results);
return;
}
function fulfilledTo(property$2) {
return function (value) {
results[property$2] = value;
if (--remaining === 0) {
resolve(results);
}
};
}
function onRejection(reason) {
remaining = 0;
reject(reason);
}
for (var i = 0; i < keys.length; i++) {
property = keys[i];
entry = object[property];
if (isNonThenable(entry)) {
results[property] = entry;
if (--remaining === 0) {
resolve(results);
}
} else {
Promise.resolve(entry).then(fulfilledTo(property), onRejection);
}
}
});
}; };
},{"./promise":65,"./utils":75}],62:[function(require,module,exports){ },{"./enumerator":60,"./promise":69,"./promise-hash":68}],65:[function(require,module,exports){
'use strict'; 'use strict';
var config = require('./config').config; var config = require('./config').config;
var now = require('./utils').now; var now = require('./utils').now;
var queue = [];
exports['default'] = function instrument(eventName, promise, child) { exports['default'] = function instrument(eventName, promise, child) {
// instrumentation should not disrupt normal usage. if (1 === queue.push({
try { name: eventName,
config.trigger(eventName, { payload: {
guid: promise._guidKey + promise._id, guid: promise._guidKey + promise._id,
eventName: eventName, eventName: eventName,
detail: promise._detail, detail: promise._result,
childGuid: child && promise._guidKey + child._id, childGuid: child && promise._guidKey + child._id,
label: promise._label, label: promise._label,
timeStamp: now(), timeStamp: now(),
stack: new Error(promise._label).stack stack: new Error(promise._label).stack
}); }
} catch (error) { })) {
setTimeout(function () { setTimeout(function () {
throw error; var entry;
}, 0); for (var i = 0; i < queue.length; i++) {
entry = queue[i];
config.trigger(entry.name, entry.payload);
}
queue.length = 0;
}, 50);
} }
}; };
},{"./config":56,"./utils":75}],63:[function(require,module,exports){ },{"./config":58,"./utils":79}],66:[function(require,module,exports){
'use strict'; 'use strict';
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
var isArray = require('./utils').isArray; var isArray = require('./utils').isArray;
...@@ -10432,7 +10728,7 @@ var isFunction = require('./utils').isFunction; ...@@ -10432,7 +10728,7 @@ var isFunction = require('./utils').isFunction;
`RSVP.map` will also wait if a promise is returned from `mapFn`. For example, `RSVP.map` will also wait if a promise is returned from `mapFn`. For example,
say you want to get all comments from a set of blog posts, but you need say you want to get all comments from a set of blog posts, but you need
the blog posts first becuase they contain a url to those comments. the blog posts first because they contain a url to those comments.
```javscript ```javscript
...@@ -10475,7 +10771,7 @@ exports['default'] = function map(promises, mapFn, label) { ...@@ -10475,7 +10771,7 @@ exports['default'] = function map(promises, mapFn, label) {
return Promise.all(results, label); return Promise.all(results, label);
}); });
}; };
},{"./promise":65,"./utils":75}],64:[function(require,module,exports){ },{"./promise":69,"./utils":79}],67:[function(require,module,exports){
'use strict'; 'use strict';
/* global arraySlice */ /* global arraySlice */
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
...@@ -10619,7 +10915,9 @@ exports['default'] = function denodeify(nodeFunc, argumentNames) { ...@@ -10619,7 +10915,9 @@ exports['default'] = function denodeify(nodeFunc, argumentNames) {
} }
var thisArg; var thisArg;
if (!asArray && !asHash && argumentNames) { if (!asArray && !asHash && argumentNames) {
if (typeof console === 'object') {
console.warn('Deprecation: RSVP.denodeify() doesn\'t allow setting the ' + '"this" binding anymore. Use yourFunction.bind(yourThis) instead.'); console.warn('Deprecation: RSVP.denodeify() doesn\'t allow setting the ' + '"this" binding anymore. Use yourFunction.bind(yourThis) instead.');
}
thisArg = argumentNames; thisArg = argumentNames;
} else { } else {
thisArg = this; thisArg = this;
...@@ -10663,7 +10961,48 @@ exports['default'] = function denodeify(nodeFunc, argumentNames) { ...@@ -10663,7 +10961,48 @@ exports['default'] = function denodeify(nodeFunc, argumentNames) {
denodeifiedFunction.__proto__ = nodeFunc; denodeifiedFunction.__proto__ = nodeFunc;
return denodeifiedFunction; return denodeifiedFunction;
}; };
},{"./promise":65,"./utils":75}],65:[function(require,module,exports){ },{"./promise":69,"./utils":79}],68:[function(require,module,exports){
'use strict';
var Enumerator = require('./enumerator')['default'];
var PENDING = require('./-internal').PENDING;
var FULFILLED = require('./-internal').FULFILLED;
var o_create = require('./utils').o_create;
function PromiseHash(Constructor, object, label) {
this._superConstructor(Constructor, object, true, label);
}
exports['default'] = PromiseHash;
PromiseHash.prototype = o_create(Enumerator.prototype);
PromiseHash.prototype._superConstructor = Enumerator;
PromiseHash.prototype._init = function () {
this._result = {};
};
PromiseHash.prototype._validateInput = function (input) {
return input && typeof input === 'object';
};
PromiseHash.prototype._validationError = function () {
return new Error('Promise.hash must be called with an object');
};
PromiseHash.prototype._enumerate = function () {
var promise = this.promise;
var input = this._input;
var results = [];
for (var key in input) {
if (promise._state === PENDING && input.hasOwnProperty(key)) {
results.push({
position: key,
entry: input[key]
});
}
}
var length = results.length;
this._remaining = length;
var result;
for (var i = 0; promise._state === PENDING && i < length; i++) {
result = results[i];
this._eachEntry(result.entry, result.position);
}
};
},{"./-internal":54,"./enumerator":60,"./utils":79}],69:[function(require,module,exports){
'use strict'; 'use strict';
var config = require('./config').config; var config = require('./config').config;
var EventTarget = require('./events')['default']; var EventTarget = require('./events')['default'];
...@@ -10671,6 +11010,15 @@ var instrument = require('./instrument')['default']; ...@@ -10671,6 +11010,15 @@ var instrument = require('./instrument')['default'];
var objectOrFunction = require('./utils').objectOrFunction; var objectOrFunction = require('./utils').objectOrFunction;
var isFunction = require('./utils').isFunction; var isFunction = require('./utils').isFunction;
var now = require('./utils').now; var now = require('./utils').now;
var noop = require('./-internal').noop;
var resolve = require('./-internal').resolve;
var reject = require('./-internal').reject;
var fulfill = require('./-internal').fulfill;
var subscribe = require('./-internal').subscribe;
var initializePromise = require('./-internal').initializePromise;
var invokeCallback = require('./-internal').invokeCallback;
var FULFILLED = require('./-internal').FULFILLED;
var REJECTED = require('./-internal').REJECTED;
var cast = require('./promise/cast')['default']; var cast = require('./promise/cast')['default'];
var all = require('./promise/all')['default']; var all = require('./promise/all')['default'];
var race = require('./promise/race')['default']; var race = require('./promise/race')['default'];
...@@ -10678,7 +11026,11 @@ var Resolve = require('./promise/resolve')['default']; ...@@ -10678,7 +11026,11 @@ var Resolve = require('./promise/resolve')['default'];
var Reject = require('./promise/reject')['default']; var Reject = require('./promise/reject')['default'];
var guidKey = 'rsvp_' + now() + '-'; var guidKey = 'rsvp_' + now() + '-';
var counter = 0; var counter = 0;
function noop() { function needsResolver() {
throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
}
function needsNew() {
throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.');
} }
exports['default'] = Promise; exports['default'] = Promise;
/** /**
...@@ -10751,7 +11103,7 @@ exports['default'] = Promise; ...@@ -10751,7 +11103,7 @@ exports['default'] = Promise;
if (this.status === 200) { if (this.status === 200) {
resolve(this.response); resolve(this.response);
} else { } else {
reject(new Error("getJSON: `" + url + "` failed with status: [" + this.status + "]"); reject(new Error("getJSON: `" + url + "` failed with status: [" + this.status + "]"));
} }
} }
}; };
...@@ -10780,18 +11132,12 @@ exports['default'] = Promise; ...@@ -10780,18 +11132,12 @@ exports['default'] = Promise;
``` ```
@class RSVP.Promise @class RSVP.Promise
@param {function} @param {function} resolver
@param {String} label optional string for labeling the promise. @param {String} label optional string for labeling the promise.
Useful for tooling. Useful for tooling.
@constructor @constructor
*/ */
function Promise(resolver, label) { function Promise(resolver, label) {
if (!isFunction(resolver)) {
throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');
}
if (!(this instanceof Promise)) {
throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.');
}
this._id = counter++; this._id = counter++;
this._label = label; this._label = label;
this._subscribers = []; this._subscribers = [];
...@@ -10799,20 +11145,13 @@ function Promise(resolver, label) { ...@@ -10799,20 +11145,13 @@ function Promise(resolver, label) {
instrument('created', this); instrument('created', this);
} }
if (noop !== resolver) { if (noop !== resolver) {
invokeResolver(resolver, this); if (!isFunction(resolver)) {
} needsResolver();
}
function invokeResolver(resolver, promise) {
function resolvePromise(value) {
resolve(promise, value);
} }
function rejectPromise(reason) { if (!(this instanceof Promise)) {
reject(promise, reason); needsNew();
} }
try { initializePromise(this, resolver);
resolver(resolvePromise, rejectPromise);
} catch (e) {
rejectPromise(e);
} }
} }
Promise.cast = cast; Promise.cast = cast;
...@@ -10820,56 +11159,41 @@ Promise.all = all; ...@@ -10820,56 +11159,41 @@ Promise.all = all;
Promise.race = race; Promise.race = race;
Promise.resolve = Resolve; Promise.resolve = Resolve;
Promise.reject = Reject; Promise.reject = Reject;
var PENDING = void 0;
var SEALED = 0;
var FULFILLED = 1;
var REJECTED = 2;
function subscribe(parent, child, onFulfillment, onRejection) {
var subscribers = parent._subscribers;
var length = subscribers.length;
subscribers[length] = child;
subscribers[length + FULFILLED] = onFulfillment;
subscribers[length + REJECTED] = onRejection;
}
function publish(promise, settled) {
var child, callback, subscribers = promise._subscribers, detail = promise._detail;
if (config.instrument) {
instrument(settled === FULFILLED ? 'fulfilled' : 'rejected', promise);
}
for (var i = 0; i < subscribers.length; i += 3) {
child = subscribers[i];
callback = subscribers[i + settled];
invokeCallback(settled, child, callback, detail);
}
promise._subscribers = null;
}
Promise.prototype = { Promise.prototype = {
constructor: Promise, constructor: Promise,
_id: undefined, _id: undefined,
_guidKey: guidKey, _guidKey: guidKey,
_label: undefined, _label: undefined,
_state: undefined, _state: undefined,
_detail: undefined, _result: undefined,
_subscribers: undefined, _subscribers: undefined,
_onerror: function (reason) { _onerror: function (reason) {
config.trigger('error', reason); config.trigger('error', reason);
}, },
then: function (onFulfillment, onRejection, label) { then: function (onFulfillment, onRejection, label) {
var promise = this; var parent = this;
this._onerror = null; var state = parent._state;
var thenPromise = new this.constructor(noop, label); if (state === FULFILLED && !onFulfillment || state === REJECTED && !onRejection) {
if (this._state) { if (config.instrument) {
var callbacks = arguments; instrument('chained', this, this);
config.async(function invokePromiseCallback() {
invokeCallback(promise._state, thenPromise, callbacks[promise._state - 1], promise._detail);
});
} else {
subscribe(this, thenPromise, onFulfillment, onRejection);
} }
return this;
}
parent._onerror = null;
var child = new this.constructor(noop, label);
var result = parent._result;
if (config.instrument) { if (config.instrument) {
instrument('chained', promise, thenPromise); instrument('chained', parent, child);
} }
return thenPromise; if (state) {
var callback = arguments[state - 1];
config.async(function () {
invokeCallback(state, child, callback, result);
});
} else {
subscribe(parent, child, onFulfillment, onRejection);
}
return child;
}, },
'catch': function (onRejection, label) { 'catch': function (onRejection, label) {
return this.then(null, onRejection, label); return this.then(null, onRejection, label);
...@@ -10887,106 +11211,9 @@ Promise.prototype = { ...@@ -10887,106 +11211,9 @@ Promise.prototype = {
}, label); }, label);
} }
}; };
function invokeCallback(settled, promise, callback, detail) { },{"./-internal":54,"./config":58,"./events":61,"./instrument":65,"./promise/all":70,"./promise/cast":71,"./promise/race":72,"./promise/reject":73,"./promise/resolve":74,"./utils":79}],70:[function(require,module,exports){
var hasCallback = isFunction(callback), value, error, succeeded, failed;
if (hasCallback) {
try {
value = callback(detail);
succeeded = true;
} catch (e) {
failed = true;
error = e;
}
} else {
value = detail;
succeeded = true;
}
if (handleThenable(promise, value)) {
return;
} else if (hasCallback && succeeded) {
resolve(promise, value);
} else if (failed) {
reject(promise, error);
} else if (settled === FULFILLED) {
resolve(promise, value);
} else if (settled === REJECTED) {
reject(promise, value);
}
}
function handleThenable(promise, value) {
var then = null, resolved;
try {
if (promise === value) {
throw new TypeError('A promises callback cannot return that same promise.');
}
if (objectOrFunction(value)) {
then = value.then;
if (isFunction(then)) {
then.call(value, function (val) {
if (resolved) {
return true;
}
resolved = true;
if (value !== val) {
resolve(promise, val);
} else {
fulfill(promise, val);
}
}, function (val) {
if (resolved) {
return true;
}
resolved = true;
reject(promise, val);
}, 'Settle: ' + (promise._label || ' unknown promise'));
return true;
}
}
} catch (error) {
if (resolved) {
return true;
}
reject(promise, error);
return true;
}
return false;
}
function resolve(promise, value) {
if (promise === value) {
fulfill(promise, value);
} else if (!handleThenable(promise, value)) {
fulfill(promise, value);
}
}
function fulfill(promise, value) {
if (promise._state !== PENDING) {
return;
}
promise._state = SEALED;
promise._detail = value;
config.async(publishFulfillment, promise);
}
function reject(promise, reason) {
if (promise._state !== PENDING) {
return;
}
promise._state = SEALED;
promise._detail = reason;
config.async(publishRejection, promise);
}
function publishFulfillment(promise) {
publish(promise, promise._state = FULFILLED);
}
function publishRejection(promise) {
if (promise._onerror) {
promise._onerror(promise._detail);
}
publish(promise, promise._state = REJECTED);
}
},{"./config":56,"./events":58,"./instrument":62,"./promise/all":66,"./promise/cast":67,"./promise/race":68,"./promise/reject":69,"./promise/resolve":70,"./utils":75}],66:[function(require,module,exports){
'use strict'; 'use strict';
var isArray = require('../utils').isArray; var Enumerator = require('../enumerator')['default'];
var isNonThenable = require('../utils').isNonThenable;
/** /**
`RSVP.Promise.all` accepts an array of promises, and returns a new promise which `RSVP.Promise.all` accepts an array of promises, and returns a new promise which
is fulfilled with an array of fulfillment values for the passed promises, or is fulfilled with an array of fulfillment values for the passed promises, or
...@@ -11035,46 +11262,11 @@ var isNonThenable = require('../utils').isNonThenable; ...@@ -11035,46 +11262,11 @@ var isNonThenable = require('../utils').isNonThenable;
@static @static
*/ */
exports['default'] = function all(entries, label) { exports['default'] = function all(entries, label) {
/*jshint validthis:true */ return new Enumerator(this, entries, true, label).promise;
var Constructor = this;
return new Constructor(function (resolve, reject) {
if (!isArray(entries)) {
throw new TypeError('You must pass an array to all.');
}
var remaining = entries.length;
var results = new Array(remaining);
var entry, pending = true;
if (remaining === 0) {
resolve(results);
return;
}
function fulfillmentAt(index$2) {
return function (value) {
results[index$2] = value;
if (--remaining === 0) {
resolve(results);
}
};
}
function onRejection(reason) {
remaining = 0;
reject(reason);
}
for (var index = 0; index < entries.length; index++) {
entry = entries[index];
if (isNonThenable(entry)) {
results[index] = entry;
if (--remaining === 0) {
resolve(results);
}
} else {
Constructor.resolve(entry).then(fulfillmentAt(index), onRejection);
}
}
}, label);
}; };
},{"../utils":75}],67:[function(require,module,exports){ },{"../enumerator":60}],71:[function(require,module,exports){
'use strict'; 'use strict';
var resolve = require('./resolve')['default'];
/** /**
@deprecated @deprecated
...@@ -11143,22 +11335,17 @@ exports['default'] = function all(entries, label) { ...@@ -11143,22 +11335,17 @@ exports['default'] = function all(entries, label) {
Useful for tooling. Useful for tooling.
@return {Promise} promise @return {Promise} promise
*/ */
exports['default'] = function cast(object, label) { exports['default'] = resolve;
/*jshint validthis:true */ },{"./resolve":74}],72:[function(require,module,exports){
var Constructor = this;
if (object && typeof object === 'object' && object.constructor === Constructor) {
return object;
}
return new Constructor(function (resolve) {
resolve(object);
}, label);
};
},{}],68:[function(require,module,exports){
'use strict'; 'use strict';
/* global toString */
var isArray = require('../utils').isArray; var isArray = require('../utils').isArray;
var isFunction = require('../utils').isFunction; var isFunction = require('../utils').isFunction;
var isNonThenable = require('../utils').isNonThenable; var isMaybeThenable = require('../utils').isMaybeThenable;
var noop = require('../-internal').noop;
var resolve = require('../-internal').resolve;
var reject = require('../-internal').reject;
var subscribe = require('../-internal').subscribe;
var PENDING = require('../-internal').PENDING;
/** /**
`RSVP.Promise.race` returns a new promise which is settled in the same way as the `RSVP.Promise.race` returns a new promise which is settled in the same way as the
first passed promise to settle. first passed promise to settle.
...@@ -11206,7 +11393,7 @@ var isNonThenable = require('../utils').isNonThenable; ...@@ -11206,7 +11393,7 @@ var isNonThenable = require('../utils').isNonThenable;
RSVP.Promise.race([promise1, promise2]).then(function(result){ RSVP.Promise.race([promise1, promise2]).then(function(result){
// Code here never runs // Code here never runs
}, function(reason){ }, function(reason){
// reason.message === "promise2" because promise 2 became rejected before // reason.message === "promise 2" because promise 2 became rejected before
// promise 1 became fulfilled // promise 1 became fulfilled
}); });
``` ```
...@@ -11228,37 +11415,27 @@ var isNonThenable = require('../utils').isNonThenable; ...@@ -11228,37 +11415,27 @@ var isNonThenable = require('../utils').isNonThenable;
exports['default'] = function race(entries, label) { exports['default'] = function race(entries, label) {
/*jshint validthis:true */ /*jshint validthis:true */
var Constructor = this, entry; var Constructor = this, entry;
return new Constructor(function (resolve, reject) { var promise = new Constructor(noop, label);
if (!isArray(entries)) { if (!isArray(entries)) {
throw new TypeError('You must pass an array to race.'); reject(promise, new TypeError('You must pass an array to race.'));
return promise;
} }
var pending = true; var length = entries.length;
function onFulfillment(value) { function onFulfillment(value) {
if (pending) { resolve(promise, value);
pending = false;
resolve(value);
}
} }
function onRejection(reason) { function onRejection(reason) {
if (pending) { reject(promise, reason);
pending = false;
reject(reason);
}
}
for (var i = 0; i < entries.length; i++) {
entry = entries[i];
if (isNonThenable(entry)) {
pending = false;
resolve(entry);
return;
} else {
Constructor.resolve(entry).then(onFulfillment, onRejection);
} }
for (var i = 0; promise._state === PENDING && i < length; i++) {
subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);
} }
}, label); return promise;
}; };
},{"../utils":75}],69:[function(require,module,exports){ },{"../-internal":54,"../utils":79}],73:[function(require,module,exports){
'use strict'; 'use strict';
var noop = require('../-internal').noop;
var _reject = require('../-internal').reject;
/** /**
`RSVP.Promise.reject` returns a promise rejected with the passed `reason`. `RSVP.Promise.reject` returns a promise rejected with the passed `reason`.
It is shorthand for the following: It is shorthand for the following:
...@@ -11297,12 +11474,14 @@ exports['default'] = function race(entries, label) { ...@@ -11297,12 +11474,14 @@ exports['default'] = function race(entries, label) {
exports['default'] = function reject(reason, label) { exports['default'] = function reject(reason, label) {
/*jshint validthis:true */ /*jshint validthis:true */
var Constructor = this; var Constructor = this;
return new Constructor(function (resolve, reject$2) { var promise = new Constructor(noop, label);
reject$2(reason); _reject(promise, reason);
}, label); return promise;
}; };
},{}],70:[function(require,module,exports){ },{"../-internal":54}],74:[function(require,module,exports){
'use strict'; 'use strict';
var noop = require('../-internal').noop;
var _resolve = require('../-internal').resolve;
/** /**
`RSVP.Promise.resolve` returns a promise that will become resolved with the `RSVP.Promise.resolve` returns a promise that will become resolved with the
passed `value`. It is shorthand for the following: passed `value`. It is shorthand for the following:
...@@ -11341,11 +11520,11 @@ exports['default'] = function resolve(object, label) { ...@@ -11341,11 +11520,11 @@ exports['default'] = function resolve(object, label) {
if (object && typeof object === 'object' && object.constructor === Constructor) { if (object && typeof object === 'object' && object.constructor === Constructor) {
return object; return object;
} }
return new Constructor(function (resolve$2) { var promise = new Constructor(noop, label);
resolve$2(object); _resolve(promise, object);
}, label); return promise;
}; };
},{}],71:[function(require,module,exports){ },{"../-internal":54}],75:[function(require,module,exports){
'use strict'; 'use strict';
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
/** /**
...@@ -11361,7 +11540,7 @@ var Promise = require('./promise')['default']; ...@@ -11361,7 +11540,7 @@ var Promise = require('./promise')['default'];
exports['default'] = function race(array, label) { exports['default'] = function race(array, label) {
return Promise.race(array, label); return Promise.race(array, label);
}; };
},{"./promise":65}],72:[function(require,module,exports){ },{"./promise":69}],76:[function(require,module,exports){
'use strict'; 'use strict';
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
/** /**
...@@ -11378,7 +11557,7 @@ var Promise = require('./promise')['default']; ...@@ -11378,7 +11557,7 @@ var Promise = require('./promise')['default'];
exports['default'] = function reject(reason, label) { exports['default'] = function reject(reason, label) {
return Promise.reject(reason, label); return Promise.reject(reason, label);
}; };
},{"./promise":65}],73:[function(require,module,exports){ },{"./promise":69}],77:[function(require,module,exports){
'use strict'; 'use strict';
var Promise = require('./promise')['default']; var Promise = require('./promise')['default'];
/** /**
...@@ -11396,7 +11575,7 @@ var Promise = require('./promise')['default']; ...@@ -11396,7 +11575,7 @@ var Promise = require('./promise')['default'];
exports['default'] = function resolve(value, label) { exports['default'] = function resolve(value, label) {
return Promise.resolve(value, label); return Promise.resolve(value, label);
}; };
},{"./promise":65}],74:[function(require,module,exports){ },{"./promise":69}],78:[function(require,module,exports){
'use strict'; 'use strict';
/** /**
`RSVP.rethrow` will rethrow an error on the next turn of the JavaScript event `RSVP.rethrow` will rethrow an error on the next turn of the JavaScript event
...@@ -11444,7 +11623,7 @@ exports['default'] = function rethrow(reason) { ...@@ -11444,7 +11623,7 @@ exports['default'] = function rethrow(reason) {
}); });
throw reason; throw reason;
}; };
},{}],75:[function(require,module,exports){ },{}],79:[function(require,module,exports){
'use strict'; 'use strict';
function objectOrFunction(x) { function objectOrFunction(x) {
return typeof x === 'function' || typeof x === 'object' && x !== null; return typeof x === 'function' || typeof x === 'object' && x !== null;
...@@ -11454,10 +11633,10 @@ function isFunction(x) { ...@@ -11454,10 +11633,10 @@ function isFunction(x) {
return typeof x === 'function'; return typeof x === 'function';
} }
exports.isFunction = isFunction; exports.isFunction = isFunction;
function isNonThenable(x) { function isMaybeThenable(x) {
return !objectOrFunction(x); return typeof x === 'object' && x !== null;
} }
exports.isNonThenable = isNonThenable; exports.isMaybeThenable = isMaybeThenable;
var _isArray; var _isArray;
if (!Array.isArray) { if (!Array.isArray) {
_isArray = function (x) { _isArray = function (x) {
...@@ -11474,16 +11653,13 @@ var now = Date.now || function () { ...@@ -11474,16 +11653,13 @@ var now = Date.now || function () {
return new Date().getTime(); return new Date().getTime();
}; };
exports.now = now; exports.now = now;
var keysOf = Object.keys || function (object) { var o_create = Object.create || function (object) {
var result = []; var o = function () {
for (var prop in object) {
result.push(prop);
}
return result;
}; };
exports.keysOf = keysOf; o.prototype = object;
},{}],"./psd/init.coffee":[function(require,module,exports){ return o;
module.exports=require('/ioUh4'); };
exports.o_create = o_create;
},{}],"/ioUh4":[function(require,module,exports){ },{}],"/ioUh4":[function(require,module,exports){
var RSVP; var RSVP;
...@@ -11526,8 +11702,8 @@ module.exports = { ...@@ -11526,8 +11702,8 @@ module.exports = {
}; };
},{"rsvp":52}],"./image_exports/png.coffee":[function(require,module,exports){ },{"rsvp":53}],"./psd/init.coffee":[function(require,module,exports){
module.exports=require('bZ5QlH'); module.exports=require('/ioUh4');
},{}],"bZ5QlH":[function(require,module,exports){ },{}],"bZ5QlH":[function(require,module,exports){
var RSVP; var RSVP;
...@@ -11564,43 +11740,6 @@ module.exports = { ...@@ -11564,43 +11740,6 @@ module.exports = {
}; };
},{"rsvp":52}],"./image_modes/rgb.coffee":[function(require,module,exports){ },{"rsvp":53}],"./image_exports/png.coffee":[function(require,module,exports){
module.exports=require('DhO9gV'); module.exports=require('bZ5QlH');
},{}],"DhO9gV":[function(require,module,exports){
module.exports = {
combineRgbChannel: function() {
var a, b, chan, g, i, index, r, rgbChannels, val, _i, _j, _len, _ref, _results;
rgbChannels = this.channelsInfo.map(function(ch) {
return ch.id;
}).filter(function(ch) {
return ch >= -1;
});
_results = [];
for (i = _i = 0, _ref = this.numPixels; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
r = g = b = 0;
a = 255;
for (index = _j = 0, _len = rgbChannels.length; _j < _len; index = ++_j) {
chan = rgbChannels[index];
val = this.channelData[i + (this.channelLength * index)];
switch (chan) {
case -1:
a = val;
break;
case 0:
r = val;
break;
case 1:
g = val;
break;
case 2:
b = val;
}
}
_results.push(this.pixelData.push(r, g, b, a));
}
return _results;
}
};
},{}]},{},[]) },{}]},{},[])
\ No newline at end of file
fs = require 'fs' fs = require 'fs'
{Png} = require 'png' {PNG} = require 'pngjs'
RSVP = require 'rsvp' RSVP = require 'rsvp'
module.exports = module.exports =
toPng: -> toPng: ->
new RSVP.Promise (resolve, reject) => new RSVP.Promise (resolve, reject) =>
png = new Png(new Buffer(@pixelData), @width(), @height(), 'rgba') png = new PNG(filterType: 4, width: @width(), height: @height())
png.encode(resolve)
png.data = @pixelData
resolve(png)
saveAsPng: (output) -> saveAsPng: (output) ->
new RSVP.Promise (resolve, reject) => new RSVP.Promise (resolve, reject) =>
@toPng() @toPng().then (image) ->
.then (image) -> image
fs.writeFile output, image.toString('binary'), 'binary', resolve .pack()
.pipe(fs.createWriteStream(output))
.on 'finish', resolve
...@@ -5,13 +5,14 @@ module.exports = ...@@ -5,13 +5,14 @@ module.exports =
.filter (ch) -> ch >= -1 .filter (ch) -> ch >= -1
for i in [0...@numPixels] for i in [0...@numPixels]
r = g = b = a = 0 r = g = b = 0
a = 255
for chan, index in rgbChannels for chan, index in rgbChannels
val = @channelData[i + (@channelLength * index)] val = @channelData[i + (@channelLength * index)]
switch chan switch chan
when -1 then a = 255 - val when -1 then a = val
when 0 then r = val when 0 then r = val
when 1 then g = val when 1 then g = val
when 2 then b = val when 2 then b = val
......
{ {
"name": "psd", "name": "psd",
"description": "A general purpose Photoshop file parser.", "description": "A general purpose Photoshop file parser.",
"version": "1.0.1", "version": "1.0.2",
"main": "./index.js", "main": "./index.js",
"keywords": ["psd", "parser", "photoshop", "adobe", "reader"], "keywords": ["psd", "parser", "photoshop", "adobe", "reader"],
"repository": { "repository": {
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"coffee-script": "~ 1.7.1", "coffee-script": "~ 1.7.1",
"jspack": "~ 0.0.3", "jspack": "~ 0.0.3",
"coffeescript-module": "~ 0.2.1", "coffeescript-module": "~ 0.2.1",
"png": "~ 3.0.3", "pngjs": "~ 0.4.0",
"rsvp": "~ 3.0.6", "rsvp": "~ 3.0.6",
"lodash": "~ 2.4" "lodash": "~ 2.4"
}, },
......
module.exports =
combineRgbChannel: ->
rgbChannels = @channelsInfo
.map (ch) -> ch.id
.filter (ch) -> ch >= -1
for i in [0...@numPixels]
r = g = b = 0
a = 255
for chan, index in rgbChannels
val = @channelData[i + (@channelLength * index)]
switch chan
when -1 then a = val
when 0 then r = val
when 1 then g = val
when 2 then b = val
@pixelData.push r, g, b, a
\ No newline at end of file
test/fixtures/out.png

12.5 KB | W: | H:

test/fixtures/out.png

16.7 KB | W: | H:

test/fixtures/out.png
test/fixtures/out.png
test/fixtures/out.png
test/fixtures/out.png
  • 2-up
  • Swipe
  • Onion skin
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment