{"_id":"frosting","_rev":"27-32f325d340802895230bf65500bb79fa","name":"frosting","description":"Task helpers for Cakefiles","dist-tags":{"latest":"0.3.7"},"versions":{"0.0.1":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.0.1","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"~v0.4.1"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmJsonOpts":{"file":"/Users/jeremy.ruppel/.npm/frosting/0.0.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"frosting@0.0.1","_engineSupported":true,"_npmVersion":"1.0.30","_nodeVersion":"v0.4.11","_defaultsLoaded":true,"dist":{"shasum":"37e1f1b6c6daa00daf75cbc7dfef0150fe770f2c","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.0.1.tgz","integrity":"sha512-mfXf1gVJlBlXouqOHxwZqEspCNM1uR1Rrpnc0f9K/GWE958PkASX12MFaV9Ol7CZmeiFBlH3WvNIVbB5dWdfqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDMXaoq3J4fsGC1ikKtA907gq0GrLVba9j68n0GsRHCjAiAtAwSNxAuS3L7K1WkgIBhoYDtqH6rDgECQOPyBD8NcdQ=="}]},"maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.0.2":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.0.2","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"~v0.4.1"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmJsonOpts":{"file":"/Users/jeremy.ruppel/.npm/frosting/0.0.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"frosting@0.0.2","_engineSupported":true,"_npmVersion":"1.0.30","_nodeVersion":"v0.4.11","_defaultsLoaded":true,"dist":{"shasum":"ebcd6e354f4ebb1968eeedab6f3a091ca4bbf574","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.0.2.tgz","integrity":"sha512-j+BuLOUPdp7kRs1jUt3kidDhnH1ysj4RdYvzbPjd5eo+EiCeclcpkFwErw3mjlggUeyxWtlfXh8GzFPL+MMd6g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDrGuAneQfgKXvSgPyJ6DQco3VVahiQW8wFg2BKY3byAiAusRqzNg28E3c9gBDhfahUVfqolNkQTs1uWlCkd/22CA=="}]},"maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.0.4":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.0.4","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"~v0.4.1"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmJsonOpts":{"file":"/Users/jeremy.ruppel/.npm/frosting/0.0.4/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"frosting@0.0.4","_engineSupported":true,"_npmVersion":"1.0.30","_nodeVersion":"v0.4.11","_defaultsLoaded":true,"dist":{"shasum":"2158a05fe09c6d530f5a3175f9a5fdacf5f6bbac","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.0.4.tgz","integrity":"sha512-4OJDr8Cm1lElUzukiZNbaCzAEio+5eDu4NlCn0nWqvn3MINbPV/r17jCZ6jphtRzliBU1p74FqENfVVdwCEsRQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDY/YlnFl7G+D/SA4sSAH7pEzLpJ6YC0YMmN3n+t/5g4gIgP4VYmmG5p52CzdtjjqqAc2AjczaZd11XQBskZyL+ecY="}]},"maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.0.6":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.0.6","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"~v0.4.1"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmJsonOpts":{"file":"/Users/jeremy.ruppel/.npm/frosting/0.0.6/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"frosting@0.0.6","_engineSupported":true,"_npmVersion":"1.0.30","_nodeVersion":"v0.4.11","_defaultsLoaded":true,"dist":{"shasum":"12650c8955775ca69141a4ed70880b7106055259","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.0.6.tgz","integrity":"sha512-xLYba4KrOVSWNwrAA4wDHG4nlssTXJTTdkgCJx2y2+uPipw51iv6wxZmMiid8IgyV+WbxY+Y6Wk5QOAfzc0O0A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgxks3Rpb7jrMe3C9saxdy0KqTk3nBG/aFCXbvXW4t+gIgY2HKJnDSkxBb7UQc2CTdjqa/So+v+NmA3RtGvPCPGEs="}]},"maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.1.1":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.1.1","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"~v0.4.1"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmJsonOpts":{"file":"/Users/jeremy.ruppel/.npm/frosting/0.1.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"frosting@0.1.1","_engineSupported":true,"_npmVersion":"1.0.30","_nodeVersion":"v0.4.11","_defaultsLoaded":true,"dist":{"shasum":"1c1be777ad5a72d73efe8b727d733e5ce2d78410","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.1.1.tgz","integrity":"sha512-/iBRYAHNefh8ghrVtV2jrB2JXFLwCR3v8wy7v9KtuiquP+UGu0Q1iG/WEfb5O3/W2Aq/gUmFUuYLtUvAUkk5Ug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCo1wwBSdDeyQ4abukkZGcSwral17gJgxQUZoiG4O+dugIgX5xyCUj9/ie52iN0b3abkTxiU+cLYWEWs+mv46SX8vE="}]},"maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.1.2":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.1.2","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":">=0.4.1"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmJsonOpts":{"file":"/Users/jeremy.ruppel/.npm/frosting/0.1.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"frosting@0.1.2","_engineSupported":true,"_npmVersion":"1.0.30","_nodeVersion":"v0.4.11","_defaultsLoaded":true,"dist":{"shasum":"91466e159f7d20fd5eac5a3d3549889c26a4ec89","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.1.2.tgz","integrity":"sha512-MycpKdLC2IXMnVZ4L6j4VIGXBIUoriMhPIDR0A3SHFlBk92GjrCjSwaqgQxu7B9/8xDOv0FmkzvaqDBOa1+qbA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHOH8i8gbzv77C4ul5n8ZHPFNOCR1iBnFVhl7vkvtdJMAiEAsDAa55zQum0tYz7jzxCXpjKDILC7y0pzwmmFpMPA7Uc="}]},"maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.3.0":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.3.0","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"0.6.x"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmUser":{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"},"_id":"frosting@0.3.0","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.10","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"5219b4adbd398b30082f909b69993caef7e0af69","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.3.0.tgz","integrity":"sha512-c4vRzKS0Stw2yEmaP1DOeQs+wJPu4uwobh/eSRYSGuMiGG8MRArlzeanggNjvG7qDHRoLABIH96LXpaMiTEYpw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIv0u9etOg9U+u5RmF840+jJFSEUJQ8AGs92NHiIvAOQIhAM8fAWv5e6erVPibFRaHKfcXgcfUBRCnnmTuacKIyu0y"}]},"readme":"Frosting\n========\n\n> Task helpers for Cakefiles\n\nAbout\n-----\n\nI've always been a little frustrated with the node filesystem API, especially\nwhen trying to get a build process in place for a javascript project. Frosting\nis really not much more than an abstraction layer over the filesystem module\nthat helps keep Cakefiles readable.\n\nUsage\n-----\n\nTo skip right to some code, here's an example Cakefile with build tasks for a\nclient-side javascript library:\n\n``` coffee\n{each} = require 'frosting'\n\ntask 'compile:dev', 'Compile development distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.write \"./dist/dev/#{f.basename( )}.js\"\n\ntask 'compile:min', 'Compile minified distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.minify -> f.write \"./dist/min/#{f.basename( )}.js\"\n\ntask 'compile', 'Compile all distro files', ->\n  invoke 'compile:dev'\n  invoke 'compile:min'\n```\n\nFrosting is definitely an opinionated set of build tools. It assumes that source\nfiles are being written in coffeescript and minification will be done via uglify-js.\n\nFrosting provides a couple of convenience methods that yield a `File` class.\nThis class has the necessary API for reading, writing, mutating, inspecting,\ncompiling and minifying source files.\n\n**each**\n\n`each` can be used to iterate over a set of source files. It accepts a callback\nwhich will be passed a `File` instance for each file, and you can build as you wish\nfrom there. It can be given a glob pattern or an explicit array of files.\n\n``` coffee\neach './lib/*.coffee', ( f ) -> # `f` is an instance of File\n\n# or\n\neach [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File\n```\n\n**concat**\n\n`concat` is similar to each, except it simply concatenates all of the source\nfiles into one coffeescript file and yields a `File` instance with the combined\nsources already in the buffer. If given an array of filenames, they will be\nread and concat'd in order.\n\n``` coffee\nconcat './lib/*.coffee', ( f ) -> # `f` is an instance of File, will only get called once\n\n# or\n\nconcat [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File, will only get called once\n```\n\n**TODO** describe the `File` API\n","maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.3.2":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.3.2","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"0.6.x"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmUser":{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"},"_id":"frosting@0.3.2","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"adfda90dff39af328bcf32bb39310e15f92ab12a","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.3.2.tgz","integrity":"sha512-T62JgXuf2anaoDUjWWcL5no9BlrBZ6pLkGKE2lrInGnJh/uviTcOwo/Gqhltn22XHUGnfOD0TXneZQlW3NcRMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEmltUXXqQ9QICwkWSkQrfMH9M022AyEFqXLxexb4KmfAiAwbZ3qccLlM7jG5gXv56PWLc7kwwbErgV4n3Li9avpmg=="}]},"readme":"Frosting\n========\n\n> Task helpers for Cakefiles\n\nAbout\n-----\n\nI've always been a little frustrated with the node filesystem API, especially\nwhen trying to get a build process in place for a javascript project. Frosting\nis really not much more than an abstraction layer over the filesystem module\nthat helps keep Cakefiles readable.\n\nUsage\n-----\n\nTo skip right to some code, here's an example Cakefile with build tasks for a\nclient-side javascript library:\n\n``` coffee\n{each} = require 'frosting'\n\ntask 'compile:dev', 'Compile development distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.write \"./dist/dev/#{f.basename( )}.js\"\n\ntask 'compile:min', 'Compile minified distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.minify -> f.write \"./dist/min/#{f.basename( )}.js\"\n\ntask 'compile', 'Compile all distro files', ->\n  invoke 'compile:dev'\n  invoke 'compile:min'\n```\n\nFrosting is definitely an opinionated set of build tools. It assumes that source\nfiles are being written in coffeescript and minification will be done via uglify-js.\n\nFrosting provides a couple of convenience methods that yield a `File` class.\nThis class has the necessary API for reading, writing, mutating, inspecting,\ncompiling and minifying source files.\n\n**each**\n\n`each` can be used to iterate over a set of source files. It accepts a callback\nwhich will be passed a `File` instance for each file, and you can build as you wish\nfrom there. It can be given a glob pattern or an explicit array of files.\n\n``` coffee\neach './lib/*.coffee', ( f ) -> # `f` is an instance of File\n\n# or\n\neach [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File\n```\n\n**concat**\n\n`concat` is similar to each, except it simply concatenates all of the source\nfiles into one coffeescript file and yields a `File` instance with the combined\nsources already in the buffer. If given an array of filenames, they will be\nread and concat'd in order.\n\n``` coffee\nconcat './lib/*.coffee', ( f ) -> # `f` is an instance of File, will only get called once\n\n# or\n\nconcat [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File, will only get called once\n```\n\n**TODO** describe the `File` API\n","maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.3.3":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.3.3","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"0.6.x"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmUser":{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"},"_id":"frosting@0.3.3","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"c1b178d8be8f3f4a1024120397a269a62d1359c5","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.3.3.tgz","integrity":"sha512-E5CZlB3jBypQYCXr1HI+gCx12SbOK32inBvkMof7b5SQVosvdY1G6IV+KhimXSCkY4i7m9ZEbmuz3U0hayuetA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIARdbhVjm7vm1jxRFqHyoJE8+Niicd6malydfbubK+BjAiEApSDl0zKnC2jhU2B0V+wHrz6uf5iiA2v/kJVGSGp7IPg="}]},"readme":"Frosting\n========\n\n> Task helpers for Cakefiles\n\nAbout\n-----\n\nI've always been a little frustrated with the node filesystem API, especially\nwhen trying to get a build process in place for a javascript project. Frosting\nis really not much more than an abstraction layer over the filesystem module\nthat helps keep Cakefiles readable.\n\nUsage\n-----\n\nTo skip right to some code, here's an example Cakefile with build tasks for a\nclient-side javascript library:\n\n``` coffee\n{each} = require 'frosting'\n\ntask 'compile:dev', 'Compile development distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.write \"./dist/dev/#{f.basename( )}.js\"\n\ntask 'compile:min', 'Compile minified distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.minify -> f.write \"./dist/min/#{f.basename( )}.js\"\n\ntask 'compile', 'Compile all distro files', ->\n  invoke 'compile:dev'\n  invoke 'compile:min'\n```\n\nFrosting is definitely an opinionated set of build tools. It assumes that source\nfiles are being written in coffeescript and minification will be done via uglify-js.\n\nFrosting provides a couple of convenience methods that yield a `File` class.\nThis class has the necessary API for reading, writing, mutating, inspecting,\ncompiling and minifying source files.\n\n**each**\n\n`each` can be used to iterate over a set of source files. It accepts a callback\nwhich will be passed a `File` instance for each file, and you can build as you wish\nfrom there. It can be given a glob pattern or an explicit array of files.\n\n``` coffee\neach './lib/*.coffee', ( f ) -> # `f` is an instance of File\n\n# or\n\neach [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File\n```\n\n**concat**\n\n`concat` is similar to each, except it simply concatenates all of the source\nfiles into one coffeescript file and yields a `File` instance with the combined\nsources already in the buffer. If given an array of filenames, they will be\nread and concat'd in order.\n\n``` coffee\nconcat './lib/*.coffee', ( f ) -> # `f` is an instance of File, will only get called once\n\n# or\n\nconcat [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File, will only get called once\n```\n\n**TODO** describe the `File` API\n","maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.3.5":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.3.5","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"0.6.x"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5","ejs":"0.7.2"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmUser":{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"},"_id":"frosting@0.3.5","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"770f063a6784cfba81eb4831b8a89c88ec4582e8","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.3.5.tgz"},"readme":"Frosting\n========\n\n> Task helpers for Cakefiles\n\nAbout\n-----\n\nI've always been a little frustrated with the node filesystem API, especially\nwhen trying to get a build process in place for a javascript project. Frosting\nis really not much more than an abstraction layer over the filesystem module\nthat helps keep Cakefiles readable.\n\nUsage\n-----\n\nTo skip right to some code, here's an example Cakefile with build tasks for a\nclient-side javascript library:\n\n``` coffee\n{each} = require 'frosting'\n\ntask 'compile:dev', 'Compile development distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.write \"./dist/dev/#{f.basename( )}.js\"\n\ntask 'compile:min', 'Compile minified distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.minify -> f.write \"./dist/min/#{f.basename( )}.js\"\n\ntask 'compile', 'Compile all distro files', ->\n  invoke 'compile:dev'\n  invoke 'compile:min'\n```\n\nFrosting is definitely an opinionated set of build tools. It assumes that source\nfiles are being written in coffeescript and minification will be done via uglify-js.\n\nFrosting provides a couple of convenience methods that yield a `File` class.\nThis class has the necessary API for reading, writing, mutating, inspecting,\ncompiling and minifying source files.\n\n**each**\n\n`each` can be used to iterate over a set of source files. It accepts a callback\nwhich will be passed a `File` instance for each file, and you can build as you wish\nfrom there. It can be given a glob pattern or an explicit array of files.\n\n``` coffee\neach './lib/*.coffee', ( f ) -> # `f` is an instance of File\n\n# or\n\neach [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File\n```\n\n**concat**\n\n`concat` is similar to each, except it simply concatenates all of the source\nfiles into one coffeescript file and yields a `File` instance with the combined\nsources already in the buffer. If given an array of filenames, they will be\nread and concat'd in order.\n\n``` coffee\nconcat './lib/*.coffee', ( f ) -> # `f` is an instance of File, will only get called once\n\n# or\n\nconcat [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File, will only get called once\n```\n\n**TODO** describe the `File` API\n","maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.3.6":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.3.6","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"0.6.x"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5","ejs":"0.7.2"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmUser":{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"},"_id":"frosting@0.3.6","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"f506bc715e5d9e411df902c6477f7b595856234f","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.3.6.tgz","integrity":"sha512-uU/OYdstMLV1IFPPpiogpIfz0RJpT6mUfsatLO67/Bl8QZJM7JOuDpOXeJ+9I5MGNRBnf46AsWm5DNF7Uy0fRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5alOD/mVDu4lempJnfkv97nVspFWuA8VZatVxsZwkDwIgZ0e0PL13oBTmah1IYKsiYjRCtILRuBvCHJZxDmuUDAg="}]},"readme":"Frosting\n========\n\n> Task helpers for Cakefiles\n\nAbout\n-----\n\nI've always been a little frustrated with the node filesystem API, especially\nwhen trying to get a build process in place for a javascript project. Frosting\nis really not much more than an abstraction layer over the filesystem module\nthat helps keep Cakefiles readable.\n\nUsage\n-----\n\nTo skip right to some code, here's an example Cakefile with build tasks for a\nclient-side javascript library:\n\n``` coffee\n{each} = require 'frosting'\n\ntask 'compile:dev', 'Compile development distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.write \"./dist/dev/#{f.basename( )}.js\"\n\ntask 'compile:min', 'Compile minified distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.minify -> f.write \"./dist/min/#{f.basename( )}.js\"\n\ntask 'compile', 'Compile all distro files', ->\n  invoke 'compile:dev'\n  invoke 'compile:min'\n```\n\nFrosting is definitely an opinionated set of build tools. It assumes that source\nfiles are being written in coffeescript and minification will be done via uglify-js.\n\nFrosting provides a couple of convenience methods that yield a `File` class.\nThis class has the necessary API for reading, writing, mutating, inspecting,\ncompiling and minifying source files.\n\n**each**\n\n`each` can be used to iterate over a set of source files. It accepts a callback\nwhich will be passed a `File` instance for each file, and you can build as you wish\nfrom there. It can be given a glob pattern or an explicit array of files.\n\n``` coffee\neach './lib/*.coffee', ( f ) -> # `f` is an instance of File\n\n# or\n\neach [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File\n```\n\n**concat**\n\n`concat` is similar to each, except it simply concatenates all of the source\nfiles into one coffeescript file and yields a `File` instance with the combined\nsources already in the buffer. If given an array of filenames, they will be\nread and concat'd in order.\n\n``` coffee\nconcat './lib/*.coffee', ( f ) -> # `f` is an instance of File, will only get called once\n\n# or\n\nconcat [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File, will only get called once\n```\n\n**TODO** describe the `File` API\n","maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]},"0.3.7":{"author":{"name":"Jeremy Ruppel"},"name":"frosting","description":"Task helpers for Cakefiles","version":"0.3.7","repository":{"url":"https://github.com/jeremyruppel/frosting"},"engines":{"node":"0.6.x"},"main":"./lib/frosting","dependencies":{"glob":"3.1.6","coffee-script":"1.2.0","uglify-js":"1.2.5","ejs":"0.7.2"},"devDependencies":{"mocha":"0.14.1","should":"0.6.0","sinon":"1.3.2"},"scripts":{"test":"mocha"},"_npmUser":{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"},"_id":"frosting@0.3.7","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.15","_defaultsLoaded":true,"dist":{"shasum":"676123f289a25cb40daab4db45ab54f5b02644d4","tarball":"https://registry.npmjs.org/frosting/-/frosting-0.3.7.tgz","integrity":"sha512-kvsuUblxGBkafPMmtdzyJSwaqEuEbw+uzJzNPWD5P1DvHtr0J4MXpAEiDlzGB9IO3VNIaLT3PfZvL/3nWO2vhQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDlUvi/+1YGLuHOoVm05v4Id1Y1azFDD6fuW0u9jb8KiwIhAPl8ZrCCvaXT2lvhLpkSvpw56S+AMC1lGfOylMAiq4Rf"}]},"readme":"Frosting\n========\n\n> Task helpers for Cakefiles\n\nAbout\n-----\n\nI've always been a little frustrated with the node filesystem API, especially\nwhen trying to get a build process in place for a javascript project. Frosting\nis really not much more than an abstraction layer over the filesystem module\nthat helps keep Cakefiles readable.\n\nUsage\n-----\n\nTo skip right to some code, here's an example Cakefile with build tasks for a\nclient-side javascript library:\n\n``` coffee\n{each} = require 'frosting'\n\ntask 'compile:dev', 'Compile development distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.write \"./dist/dev/#{f.basename( )}.js\"\n\ntask 'compile:min', 'Compile minified distro files', ->\n  each './lib/*.coffee', ( f ) -> f.compile -> f.minify -> f.write \"./dist/min/#{f.basename( )}.js\"\n\ntask 'compile', 'Compile all distro files', ->\n  invoke 'compile:dev'\n  invoke 'compile:min'\n```\n\nFrosting is definitely an opinionated set of build tools. It assumes that source\nfiles are being written in coffeescript and minification will be done via uglify-js.\n\nFrosting provides a couple of convenience methods that yield a `File` class.\nThis class has the necessary API for reading, writing, mutating, inspecting,\ncompiling and minifying source files.\n\n**each**\n\n`each` can be used to iterate over a set of source files. It accepts a callback\nwhich will be passed a `File` instance for each file, and you can build as you wish\nfrom there. It can be given a glob pattern or an explicit array of files.\n\n``` coffee\neach './lib/*.coffee', ( f ) -> # `f` is an instance of File\n\n# or\n\neach [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File\n```\n\n**concat**\n\n`concat` is similar to each, except it simply concatenates all of the source\nfiles into one coffeescript file and yields a `File` instance with the combined\nsources already in the buffer. If given an array of filenames, they will be\nread and concat'd in order.\n\n``` coffee\nconcat './lib/*.coffee', ( f ) -> # `f` is an instance of File, will only get called once\n\n# or\n\nconcat [\n\t'./lib/foo.coffee',\n\t'./lib/bar.coffee',\n\t'./lib/baz.coffee'\n], ( f ) -> # `f` is an instance of File, will only get called once\n```\n\n**TODO** describe the `File` API\n","maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}]}},"maintainers":[{"name":"jeremyruppel","email":"jeremy.ruppel@gmail.com"}],"time":{"modified":"2022-06-30T12:18:31.881Z","created":"2012-03-13T22:37:10.113Z","0.0.1":"2012-03-13T22:37:12.306Z","0.0.2":"2012-03-13T23:07:24.187Z","0.0.4":"2012-03-14T22:16:11.738Z","0.0.6":"2012-03-14T22:26:47.941Z","0.1.1":"2012-03-14T23:05:07.905Z","0.1.2":"2012-03-14T23:13:39.587Z","0.3.0":"2012-03-19T23:09:15.620Z","0.3.2":"2012-04-23T16:59:29.885Z","0.3.3":"2012-06-20T23:12:03.690Z","0.3.5":"2012-06-25T16:50:25.627Z","0.3.6":"2012-06-25T16:57:43.847Z","0.3.7":"2012-06-25T17:02:53.183Z"},"author":{"name":"Jeremy Ruppel"},"repository":{"url":"https://github.com/jeremyruppel/frosting"}}