{"_id":"grunt-s3","_rev":"50-866fc6c280f3e87f513aad67ee56db5c","name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","dist-tags":{"latest":"0.2.0-alpha.3"},"versions":{"0.0.1":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.0.1","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"index","scripts":{"test":"grunt test"},"engines":{"node":">= 0.6.0"},"keywords":["grunt","amazon","s3"],"dependencies":{"grunt":"0.3.9","async":"0.1.18","underscore.deferred":"0.1.2","knox":"0.0.9"},"devDependencies":{},"_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"_id":"grunt-s3@0.0.1","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"42c7f174dfea56d6565e544b3b0aa8a7824e0de3","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.0.1.tgz","integrity":"sha512-eEuMZBWJBqKu8n49ECcVLWW+PpsJxEcazMS0zEzvYhRqFUgZzJdX3o+6nG0Fdu10xNzdMX8dYRTtoGt9Z21+vw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBrHKZsEu0e1VJsmIamCeuNd3lCuHg2FeSTtKGGJ4EZwIgMhIudO4IkHd3c/jfO6KZtzd6jJ7o9EpgDv65LkKOPZQ="}]},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}],"directories":{}},"0.0.2":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.0.2","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"index","scripts":{"test":"grunt test"},"engines":{"node":">= 0.6.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"0.3.9","async":"0.1.18","underscore.deferred":"0.1.2","knox":"0.0.9"},"devDependencies":{},"_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"_id":"grunt-s3@0.0.2","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"e4fd7cbfb23e176ed3ebe5ab916827b7f76284df","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.0.2.tgz","integrity":"sha512-S/hH5oaFOtrrXY5wL79Pp+EtkWUBDYRzaWi76TcloaQ7Ttj/KuDUgJOqj6OtQcJz5IAGNIJABJno4oa9izAVsA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGkpX3QF1WAAg1uHX2rR4docrQkG3pmG0VgEu5Oh26C3AiBQJPCW39DyYO24NhZndT6mKgSII1ZG/MRVIyh4RdN5zQ=="}]},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}],"directories":{}},"0.0.3":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.0.3","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"index","scripts":{"test":"grunt test"},"engines":{"node":">= 0.6.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"~0.3.9","async":"~0.1.18","underscore":"~1.3.3","underscore.deferred":"~0.1.2","knox":"~0.0.9","mime":"~1.2.5"},"devDependencies":{},"_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"_id":"grunt-s3@0.0.3","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"2b521caebdbe29b927810fa0cc86f79c82c8e336","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.0.3.tgz","integrity":"sha512-o9oygPoyU0DuYGMvx48wPgpzYWq8U3yU+lhyssUfFcttln6BSzc+dhyu3yIuWzzG1lHoibjSRnMRU7mfU2S6rQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID/DwgF4y0iU5vXU4pDYo+zP4bNTptpH9hYz1Z/6cG+fAiEA2OjJBwXYatIhCJQL9itqJtSbyaukRGuYh1DZnEtdAeU="}]},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}],"directories":{}},"0.0.4":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.0.4","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"index","scripts":{"test":"grunt test"},"engines":{"node":">= 0.6.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"~0.3.9","async":"~0.1.18","underscore":"~1.3.3","underscore.deferred":"~0.1.2","knox":"~0.0.9","mime":"~1.2.5"},"devDependencies":{},"_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"_id":"grunt-s3@0.0.4","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"f3760aa82acef9da48eff035f67237dd3ea61280","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.0.4.tgz","integrity":"sha512-5qvAZ7v7ognzTFfXzlP8XIF6E58CBhIaI5eJYpJHgtB0iM8ntNIfYbO6txKNqX7Laj5HuXS1brc1KrymbCVp8Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7aroxy6gV3InZUSlqBfBhNNv1Z2FYfc8aeBlgLGuTXQIgUEXagdUA1tIgu9v42CIHwkayyQ4eQzq2YwbwGj4lfEU="}]},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}],"directories":{},"deprecated":"Does not install."},"0.0.5":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.0.5","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"grunt.js","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test"},"engines":{"node":">= 0.6.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"~0.3.9","async":"~0.1.18","underscore":"~1.3.3","underscore.Deferred":"~0.1.3","knox":"~0.0.9","mime":"~1.2.5"},"devDependencies":{},"readme":"# Grunt + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n1. `npm install grunt-s3`\n2. Add `grunt.loadNpmTasks('grunt-s3');` to your project's `grunt.js` file.\n\n## Configuration\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n\n### Example\n\n```javascript\ngrunt.initConfig({\n\n  s3: {\n    key: 'YOUR KEY',\n    secret: 'YOUR SECRET',\n    bucket: 'my-bucket',\n    access: 'public-read',\n\n    // Files to be uploaded.\n    upload: [\n      {\n        src: 'important_document.txt',\n        dest: 'documents/important.txt',\n        gzip: true\n      },\n      {\n        src: 'passwords.txt',\n        dest: 'documents/ignore.txt',\n\n        // These values will override the above settings.\n        bucket: 'some-specific-bucket',\n        access: 'authenticated-read'\n      },\n      {\n        // Wildcards are valid *for uploads only* until I figure out a good implementation\n        // for downloads.\n        src: 'documents/*.txt',\n\n        // But if you use wildcards, make sure your destination is a directory.\n        dest: 'documents/'\n      }\n    ],\n\n    // Files to be downloaded.\n    download: [\n      {\n        src: 'documents/important.txt',\n        dest: 'important_document_download.txt'\n      },\n      {\n        src: 'garbage/IGNORE.txt',\n        dest: 'passwords_download.txt'\n      }\n    ],\n\n    del: [\n      {\n        src: 'documents/launch_codes.txt'\n      },\n      {\n        src: 'documents/backup_plan.txt'\n      }\n    ]\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Grunt template strings\n\n(Special thanks to @nanek)\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file.\n\n```javascript\ngrunt.initConfig({\n  aws: '<json:grunt-aws.json>',\n  s3: {\n    key: '<%= aws.key %>',\n    secret: '<%= aws.secret %>',\n    bucket: '<%= aws.bucket %>',\n    access: 'public-read'\n  }\n}\n```\n\nWhere grunt-aws.json is just a json key:value file like package.json.\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\n### grunt.helper('s3.put', src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### grunt.helper('s3.pull', src, dest, options)\n\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### grunt.helper('s3.delete', src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = grunt.helper('s3.put', 'dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = grunt.helper('s3.pull', 'dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  grunt.helper('s3.delete', 'dist/my-app-0.9.9.tar.gz');\n});\n\n```\n","_id":"grunt-s3@0.0.5","dist":{"shasum":"ba3427e38a0ac980c05250b130fbbbcfd641c5a3","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.0.5.tgz","integrity":"sha512-UkZ1ywDTBCxz6uojH/9m+CmvW0z1BVW2w7Vz5/4keDThmCvKqEsx8vsK5QE85ZMXfCfn0DGQ1ejSsq+qQ9O0cQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGO2zaJ1B9x8Wim4Vz9saXoqAVdKrtok/TJObxGEFbuzAiAizuUOmNkv5ueyyKzuhYgfb0magDr+JP1LxAjvOIr/8A=="}]},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]},"0.0.6":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.0.6","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"grunt.js","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test"},"engines":{"node":">= 0.6.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"~0.3.9","async":"~0.1.18","underscore":"~1.3.3","underscore.deferred":"~0.1.4","knox":"~0.0.9","mime":"~1.2.5"},"devDependencies":{},"readme":"# Grunt + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n1. `npm install grunt-s3`\n2. Add `grunt.loadNpmTasks('grunt-s3');` to your project's `grunt.js` file.\n\n## Configuration\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n\n### Example\n\n```javascript\ngrunt.initConfig({\n\n  s3: {\n    key: 'YOUR KEY',\n    secret: 'YOUR SECRET',\n    bucket: 'my-bucket',\n    access: 'public-read',\n\n    // Files to be uploaded.\n    upload: [\n      {\n        src: 'important_document.txt',\n        dest: 'documents/important.txt',\n        gzip: true\n      },\n      {\n        src: 'passwords.txt',\n        dest: 'documents/ignore.txt',\n\n        // These values will override the above settings.\n        bucket: 'some-specific-bucket',\n        access: 'authenticated-read'\n      },\n      {\n        // Wildcards are valid *for uploads only* until I figure out a good implementation\n        // for downloads.\n        src: 'documents/*.txt',\n\n        // But if you use wildcards, make sure your destination is a directory.\n        dest: 'documents/'\n      }\n    ],\n\n    // Files to be downloaded.\n    download: [\n      {\n        src: 'documents/important.txt',\n        dest: 'important_document_download.txt'\n      },\n      {\n        src: 'garbage/IGNORE.txt',\n        dest: 'passwords_download.txt'\n      }\n    ],\n\n    del: [\n      {\n        src: 'documents/launch_codes.txt'\n      },\n      {\n        src: 'documents/backup_plan.txt'\n      }\n    ]\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Grunt template strings\n\n(Special thanks to @nanek)\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file.\n\n```javascript\ngrunt.initConfig({\n  aws: '<json:grunt-aws.json>',\n  s3: {\n    key: '<%= aws.key %>',\n    secret: '<%= aws.secret %>',\n    bucket: '<%= aws.bucket %>',\n    access: 'public-read'\n  }\n}\n```\n\nWhere grunt-aws.json is just a json key:value file like package.json.\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\n### grunt.helper('s3.put', src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### grunt.helper('s3.pull', src, dest, options)\n\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### grunt.helper('s3.delete', src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = grunt.helper('s3.put', 'dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = grunt.helper('s3.pull', 'dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  grunt.helper('s3.delete', 'dist/my-app-0.9.9.tar.gz');\n});\n\n```\n","_id":"grunt-s3@0.0.6","dist":{"shasum":"fd9eed365b7e5ecfb83801da4cf4bc117afbae4a","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.0.6.tgz","integrity":"sha512-/O+bdK40ffInBa6fFa/gqbcIbuOllODxI6+RVNetI3fZOd8KtIQUGUdLsUnru2xmzdea3lt9KmAShaD2iLIaQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8KS3RSOMt9afpOod0YDCnG7Jd2vtYprDL0+0EDVacqAIhANyaHFc+dnKPNnQAUSzO0TnggFl0v1C9GrlPpBtPGaVJ"}]},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]},"0.0.7":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.0.7","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"grunt.js","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test"},"engines":{"node":">= 0.6.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"~0.3.9","async":"~0.1.18","underscore":"~1.3.3","underscore.deferred":"~0.1.4","knox":"0.0.9","mime":"~1.2.5"},"devDependencies":{},"readme":"# Grunt + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n1. `npm install grunt-s3`\n2. Add `grunt.loadNpmTasks('grunt-s3');` to your project's `grunt.js` file.\n\n## Configuration\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n\n### Example\n\n```javascript\ngrunt.initConfig({\n\n  s3: {\n    key: 'YOUR KEY',\n    secret: 'YOUR SECRET',\n    bucket: 'my-bucket',\n    access: 'public-read',\n\n    // Files to be uploaded.\n    upload: [\n      {\n        src: 'important_document.txt',\n        dest: 'documents/important.txt',\n        gzip: true\n      },\n      {\n        src: 'passwords.txt',\n        dest: 'documents/ignore.txt',\n\n        // These values will override the above settings.\n        bucket: 'some-specific-bucket',\n        access: 'authenticated-read'\n      },\n      {\n        // Wildcards are valid *for uploads only* until I figure out a good implementation\n        // for downloads.\n        src: 'documents/*.txt',\n\n        // But if you use wildcards, make sure your destination is a directory.\n        dest: 'documents/'\n      }\n    ],\n\n    // Files to be downloaded.\n    download: [\n      {\n        src: 'documents/important.txt',\n        dest: 'important_document_download.txt'\n      },\n      {\n        src: 'garbage/IGNORE.txt',\n        dest: 'passwords_download.txt'\n      }\n    ],\n\n    del: [\n      {\n        src: 'documents/launch_codes.txt'\n      },\n      {\n        src: 'documents/backup_plan.txt'\n      }\n    ]\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Grunt template strings\n\n(Special thanks to @nanek)\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file.\n\n```javascript\ngrunt.initConfig({\n  aws: '<json:grunt-aws.json>',\n  s3: {\n    key: '<%= aws.key %>',\n    secret: '<%= aws.secret %>',\n    bucket: '<%= aws.bucket %>',\n    access: 'public-read'\n  }\n}\n```\n\nWhere grunt-aws.json is just a json key:value file like package.json.\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\n### grunt.helper('s3.put', src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### grunt.helper('s3.pull', src, dest, options)\n\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### grunt.helper('s3.delete', src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = grunt.helper('s3.put', 'dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = grunt.helper('s3.pull', 'dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  grunt.helper('s3.delete', 'dist/my-app-0.9.9.tar.gz');\n});\n\n```\n\n## Changelog\n\n#### v0.0.6\n\n* Bump version of `underscore.deferred` to `0.1.4`. Version `0.1.3` would fail to install sometimes\ndue to there being two versions of the module with different capitalizations in npm.\n","_id":"grunt-s3@0.0.7","dist":{"shasum":"739c36b36b5684ec1140e3ce16c660599691e251","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.0.7.tgz","integrity":"sha512-IN9C0lEuoMczSzLdUgc1ISsRqviXcZ6wWzjZSWZqpacbyxaq7Mfcpl3t0JOCF4ktUNruyBnS0wkDkMMGClD4Tw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFzU51IOQCrPs1R65eqmrlfkXzBI3Q1KczJg+Mnxv9IGAiBo7F0nSi7SkbsnKs0/zFtC6Ta4m7ipBlq2fmPgnAoFew=="}]},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]},"0.0.8":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.0.8","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"grunt.js","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test"},"engines":{"node":">= 0.6.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"~0.3.9","async":"~0.1.18","underscore":"~1.3.3","underscore.deferred":"~0.1.4","knox":"0.0.9","mime":"~1.2.5"},"devDependencies":{},"readme":"# Grunt + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n1. `npm install grunt-s3`\n2. Add `grunt.loadNpmTasks('grunt-s3');` to your project's `grunt.js` file.\n\n## Configuration\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n\n### Example\n\n```javascript\ngrunt.initConfig({\n\n  s3: {\n    key: 'YOUR KEY',\n    secret: 'YOUR SECRET',\n    bucket: 'my-bucket',\n    access: 'public-read',\n\n    // Files to be uploaded.\n    upload: [\n      {\n        src: 'important_document.txt',\n        dest: 'documents/important.txt',\n        gzip: true\n      },\n      {\n        src: 'passwords.txt',\n        dest: 'documents/ignore.txt',\n\n        // These values will override the above settings.\n        bucket: 'some-specific-bucket',\n        access: 'authenticated-read'\n      },\n      {\n        // Wildcards are valid *for uploads only* until I figure out a good implementation\n        // for downloads.\n        src: 'documents/*.txt',\n\n        // But if you use wildcards, make sure your destination is a directory.\n        dest: 'documents/'\n      }\n    ],\n\n    // Files to be downloaded.\n    download: [\n      {\n        src: 'documents/important.txt',\n        dest: 'important_document_download.txt'\n      },\n      {\n        src: 'garbage/IGNORE.txt',\n        dest: 'passwords_download.txt'\n      }\n    ],\n\n    del: [\n      {\n        src: 'documents/launch_codes.txt'\n      },\n      {\n        src: 'documents/backup_plan.txt'\n      }\n    ]\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Grunt template strings\n\n(Special thanks to @nanek)\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file.\n\n```javascript\ngrunt.initConfig({\n  aws: '<json:grunt-aws.json>',\n  s3: {\n    key: '<%= aws.key %>',\n    secret: '<%= aws.secret %>',\n    bucket: '<%= aws.bucket %>',\n    access: 'public-read'\n  }\n}\n```\n\nWhere grunt-aws.json is just a json key:value file like package.json.\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\n### grunt.helper('s3.put', src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### grunt.helper('s3.pull', src, dest, options)\n\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### grunt.helper('s3.delete', src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = grunt.helper('s3.put', 'dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = grunt.helper('s3.pull', 'dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  grunt.helper('s3.delete', 'dist/my-app-0.9.9.tar.gz');\n});\n\n```\n\n## Changelog\n\n#### v0.0.6\n\n* Bump version of `underscore.deferred` to `0.1.4`. Version `0.1.3` would fail to install sometimes\ndue to there being two versions of the module with different capitalizations in npm.\n","_id":"grunt-s3@0.0.8","dist":{"shasum":"4c9a533bab22351d242e3d9b7931b8c67fd643b4","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.0.8.tgz","integrity":"sha512-9fKCtqWEDTdp9/ZnHPhmhOlaZGYssDfq6A2gvLggXst8oi0OfKGq8nxCaKDOTImdDjGAtSyf8MDVFo9oeR/uOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxjIiupO24vu8yScUqFB8shZaah6ydizASBKbYV06hwwIgWQhiZpQWLz9JPTM3rppnncDT9ajk2bs8XVuGE6Q8U0U="}]},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]},"0.0.9":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.0.9","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"grunt.js","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test"},"engines":{"node":">= 0.6.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"~0.3.9","async":"~0.1.18","underscore":"~1.3.3","underscore.deferred":"~0.1.4","knox":"0.4.1","mime":"~1.2.5"},"devDependencies":{"nodeunit":"~0.7.4"},"readme":"\n# Grunt + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n1. `npm install grunt-s3`\n2. Add `grunt.loadNpmTasks('grunt-s3');` to your project's `grunt.js` file.\n\n## Configuration\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n\n### Example\n\n```javascript\ngrunt.initConfig({\n\n  s3: {\n    key: 'YOUR KEY',\n    secret: 'YOUR SECRET',\n    bucket: 'my-bucket',\n    access: 'public-read',\n\n    // Files to be uploaded.\n    upload: [\n      {\n        src: 'important_document.txt',\n        dest: 'documents/important.txt',\n        gzip: true\n      },\n      {\n        src: 'passwords.txt',\n        dest: 'documents/ignore.txt',\n\n        // These values will override the above settings.\n        bucket: 'some-specific-bucket',\n        access: 'authenticated-read'\n      },\n      {\n        // Wildcards are valid *for uploads only* until I figure out a good implementation\n        // for downloads.\n        src: 'documents/*.txt',\n\n        // But if you use wildcards, make sure your destination is a directory.\n        dest: 'documents/'\n      }\n    ],\n\n    // Files to be downloaded.\n    download: [\n      {\n        src: 'documents/important.txt',\n        dest: 'important_document_download.txt'\n      },\n      {\n        src: 'garbage/IGNORE.txt',\n        dest: 'passwords_download.txt'\n      }\n    ],\n\n    del: [\n      {\n        src: 'documents/launch_codes.txt'\n      },\n      {\n        src: 'documents/backup_plan.txt'\n      }\n    ]\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Grunt template strings\n\n(Special thanks to @nanek)\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file.\n\n```javascript\ngrunt.initConfig({\n  aws: '<json:grunt-aws.json>',\n  s3: {\n    key: '<%= aws.key %>',\n    secret: '<%= aws.secret %>',\n    bucket: '<%= aws.bucket %>',\n    access: 'public-read'\n  }\n}\n```\n\nWhere grunt-aws.json is just a json key:value file like package.json.\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\n### grunt.helper('s3.put', src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### grunt.helper('s3.pull', src, dest, options)\n\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### grunt.helper('s3.delete', src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = grunt.helper('s3.put', 'dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = grunt.helper('s3.pull', 'dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  grunt.helper('s3.delete', 'dist/my-app-0.9.9.tar.gz');\n});\n\n```\n\n## Changelog\n\n#### v0.0.9\n\n* Bump version of `knox` to `0.4.1`.\n\n#### v0.0.6\n\n* Bump version of `underscore.deferred` to `0.1.4`. Version `0.1.3` would fail to install sometimes\ndue to there being two versions of the module with different capitalizations in npm.\n","_id":"grunt-s3@0.0.9","dist":{"shasum":"1999d63f22406fd0b8ae4729fb9caaa251867352","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.0.9.tgz","integrity":"sha512-aBREJfRuxqUVgN2jWddiI+Y/JTAoUmnD+J3URn/UVTupPdluseox5kTzppB9Cbefl09YEVAGgjCq94hizUMhTQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDWNb8PWSN6t41czXmWcACgAHYHuY8qsx5tJLwBNBm8vAiBpCw1ffKLABL8NY0yXxRVaYazGpYlYcblivQD20GLthQ=="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]},"0.1.0":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.1.0","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"Gruntfile.js","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test"},"engines":{"node":">= 0.8.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"0.4.x","underscore.deferred":"~0.1.4","knox":"0.4.1","mime":"~1.2.5"},"devDependencies":{"nodeunit":"~0.7.4","grunt-contrib-jshint":"~0.1.0","grunt-contrib-nodeunit":"~0.1.1","libyaml":"~0.2.1"},"readme":"[![Build Status](https://secure.travis-ci.org/pifantastic/grunt-s3.png?branch=master)](https://travis-ci.org/pifantastic/grunt-s3)\n\n# Grunt 0.4.x + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n```sh\nnpm install grunt-s3 --save-dev\n```\n\nThen add this line to your project's `Gruntfile.js`:\n\n```javascript\ngrunt.loadNpmTasks('grunt-s3');\n```\n\n## Configuration\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **maxOperations** - (*number*) max number of concurrent transfers - if not specified or set to 0, will be unlimited.\n* **encodePaths** - (*boolean*) if set to true, will encode the uris of destinations to prevent 505 errors. Default: false\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n* **debug** - (*boolean*) If true, no transfers with S3 will occur, will print all actions for review by user\n\n### Example\n\n```javascript\ngrunt.initConfig({\n\n  s3: {\n    key: 'YOUR KEY',\n    secret: 'YOUR SECRET',\n    bucket: 'my-bucket',\n    access: 'public-read',\n\n    // Files to be uploaded.\n    upload: [\n      {\n        src: 'important_document.txt',\n        dest: 'documents/important.txt',\n        gzip: true\n      },\n      {\n        src: 'passwords.txt',\n        dest: 'documents/ignore.txt',\n\n        // These values will override the above settings.\n        bucket: 'some-specific-bucket',\n        access: 'authenticated-read'\n      },\n      {\n        // Wildcards are valid *for uploads only* until I figure out a good implementation\n        // for downloads.\n        src: 'documents/*.txt',\n\n        // But if you use wildcards, make sure your destination is a directory.\n        dest: 'documents/'\n      }\n    ],\n\n    // Files to be downloaded.\n    download: [\n      {\n        src: 'documents/important.txt',\n        dest: 'important_document_download.txt'\n      },\n      {\n        src: 'garbage/IGNORE.txt',\n        dest: 'passwords_download.txt'\n      }\n    ],\n\n    del: [\n      {\n        src: 'documents/launch_codes.txt'\n      },\n      {\n        src: 'documents/backup_plan.txt'\n      }\n    ]\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Grunt template strings\n\n(Special thanks to @nanek)\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file.\n\n```javascript\ngrunt.initConfig({\n  aws: '<json:grunt-aws.json>',\n  s3: {\n    key: '<%= aws.key %>',\n    secret: '<%= aws.secret %>',\n    bucket: '<%= aws.bucket %>',\n    access: 'public-read'\n  }\n}\n```\n\nWhere grunt-aws.json is just a json key:value file like package.json.\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\n### grunt.helper('s3.put', src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### grunt.helper('s3.pull', src, dest, options)\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### grunt.helper('s3.delete', src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = grunt.helper('s3.put', 'dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = grunt.helper('s3.pull', 'dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  grunt.helper('s3.delete', 'dist/my-app-0.9.9.tar.gz');\n});\n\n```\n\n## Changelog\n\n#### v0.1.0\n\n* Update to be compatible with `grunt` version `0.4.x`.\n\n#### v0.0.9\n\n* Bump version of `knox` to `0.4.1`.\n\n#### v0.0.6\n\n* Bump version of `underscore.deferred` to `0.1.4`. Version `0.1.3` would fail to install sometimes\ndue to there being two versions of the module with different capitalizations in npm.\n","_id":"grunt-s3@0.1.0","dist":{"shasum":"38a2e34c154bdb56c7c1f23a7d7df26a6bf868d0","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.1.0.tgz","integrity":"sha512-gu8aEYMCsiM37JQWl2LoNf7emilHeF/4/JFZ9FUjL5Y/XpataEac3lZl2otlSESdbbrYU+dWnFLXoju5eglL9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCM6KRxOk9+aVF2uMqmeJPR6h76KJjazT8JHndMOSuZ3QIgJMxuIfLP5+oXMu7RNFjv11rbRgr0Blw86dO6ADJFUH8="}]},"_npmVersion":"1.1.62","_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]},"0.2.0-alpha":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.2.0-alpha","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"tasks/s3","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test"},"engines":{"node":">= 0.8.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"0.4.x","underscore.deferred":"~0.1.4","knox":"0.6.x","mime":"~1.2.5"},"devDependencies":{"nodeunit":"~0.7.4","grunt-contrib-jshint":"~0.1.0","grunt-contrib-nodeunit":"~0.1.1","libyaml":"~0.2.1"},"readme":"[![Build Status](https://secure.travis-ci.org/pifantastic/grunt-s3.png?branch=master)](https://travis-ci.org/pifantastic/grunt-s3)\n\n*NOTE*: This is the README for `grunt-s3` `v0.2.0-alpha`. For `v0.1.0`, [go here](https://github.com/pifantastic/grunt-s3/blob/0.1.X/README.md).\n\n# Grunt 0.4.x + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n```sh\nnpm install grunt-s3 --save-dev\n```\n\nThen add this line to your project's `Gruntfile.js`:\n\n```javascript\ngrunt.loadNpmTasks('grunt-s3');\n```\n\n## Options\n\nThe grunt-s3 task is now a [multi-task](https://github.com/gruntjs/grunt/wiki/Creating-tasks); meaning you can specify different targets for this task to run as.\n\nThe following are the default options available to each target.\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **region** - (*string*) An Amazon AWS region (see http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)\n* **maxOperations** - (*number*) max number of concurrent transfers - if not specified or set to 0, will be unlimited.\n* **encodePaths** - (*boolean*) if set to true, will encode the uris of destinations to prevent 505 errors. Default: false\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **gzipExclude** - (*array*) Define extensions of files you don't want to run gzip on, an array of strings ie: `['.jpg', '.jpeg', '.png']`.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n* **debug** - (*boolean*) If true, no transfers with S3 will occur, will print all actions for review by user\n\n### Example\n\n```javascript\ngrunt.initConfig({\n\n  s3: {\n    options: {\n      key: 'YOUR KEY',\n      secret: 'YOUR SECRET',\n      bucket: 'my-bucket',\n      access: 'public-read'\n    },\n    dev: {\n      // These options override the defaults\n      options: {\n        encodePaths: true,\n        maxOperations: 20\n      },\n      // Files to be uploaded.\n      upload: [\n        {\n          src: 'important_document.txt',\n          dest: 'documents/important.txt',\n          gzip: true\n        },\n        {\n          src: 'passwords.txt',\n          dest: 'documents/ignore.txt',\n\n          // These values will override the above settings.\n          bucket: 'some-specific-bucket',\n          access: 'authenticated-read'\n        },\n        {\n          // Wildcards are valid *for uploads only* until I figure out a good implementation\n          // for downloads.\n          src: 'documents/*.txt',\n\n          // But if you use wildcards, make sure your destination is a directory.\n          dest: 'documents/'\n        }\n      ],\n\n      // Files to be downloaded.\n      download: [\n        {\n          src: 'documents/important.txt',\n          dest: 'important_document_download.txt'\n        },\n        {\n          src: 'garbage/IGNORE.txt',\n          dest: 'passwords_download.txt'\n        }\n      ],\n\n      del: [\n        {\n          src: 'documents/launch_codes.txt'\n        },\n        {\n          src: 'documents/backup_plan.txt'\n        }\n      ]\n    }\n\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Grunt template strings\n\n(Special thanks to @nanek)\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file.\n\n```javascript\ngrunt.initConfig({\n  aws: '<json:grunt-aws.json>',\n  s3: {\n    key: '<%= aws.key %>',\n    secret: '<%= aws.secret %>',\n    bucket: '<%= aws.bucket %>',\n    access: 'public-read'\n  }\n}\n```\n\nWhere grunt-aws.json is just a json key:value file like package.json.\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\n### grunt.helper('s3.put', src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### grunt.helper('s3.pull', src, dest, options)\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### grunt.helper('s3.delete', src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = grunt.helper('s3.put', 'dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = grunt.helper('s3.pull', 'dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  grunt.helper('s3.delete', 'dist/my-app-0.9.9.tar.gz');\n});\n\n```\n\n## Changelog\n\n#### v0.1.0\n\n* Update to be compatible with `grunt` version `0.4.x`.\n\n#### v0.0.9\n\n* Bump version of `knox` to `0.4.1`.\n\n#### v0.0.6\n\n* Bump version of `underscore.deferred` to `0.1.4`. Version `0.1.3` would fail to install sometimes\ndue to there being two versions of the module with different capitalizations in npm.\n","readmeFilename":"README.md","_id":"grunt-s3@0.2.0-alpha","dist":{"shasum":"fb3077de49cd59e8cdfd012d4e5586217030ae04","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.2.0-alpha.tgz","integrity":"sha512-mQCds+Y8QTH9BxBy9LvY1i/uc9Q2ENWhuzgCIn7+eAvPzBi0+rnvX0XFAl6gPykUhv/hdKzdg26uAU2dwhfCpQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQ+gY/TqTc8Mu1wRU/a96co09WRRRp/ak0zI27AVBMFQIgafOK7Tf76FsDqhMhL7+gINvCL/l/W5iTeKbPtaT2Fgc="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]},"0.2.0-alpha.1":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.2.0-alpha.1","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"tasks/s3","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test"},"engines":{"node":">= 0.8.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"0.4.x","underscore.deferred":"~0.1.4","knox":"0.6.x","mime":"~1.2.5","temporary":"0.0.5"},"devDependencies":{"nodeunit":"~0.7.4","grunt-contrib-jshint":"~0.1.0","grunt-contrib-nodeunit":"~0.1.1","libyaml":"~0.2.1"},"readme":"[![Build Status](https://secure.travis-ci.org/pifantastic/grunt-s3.png?branch=master)](https://travis-ci.org/pifantastic/grunt-s3)\n\n*NOTE*: This is the README for `grunt-s3` `v0.2.0-alpha`. For `v0.1.0`, [go here](https://github.com/pifantastic/grunt-s3/blob/0.1.X/README.md).\n\n# Grunt 0.4.x + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n```sh\nnpm install grunt-s3 --save-dev\n```\n\nThen add this line to your project's `Gruntfile.js`:\n\n```javascript\ngrunt.loadNpmTasks('grunt-s3');\n```\n\n## Options\n\nThe grunt-s3 task is now a [multi-task](https://github.com/gruntjs/grunt/wiki/Creating-tasks); meaning you can specify different targets for this task to run as.\n\nThe following are the default options available to each target.\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **region** - (*string*) An Amazon AWS region (see http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)\n* **maxOperations** - (*number*) max number of concurrent transfers - if not specified or set to 0, will be unlimited.\n* **encodePaths** - (*boolean*) if set to true, will encode the uris of destinations to prevent 505 errors. Default: false\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **gzipExclude** - (*array*) Define extensions of files you don't want to run gzip on, an array of strings ie: `['.jpg', '.jpeg', '.png']`.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n* **debug** - (*boolean*) If true, no transfers with S3 will occur, will print all actions for review by user\n\n### Example\n\n```javascript\ngrunt.initConfig({\n\n  s3: {\n    options: {\n      key: 'YOUR KEY',\n      secret: 'YOUR SECRET',\n      bucket: 'my-bucket',\n      access: 'public-read'\n    },\n    dev: {\n      // These options override the defaults\n      options: {\n        encodePaths: true,\n        maxOperations: 20\n      },\n      // Files to be uploaded.\n      upload: [\n        {\n          src: 'important_document.txt',\n          dest: 'documents/important.txt',\n          gzip: true\n        },\n        {\n          src: 'passwords.txt',\n          dest: 'documents/ignore.txt',\n\n          // These values will override the above settings.\n          bucket: 'some-specific-bucket',\n          access: 'authenticated-read'\n        },\n        {\n          // Wildcards are valid *for uploads only* until I figure out a good implementation\n          // for downloads.\n          src: 'documents/*.txt',\n\n          // But if you use wildcards, make sure your destination is a directory.\n          dest: 'documents/'\n        }\n      ],\n\n      // Files to be downloaded.\n      download: [\n        {\n          src: 'documents/important.txt',\n          dest: 'important_document_download.txt'\n        },\n        {\n          src: 'garbage/IGNORE.txt',\n          dest: 'passwords_download.txt'\n        }\n      ],\n\n      del: [\n        {\n          src: 'documents/launch_codes.txt'\n        },\n        {\n          src: 'documents/backup_plan.txt'\n        }\n      ]\n    }\n\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Grunt template strings\n\n(Special thanks to @nanek)\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file.\n\n```javascript\ngrunt.initConfig({\n  aws: grunt.file.readJSON('grunt-aws.json'),\n  s3: {\n    key: '<%= aws.key %>',\n    secret: '<%= aws.secret %>',\n    bucket: '<%= aws.bucket %>',\n    access: 'public-read'\n  }\n}\n```\n\nWhere grunt-aws.json is just a json key:value file like package.json.\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\nHelpers have been removed from Grunt 0.4 to access these methods directly. You can now require the s3 library files directly like so:\n\n`var s3 = require('grunt-s3').helpers;`\n\nMake sure you explicitly pass the options into the method. If you've used `grunt.initConfig()` you can use `grunt.config.get('s3')` to access them.\n\n### s3.upload(src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### s3.download(src, dest, options)\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### s3.delete(src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = s3.upload('dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = s3.download('dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  s3.delete('dist/my-app-0.9.9.tar.gz');\n});\n\n```\n\n## Changelog\n\n#### v0.1.0\n\n* Update to be compatible with `grunt` version `0.4.x`.\n\n#### v0.0.9\n\n* Bump version of `knox` to `0.4.1`.\n\n#### v0.0.6\n\n* Bump version of `underscore.deferred` to `0.1.4`. Version `0.1.3` would fail to install sometimes\ndue to there being two versions of the module with different capitalizations in npm.\n","readmeFilename":"README.md","_id":"grunt-s3@0.2.0-alpha.1","dist":{"shasum":"10556dab2c53580a759f5a401fa6aee10d22a617","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.2.0-alpha.1.tgz","integrity":"sha512-oSm1PhcDJ+SFWW1GRj72GfhyutFRtHbYRQkfZBPgFH5kwkC/0TI7jTD/NebeLJk/QZai3t0YXt7d9zzSlhPxWw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUwMUCxiM3FDqQmnmswPrxXrL2rzKGEYPK57KCPXpFhwIhAOY7CGye62fLjOd3gD3NexE+URXRoGM0Y851ODdT1r0h"}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]},"0.2.0-alpha.2":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.2.0-alpha.2","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"tasks/s3","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test"},"engines":{"node":">= 0.8.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"0.4.x","underscore.deferred":"~0.1.4","knox":"0.8.x","mime":"~1.2.5","temporary":"0.0.5"},"devDependencies":{"nodeunit":"~0.7.4","grunt-contrib-jshint":"~0.1.0","grunt-contrib-nodeunit":"~0.1.1","libyaml":"~0.2.1"},"readme":"[![Build Status](https://secure.travis-ci.org/pifantastic/grunt-s3.png?branch=master)](https://travis-ci.org/pifantastic/grunt-s3)\n\n*NOTE*: This is the README for `grunt-s3` `v0.2.0-alpha`. For `v0.1.0`, [go here](https://github.com/pifantastic/grunt-s3/blob/0.1.X/README.md).\n\n# Grunt 0.4.x + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n```sh\nnpm install grunt-s3 --save-dev\n```\n\nThen add this line to your project's `Gruntfile.js`:\n\n```javascript\ngrunt.loadNpmTasks('grunt-s3');\n```\n\n## Options\n\nThe grunt-s3 task is now a [multi-task](https://github.com/gruntjs/grunt/wiki/Creating-tasks); meaning you can specify different targets for this task to run as.\n\nThe following are the default options available to each target.\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **region** - (*string*) An Amazon AWS region (see http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)\n* **maxOperations** - (*number*) max number of concurrent transfers - if not specified or set to 0, will be unlimited.\n* **encodePaths** - (*boolean*) if set to true, will encode the uris of destinations to prevent 505 errors. Default: false\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **gzipExclude** - (*array*) Define extensions of files you don't want to run gzip on, an array of strings ie: `['.jpg', '.jpeg', '.png']`.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n* **debug** - (*boolean*) If true, no transfers with S3 will occur, will print all actions for review by user\n\n### Example\n\n```javascript\ngrunt.initConfig({\n\n  s3: {\n    options: {\n      key: 'YOUR KEY',\n      secret: 'YOUR SECRET',\n      bucket: 'my-bucket',\n      access: 'public-read'\n    },\n    dev: {\n      // These options override the defaults\n      options: {\n        encodePaths: true,\n        maxOperations: 20\n      },\n      // Files to be uploaded.\n      upload: [\n        {\n          src: 'important_document.txt',\n          dest: 'documents/important.txt',\n          gzip: true\n        },\n        {\n          src: 'passwords.txt',\n          dest: 'documents/ignore.txt',\n\n          // These values will override the above settings.\n          bucket: 'some-specific-bucket',\n          access: 'authenticated-read'\n        },\n        {\n          // Wildcards are valid *for uploads only* until I figure out a good implementation\n          // for downloads.\n          src: 'documents/*.txt',\n\n          // But if you use wildcards, make sure your destination is a directory.\n          dest: 'documents/'\n        }\n      ],\n\n      // Files to be downloaded.\n      download: [\n        {\n          src: 'documents/important.txt',\n          dest: 'important_document_download.txt'\n        },\n        {\n          src: 'garbage/IGNORE.txt',\n          dest: 'passwords_download.txt'\n        }\n      ],\n\n      del: [\n        {\n          src: 'documents/launch_codes.txt'\n        },\n        {\n          src: 'documents/backup_plan.txt'\n        }\n      ]\n    }\n\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Grunt template strings\n\n(Special thanks to @nanek)\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file.\n\n```javascript\ngrunt.initConfig({\n  aws: grunt.file.readJSON('grunt-aws.json'),\n  s3: {\n    key: '<%= aws.key %>',\n    secret: '<%= aws.secret %>',\n    bucket: '<%= aws.bucket %>',\n    access: 'public-read'\n  }\n}\n```\n\nWhere grunt-aws.json is just a json key:value file like package.json.\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\nHelpers have been removed from Grunt 0.4 to access these methods directly. You can now require the s3 library files directly like so:\n\n`var s3 = require('grunt-s3').helpers;`\n\nMake sure you explicitly pass the options into the method. If you've used `grunt.initConfig()` you can use `grunt.config.get('s3')` to access them.\n\n### s3.upload(src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### s3.download(src, dest, options)\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### s3.delete(src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = s3.upload('dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = s3.download('dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  s3.delete('dist/my-app-0.9.9.tar.gz');\n});\n\n```\n\n## Changelog\n\n#### v0.1.0\n\n* Update to be compatible with `grunt` version `0.4.x`.\n\n#### v0.0.9\n\n* Bump version of `knox` to `0.4.1`.\n\n#### v0.0.6\n\n* Bump version of `underscore.deferred` to `0.1.4`. Version `0.1.3` would fail to install sometimes\ndue to there being two versions of the module with different capitalizations in npm.\n","readmeFilename":"README.md","_id":"grunt-s3@0.2.0-alpha.2","dist":{"shasum":"976df1e01941832bcd535332d0a9f606875d4c51","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.2.0-alpha.2.tgz","integrity":"sha512-B4sJRtfK3mUfZw6GLVDp8/dRQYCeIsnHegydIfhiMpPZ26FlPfrwpza6pCUyt/8OsY2q5x3DlHqhPQ+YQ/S/TA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICpmWNg3jF2ymcakax5MHnAXAKeRhdfBt/fc4qmXzq7sAiB0WJpPvSN5xHVYDwZc3SxKT29zai7p4b3Ik7olggf9Cw=="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]},"0.2.0-alpha.3":{"name":"grunt-s3","description":"A grunt task to automate moving files to/from Amazon S3.","version":"0.2.0-alpha.3","author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"homepage":"https://github.com/pifantastic/grunt-s3","repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"bugs":{"url":"https://github.com/pifantastic/grunt-s3/issues"},"licenses":[{"type":"MIT","url":"https://github.com/pifantastic/grunt-s3/blob/master/LICENSE"}],"main":"tasks/s3","bin":{"grunt-s3":"bin/grunt-s3"},"scripts":{"test":"grunt test","fakes3":"fakes3 -r s3 -p 1337"},"engines":{"node":">= 0.8.0"},"keywords":["gruntplugin","amazon","s3"],"dependencies":{"grunt":"0.4.x","underscore.deferred":"~0.1.4","knox":"0.8.x","mime":"~1.2.5","temporary":"0.0.5"},"devDependencies":{"nodeunit":"~0.7.4","grunt-contrib-jshint":"~0.1.0","grunt-contrib-nodeunit":"~0.1.1","libyaml":"~0.2.1","grunt-contrib-clean":"~0.5.0","rimraf":"~2.2.2"},"readme":"[![Build Status](https://secure.travis-ci.org/pifantastic/grunt-s3.png?branch=master)](https://travis-ci.org/pifantastic/grunt-s3)\n\n*NOTE*: This is the README for `grunt-s3` `v0.2.0-alpha`. For `v0.1.0`, [go here](https://github.com/pifantastic/grunt-s3/blob/0.1.X/README.md).\n\n# Grunt 0.4.x + Amazon S3\n\n## About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build\nprocess. This task can help you automate uploading/downloading files to/from Amazon S3. All file\ntransfers are verified and will produce errors if incomplete.\n\n## Dependencies\n\n* knox\n* mime\n* async\n* underscore\n* underscore.deferred\n\n## Installation\n\n```sh\nnpm install grunt-s3 --save-dev\n```\n\nThen add this line to your project's `Gruntfile.js`:\n\n```javascript\ngrunt.loadNpmTasks('grunt-s3');\n```\n\n## Options\n\nThe grunt-s3 task is now a [multi-task](https://github.com/gruntjs/grunt/wiki/Creating-tasks); meaning you can specify different targets for this task to run as.\n\nA quick reference of options\n\n* **key** - (*string*) An Amazon S3 credentials key\n* **secret** - (*string*) An Amazon S3 credentials secret\n* **bucket** - (*string*) An Amazon S3 bucket\n* **region** - (*string*) An Amazon AWS region (see http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)\n* **maxOperations** - (*number*) max number of concurrent transfers - if not specified or set to 0, will be unlimited.\n* **encodePaths** - (*boolean*) if set to true, will encode the uris of destinations to prevent 505 errors. Default: false\n* **headers** - (*object*) An object containing any headers you would like to send along with the\ntransfers i.e. `{ 'X-Awesomeness': 'Out-Of-This-World', 'X-Stuff': 'And Things!' }`\n* **access** - (*string*) A specific Amazon S3 ACL. Available values: `private`, `public-read`, `\npublic-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n* **gzipExclude** - (*array*) Define extensions of files you don't want to run gzip on, an array of strings ie: `['.jpg', '.jpeg', '.png']`.\n* **upload** - (*array*) An array of objects, each object representing a file upload and containing a `src`\nand a `dest`. Any of the above values may also be overriden. Passing `rel:DIR` will cause the filesnames to be\nexpanded so that wild cards are not passed to the source name.\n* **download** - (*array*) An array of objects, each object representing a file download and containing a\n`src` and a `dest`. Any of the above values may also be overriden.\n* **del** - (*array*) An array of objects, each object containing a `src` to delete from s3. Any of\nthe above values may also be overriden.\n* **sync** - (*array*) An array of ojects, each oject containing a `src` and `dest`. Default behavior is to\nonly upload new files (that don't exist). Adding `verify:true` forces an MD5 hash and Modified time check prior\nto overwriting the server files.\n* **debug** - (*boolean*) If true, no transfers with S3 will occur, will print all actions for review by user\n\n### Example\n\nTemplate strings in grunt will allow you to easily include values from other files. The below example\ndemonstrates loading aws settings from another file, Where grunt-aws.json is just a json key:value file like package.json. (Special thanks to @nanek)\n\nThis is **important because you should never check in your S3 credentials to github! Load them from an external file that is outside of the repo.**\n\n```javascript\ngrunt.initConfig({\n  aws: grunt.file.readJSON('~/grunt-aws.json'),\n  s3: {\n    options: {\n      key: '<%= aws.key %>',\n      secret: '<%= aws.secret %>',\n      bucket: '<%= aws.bucket %>',\n      access: 'public-read',\n      headers: {\n        // Two Year cache policy (1000 * 60 * 60 * 24 * 730)\n        \"Cache-Control\": \"max-age=630720000, public\",\n        \"Expires\": new Date(Date.now() + 63072000000).toUTCString()\n      }\n    },\n    dev: {\n      // These options override the defaults\n      options: {\n        encodePaths: true,\n        maxOperations: 20\n      },\n      // Files to be uploaded.\n      upload: [\n        {\n          src: 'important_document.txt',\n          dest: 'documents/important.txt',\n          options: { gzip: true }\n        },\n        {\n          src: 'passwords.txt',\n          dest: 'documents/ignore.txt',\n\n          // These values will override the above settings.\n          bucket: 'some-specific-bucket',\n          access: 'authenticated-read'\n        },\n        {\n          // Wildcards are valid *for uploads only* until I figure out a good implementation\n          // for downloads.\n          src: 'documents/*.txt',\n\n          // But if you use wildcards, make sure your destination is a directory.\n          dest: 'documents/'\n        }\n      ],\n\n      // Files to be downloaded.\n      download: [\n        {\n          src: 'documents/important.txt',\n          dest: 'important_document_download.txt'\n        },\n        {\n          src: 'garbage/IGNORE.txt',\n          dest: 'passwords_download.txt'\n        }\n      ],\n\n      del: [\n        {\n          src: 'documents/launch_codes.txt'\n        },\n        {\n          src: 'documents/backup_plan.txt'\n        }\n      ],\n\n      sync: [\n        {\n          // only upload this document if it does not exist already\n          src: 'important_document.txt',\n          dest: 'documents/important.txt',\n          options: { gzip: true }\n        },\n        {\n          // make sure this document is newer than the one on S3 and replace it\n          verify: true,\n          src: 'passwords.txt',\n          dest: 'documents/ignore.txt'\n        },\n        {\n          src: path.join(variable.to.release, \"build/cdn/js/**/*.js\"),\n          dest: \"jsgz\",\n          // make sure the wildcard paths are fully expanded in the dest\n          rel: path.join(variable.to.release, \"build/cdn/js\"),\n          options: { gzip: true }\n        }\n      ]\n    }\n\n  }\n\n});\n```\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ↙ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↙ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ↗ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ↗ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✗ Deleted: documents/launch_codes.txt\n    >> ✗ Deleted: documents/backup_plan.txt\n    Done, without errors.\n\n### Alternative ways of including your s3 configuration\n\n#### Environment variables\n\nIf you do not pass in a **key** and **secret** with your config, `grunt-s3` will fallback to the following\nenvironment variables:\n\n* `AWS_ACCESS_KEY_ID`\n* `AWS_SECRET_ACCESS_KEY`\n\n## Helpers\n\nHelpers have been removed from Grunt 0.4 to access these methods directly. You can now require the s3 library files directly like so:\n\n`var s3 = require('grunt-s3').helpers;`\n\nMake sure you explicitly pass the options into the method. If you've used `grunt.initConfig()` you can use `grunt.config.get('s3')` to access them.\n\n### s3.upload(src, dest, options)\n\nUpload a file to s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path to the file to be uploaded. Accepts wildcards, i.e. `files/*.txt`\n\n**dest** (required) - The path on s3 where the file will be uploaded, relative to the bucket. If you use a\nwildcard for **src**, this should be a directory.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n* **access** - A specific Amazon S3 ACL. Available values: `private`, `public-read`, `public-read-write`,\n`authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`\n* **gzip** - (*boolean*) If true, uploads will be gzip-encoded.\n\n### s3.download(src, dest, options)\nDownload a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 from which the file will be downloaded, relative to the bucket. **Does not accept wildcards**\n\n**dest** (required) - The local path where the file will be saved.\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### s3.delete(src, options)\n\nDelete a file from s3. Returns a Promises/J-style Deferred object.\n\n**src** (required) - The path on S3 of the file to delete, relative to the bucket. **Does not accept wildcards**\n\n**options** (optional) - An object containing any of the following values. These values override\nany values specified in the main config.\n\n* **key** - An Amazon S3 credentials key\n* **secret** - An Amazon S3 credentials secret\n* **bucket** - An Amazon S3 bucket\n* **headers** - An object containing any headers you would like to send along with the upload.\n\n### Examples\n\n```javascript\nvar upload = s3.upload('dist/my-app-1.0.0.tar.gz', 'archive/my-app-1.0.0.tar.gz');\n\nupload\n  .done(function(msg) {\n    console.log(msg);\n  })\n  .fail(function(err) {\n    console.log(err);\n  })\n  .always(function() {\n    console.log('dance!');\n  });\n\nvar download = s3.download('dist/my-app-0.9.9.tar.gz', 'local/my-app-0.9.9.tar.gz');\n\ndownload.done(function() {\n  s3.delete('dist/my-app-0.9.9.tar.gz');\n});\n\n```\n\n## Changelog\n\n#### v0.1.0\n\n* Update to be compatible with `grunt` version `0.4.x`.\n\n#### v0.0.9\n\n* Bump version of `knox` to `0.4.1`.\n\n#### v0.0.6\n\n* Bump version of `underscore.deferred` to `0.1.4`. Version `0.1.3` would fail to install sometimes\ndue to there being two versions of the module with different capitalizations in npm.\n","readmeFilename":"README.md","_id":"grunt-s3@0.2.0-alpha.3","dist":{"shasum":"e3329d2caa6ed93c4dbc0397e257caa68ae9ee7c","tarball":"https://registry.npmjs.org/grunt-s3/-/grunt-s3-0.2.0-alpha.3.tgz","integrity":"sha512-K44kCLORBHXl5kX2QoHcd8IM7Ng5x6AR/9b8Z1NbpMRL7jf8hsuodIcd5UhWi2NZh+DCnHONGiU3Hbto6z+Uzg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4wpG8qcnYwXpeAr5mdp9fa2dlFUtKLLGbKqr9sMYTcQIgQ+RdzfycaWOnudQhaZh4VvbUp8Tuk5AyIG0fQo98lPY="}]},"_from":".","_npmVersion":"1.2.30","_npmUser":{"name":"pifantastic","email":"aaron.forsander@gmail.com"},"maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}]}},"readme":"# Grunt + Amazon S3\n\n### About\n\nAmazon S3 is a great tool for storing/serving data. Thus, there is a chance it is part of your build process. This task can help you automate uploading/downloading files to/from Amazon S3. All file transfers are verified and will produce errors if incomplete.\n\n### Dependencies\n\n* knox\n* async\n* underscore.deferred\n\n### Configuration\n\nHere is an example grunt.js configuration showing you all possible configuration.\n\n    grunt.initConfig({\n\n      s3: {\n        key: 'YOUR KEY',\n        secret: 'YOUR SECRET',\n        bucket: 'my-bucket',\n\n        // Available values:\n        // private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control\n        access: 'public-read',\n\n        // Files to be uploaded.\n        upload: [\n          {\n            src: 'important_document.txt',\n            dest: 'documents/important.txt'\n          },\n          {\n            src: 'passwords.txt',\n            dest: 'documents/ignore.txt',\n\n            // These values will override the above settings.\n            bucket: 'some-specific-bucket',\n            access: 'authenticated-read'\n          },\n          {\n            // Wildcards are valid.\n            src: 'documents/*.txt',\n\n            // But if you use wildcards, make sure your destination is a directory.\n            dest: 'documents/'\n          }\n        ],\n\n        // Files to be downloaded.\n        download: [\n          {\n            src: 'documents/important.txt',\n            dest: 'important_document_download.txt'\n          },\n          {\n            src: 'garbage/IGNORE.txt',\n            dest: 'passwords_download.txt'\n          }\n        ]\n      }\n\n    });\n\nRunning `grunt s3` using the above config produces the following output:\n\n    $ grunt s3\n    Running \"s3\" task\n    >> ✓ Downloaded: documents/important.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ✓ Downloaded: garbage/IGNORE.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✓ Uploaded: documents/document1.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✓ Uploaded: passwords.txt (04f7cb4c893b2700e4fa8787769508e8)\n    >> ✓ Uploaded: important_document.txt (e704f1f4bec2d17f09a0e08fecc6cada)\n    >> ✓ Uploaded: documents/document2.txt (04f7cb4c893b2700e4fa8787769508e8)\n\n    Done, without errors.\n","maintainers":[{"name":"pifantastic","email":"aaron.forsander@gmail.com"}],"time":{"modified":"2022-06-18T15:53:14.158Z","created":"2012-05-14T21:59:33.794Z","0.0.1":"2012-05-14T21:59:34.453Z","0.0.2":"2012-05-14T22:47:30.281Z","0.0.3":"2012-05-31T15:01:09.156Z","0.0.4":"2012-06-06T03:42:05.154Z","0.0.5":"2012-06-26T19:37:10.797Z","0.0.6":"2012-07-16T19:40:30.072Z","0.0.7":"2012-07-20T16:51:28.443Z","0.0.8":"2012-07-24T16:25:07.520Z","0.0.9":"2012-11-09T19:54:15.536Z","0.1.0":"2013-02-13T15:00:09.342Z","0.2.0-alpha":"2013-04-07T19:27:47.134Z","0.2.0-alpha.1":"2013-05-06T14:50:34.825Z","0.2.0-alpha.2":"2013-06-04T04:23:57.838Z","0.2.0-alpha.3":"2013-09-19T15:41:02.363Z"},"author":{"name":"Aaron Forsander","url":"https://github.com/pifantastic"},"repository":{"type":"git","url":"git://github.com/pifantastic/grunt-s3.git"},"users":{"fgribreau":true,"allenyang79":true,"brpaz":true,"ab":true}}