{"_id":"mekano","_rev":"34-dc4ec00a4891d1efda44f1746b32f5f8","name":"mekano","description":"maintain, update and regenerate groups of files","dist-tags":{"latest":"0.1.7"},"versions":{"0.0.0":{"name":"mekano","version":"0.0.0","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"neomake":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","tool","jake","rake","cake","cli"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"_id":"mekano@0.0.0","_shasum":"6b6d7051c16bffff4fd223961362238e8ed5619d","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"6b6d7051c16bffff4fd223961362238e8ed5619d","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.0.0.tgz","integrity":"sha512-8sCIzjBZKoBSSxOtmKo/0ZUCIDcrXcje2m4eT5o8sMhnlzlTB1atjnGZ8A6d7p7iGaokSl1OtzftL9VP9MvuXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaFeGAbH2iPNQGs6Zy93Tkk3nAzR9EujYm/Wesw/3VwwIgVOfqToL8zXcIgjfTEW30rqL8ytCY2116CveGI3BPGRk="}]}},"0.0.1":{"name":"mekano","version":"0.0.1","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"neomake":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.0.1","_shasum":"898b324a92d59d938c28d71d806318f1037675a9","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"898b324a92d59d938c28d71d806318f1037675a9","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.0.1.tgz","integrity":"sha512-kESXk4+AqtOgnsxOSaM8gU6tCnE8A/f42pLxe8fz8Ihk8UvfwzLjapLj5xt8+HFZcWteJySTUmgMy0305EALfQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDKbEBEYM+mIa6uPEGaWfDg/22/pYahNBeuv+NnakAIxAiEAtZ3l2aZmf/7JPC+AMpf+SPuXnKcC+2G4ANyXebwphV0="}]}},"0.0.2":{"name":"mekano","version":"0.0.2","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"neomake":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.0.2","_shasum":"c17405db4caf2c59a50c00f09cba688f5f0a3acf","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"c17405db4caf2c59a50c00f09cba688f5f0a3acf","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.0.2.tgz","integrity":"sha512-vgsl64R4TgoAKKiG6HNYCQPDfxAhVNg50fLnj/vthjcoPrAw03GouZpK1ABOvY4A0KCYxhlK/lbkFgdfpp0s3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5xC2WLn4/AF6thBO+0faZOQ9VpHhUPRIxgiS5EloOnwIgBo6bWhLw1T2T6huIG8KVLiiZH+gFw+94zZzlmCjT/go="}]}},"0.0.3":{"name":"mekano","version":"0.0.3","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.0.3","_shasum":"50464f17555163498fdd81ee5202cd1dacd1ca85","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"50464f17555163498fdd81ee5202cd1dacd1ca85","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.0.3.tgz","integrity":"sha512-7pW2vOXCG2djRHvxGP1a88R7YNRtRrKQfwunHj5FfQIhTv0EJQbOu0jAyXkR+e03JnUeFm4HCHxSE4gqQzntdQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCejScuqRNeVilJhRKc3AY7TV3NRkDw2FI669udVRnbIAIgW+dYvwwsyHV8BMrt/mInUJ+jB5EbmqDQkugxb8KiFZ0="}]}},"0.0.4":{"name":"mekano","version":"0.0.4","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.0.4","_shasum":"b440600883a551f093290f3c6218344bac4d0e7e","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"b440600883a551f093290f3c6218344bac4d0e7e","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.0.4.tgz","integrity":"sha512-DZeSNiMdw/iyzKdOFSqpdr/LNYH3pfg0yXZ9VD9i19baIilR7jHf7TzSKkGPba4YGqNDFxgrBxWyIvBcn721BA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIACxnPPVBU+gFb7VfJtORk30xcFXS6fv8s8okd+AdV7wAiEApqAuyUmUDO9cPx5dPVp5l70/Ru10jZ1JPBdReUQ49ts="}]}},"0.0.5":{"name":"mekano","version":"0.0.5","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.0.5","_shasum":"d3b419d1434f1bdaa9f01c8fdcadd209ca2710d1","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"d3b419d1434f1bdaa9f01c8fdcadd209ca2710d1","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.0.5.tgz","integrity":"sha512-sWA8yX1cDZROFd9/Oz9oH2/kWLWnpyd1xOm71LaYB/OhszIcXFLJiGQz+gmva6rN5yc1QdxqpdaytDgEyESaZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBhzirT94k9QlG7fh5dqG5yFaKhrxlUR5Qg/xUDi+MLUAiEArZDSRANDKiGssLTGFsAY/71uSBYr8JVeWCukx6dKP5k="}]}},"0.0.6":{"name":"mekano","version":"0.0.6","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.0.6","_shasum":"64383cb4d8db7f8503466369fa5e38c56e1a1912","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"64383cb4d8db7f8503466369fa5e38c56e1a1912","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.0.6.tgz","integrity":"sha512-XkxGwKeOHQaDA6DnULvDa7uTq+sPkbjY8ffd3YHcpxpT/+XUUeyRhDOgLreqtAXKjE1ZCyp+J1wiVrZ52gxB+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICkpaImQO1lwlijMQd+tfpug6hdpjpmdWh2s4VB6j+GEAiEAvRAIGVt/+V9VmBQaT4N5eEeNVtIWvM0o/ageyl9tIUg="}]}},"0.0.7":{"name":"mekano","version":"0.0.7","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.0.7","_shasum":"9fc7459871ad00ffef70be386caafab542af7591","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"9fc7459871ad00ffef70be386caafab542af7591","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.0.7.tgz","integrity":"sha512-epUiiSU8vM1R1kehe8EcHJNAgHrVsIPS1Ki+78JOlapf1tIp2++TmPbMXImomNnm8z6o99kpGh8ItqERRgfeKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDz9lTbpbMavK5GgWZfw3GzwW1VUn4yxL8VKz4+72mLlwIhAIOIiv6CPm3nJqiwe4FGLD1IiHmP9OvUog+R69coLcnC"}]}},"0.1.0":{"name":"mekano","version":"0.1.0","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.1.0","_shasum":"91dc7bc395ad91611d77d56a69bf7ff451a028b5","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"91dc7bc395ad91611d77d56a69bf7ff451a028b5","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.1.0.tgz","integrity":"sha512-oP0SzRO3/gTdHR62ctYqC3sFJuwP7CBlugDmspqFGYHb9j6LEtWuh/saxAtL80gY1IjzXs+Ri0AaaIHMEp3HfA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDrUR5Y6fhS50JfTbtqNxGuziA68TyXEe/Z2im0/oc/5AiEAmIX053X4gX/YCYx+L0Hx0E5ktXbEPVXpYbkZr6RgpH4="}]}},"0.1.1":{"name":"mekano","version":"0.1.1","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.1.1","_shasum":"ccb1203ec909f5a4e9e6919bb2d250a74798dcf9","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"ccb1203ec909f5a4e9e6919bb2d250a74798dcf9","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.1.1.tgz","integrity":"sha512-7UJY5MkPTFeY+IoNym4LFPQ3WrE6z2zFRiL4M64lZmQKzCqT5NyWfH9uxmsWXHDt1kp7srRGezfmXdliZNbosg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHxqtfwAK8GNGOp8EumUEvwuVpd9FvFkcuSWKTt35quXAiBY+uLDmCV7mvvCGMEBBc5KWvObkGPOBesqsPEdBuDPdQ=="}]}},"0.1.2":{"name":"mekano","version":"0.1.2","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.1.2","_shasum":"d465faa7fc12c2c9b6e4db2223404b7a135ddb44","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"d465faa7fc12c2c9b6e4db2223404b7a135ddb44","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.1.2.tgz","integrity":"sha512-pq5WbPiQ1ncLq6tg3bGzdTn037MvGwu47FMsJwjOnV3R0wlP1uwZl6T9GoePu+lDkHiMNEHlcANTBzgNugwIbQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrQJ4GLR4TrqTRVOBVPjwmUKCayTy/ZnGZW2Od55D4vwIgHb1p+2QueodHwQRxNd/026mXQI7qt2vLbXkYHpY+58Y="}]}},"0.1.3":{"name":"mekano","version":"0.1.3","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"_id":"mekano@0.1.3","_shasum":"240348a8b9fd299966eff36bee86d87e2e31c364","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"240348a8b9fd299966eff36bee86d87e2e31c364","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.1.3.tgz","integrity":"sha512-8B4waerCq9f5cLGtHZX42IPwFSEPmOKLVvpfL1v4ze6ITbiACps56OzrC/48urvmQIOsi0dp2+RSspW3CbQ5rA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfwHcX3fU1zqa997ZSaH0z3/AFXNl+20bjVVbxy6FM7QIgFyOiueMTQmMyqWgBvC4PTYisRBUNPFyUwKPjPcMex5Y="}]}},"0.1.4":{"name":"mekano","version":"0.1.4","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"gitHead":"3465002eceebf3d72df44bd88ede9bcb201e25b1","_id":"mekano@0.1.4","_shasum":"22460448c143c1b3d7c09d1cbda1001fff5991df","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"22460448c143c1b3d7c09d1cbda1001fff5991df","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.1.4.tgz","integrity":"sha512-wV5QpZbE6050SXtj7g14phf4FYBg/czP1z2xgxwSgF1Qj69CZaO4JzWtcECpF7zbLeS5r0B+ZUAJXcoZ6HK1Hg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgMJPmWrVum+6cjXrvVCTawIYY5HJv2Q/P/3EmDKTGowIhANnClXCHdAxfZ2xCULsG3+nvkvWyINjrd+adzG5qRK8a"}]}},"0.1.5":{"name":"mekano","version":"0.1.5","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"gitHead":"f52d274bbfc2c57975ca0862ca083f54a349c5ab","_id":"mekano@0.1.5","_shasum":"cd21e2dbae311af8db7467e9c2391b2ae6826163","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"cd21e2dbae311af8db7467e9c2391b2ae6826163","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.1.5.tgz","integrity":"sha512-gxEsNnRuhj+l5tTsQP7m+RlGOPX1PTgAS87nUsSLZRcE7G3C9LEpqGb0ObQURmg7U/OF8l8gHHjmnYSrs8XfmQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGTx+NtNaCldfoNSfh+Ew1dPCinlq1f7aNaDguWii5mpAiBfALT8PHaEO+cD5AESpF+8i3IsrYulzoiJeYz9M3g5Lw=="}]}},"0.1.6":{"name":"mekano","version":"0.1.6","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"gitHead":"7d34c7f5bfff524e96eea5ef179cd9827e22590b","_id":"mekano@0.1.6","_shasum":"38aaa6f29d55b8f31e228a7de77b6d0a94eadd53","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"38aaa6f29d55b8f31e228a7de77b6d0a94eadd53","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.1.6.tgz","integrity":"sha512-Lf87Oq+qJ9BzO1U4JQvDjTY8SZ4rS0PQnbg3exyJMvm08edHp+EsbVfW6S4ZhSo5GwBaVvgzGLCWvCvOhaAuqg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFfo6ZFmH43xu53yeVwRnPP529WB5n9ZpLcwE5UhwHV3AiAP+hwmB8DY3IyfukomfLX6vfuo8ptNZfySNP4jbSWfSQ=="}]}},"0.1.7":{"name":"mekano","version":"0.1.7","description":"maintain, update and regenerate groups of files","main":"index.js","files":["bin","lib","LICENSE"],"bin":{"mekano":"bin/cli.js"},"scripts":{"test":"faucet test/read test/graph test/update test"},"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"license":"ISC","bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"homepage":"https://github.com/jeanlauliac/mekano","devDependencies":{"tape":"^2.12.3","faucet":"0.0.1"},"dependencies":{"abbrev":"^1.0.5","concat-stream":"^1.4.5","debounce":"0.0.3","extsprintf":"^1.0.3","gaze":"^0.6.4","glob":"^3.2.9","minimatch":"^0.3.0","mkdirp":"^0.5.0","murmurhash-js":"^1.0.0","nopt":"^2.2.1","slide":"^1.1.5"},"engines":{"node":">=0.10"},"gitHead":"d26ed5528a0d6fe49646f7129005d6eb39f93cec","_id":"mekano@0.1.7","_shasum":"bfdc698ec4d32fb52f1163a8f820124cfe7553f2","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"undashes","email":"jean@lauliac.com"},"maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"dist":{"shasum":"bfdc698ec4d32fb52f1163a8f820124cfe7553f2","tarball":"https://registry.npmjs.org/mekano/-/mekano-0.1.7.tgz","integrity":"sha512-bM5tE7WGHOtNmOM0yRBQ+naJlcRJ/qnogl22xLCY+IwhRrzVXTSOzjdBalmacNBxsyPZqdduIBi+ChAoq+tsAQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDhQD56AODUGJfwQuP0u67cmb5QjgaAHQwcCtTLBOflFQIhANr4DqFpR4jmkxrM85wa6kahHpkp6/CZdA/EVDN0PafU"}]}}},"readme":"# ![mekano](https://cdn.mediacru.sh/0hecryCVR3vS.svg)\n\n[![Build Status](https://travis-ci.org/jeanlauliac/mekano.svg?branch=master)](https://travis-ci.org/jeanlauliac/mekano)\n\nSynopsis\n--------\n\n*mekano(1)* – maintain, update and regenerate groups of files.\n\n*mekano*:\n\n  * is a **make-like update tool**: you have a bunch of files in some\n    directories, you want to **generate other files** from them, **fast** (no\n    unnecessary work);\n  * liberally aims to **lessen the frustration** that might occur working with\n    GNU *make(1)* on small projects;\n  * tries to be balanced between **speed and convenience**;\n  * works **best** with a **powerful shell** (like bash & co.), that it does not\n    supplant;\n  * is **not** tied to any **specific technology** and may be used to compile\n    C/C++, build a web application Javascript/CSS assets, or brew your\n    coffee.\n\nExample\n-------\n\nIn `./Mekanofile`:\n\n    bin = `node_modules/.bin` ;\n\n    Concat: `cat $in > $out` ;\n    Coffee: `$bin/coffee -cp $in > $out` ;\n    Minify: `$bin/uglifyjs < $in > $out` ;\n\n    src/**/*.coffee\n        Coffee => build/**/*.js\n        Concat -> dist/concat.js ;\n\n    dist/*.js\n        Minify => dist/*.min.js\n        :: all `Update all files` ;\n\nIn your preferred shell:\n\n    $ ls\n    Mekanofile    src\n\n    $ mekano update\n    Updating...  25.0%   Coffee src/foo.coffee -> build/foo.js\n    Updating...  50.0%   Coffee src/bar.coffee -> build/bar.js\n    Updating...  75.0%   Concat build/foo.js build/bar.js -> dist/concat.js\n    Updating... 100.0%   Minify dist/concat.js -> dist/concat.min.js\n    Done.\n\n    $ mekano update\n    Everything is up to date.\n\n    $ ls\n    Mekanofile    src      build       dist        .mekano\n\n    $ ls dist\n    concat.js   concat.min.js\n\n    $ mekano clean\n    Removing: dist/concat.min.js\n    Removing: dist/concat.js\n    Removing: build/foo.js\n    Removing: build/bar.js\n\nDescription\n-----------\n\n*mekano* is a general-purpose update tool. It examines changes made and updates\nderived files, called the targets, from the files they are derived, called the\nprerequisites. Typical cases include (non-exhaustive):\n\n  * compiling a group of C/C++ files to their respective object files;\n  * linking a group of object files to a single binary;\n  * transpiling a plain JavaScript to a minified JavaScript.\n\nA description file (called mekanofile, or *manifest*) contains a description of\nthe relationships between files, and the commands that need to be executed to\nupdate the targets and reflect changes in their prerequisites.\n\n*mekano* focuses above all on correctness and convenience, then speed. It\nproperly takes account of removed and added files; tracks command-line changes;\nautomatically creates output directories; runs commands concurrently; and\nattempts to provide simple semantics for dependency definitions. This tool is\nlargely inspired by the\n[UNIX *make(1)*](http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html)\nutility.\n\n*mekano* only knows how to update files. It is not well suited for so-called\n'tasks' (eg. 'test', 'publish'). Plain scripts are probably a better idea for\nthose (bash, Javascript, Python…). Using\n[npm-scripts](https://www.npmjs.org/doc/misc/npm-scripts.html) or tools like\n[grunt](http://gruntjs.com/) is suggested as well.\n\nThe mekanofile is generally meant to be written by hand, but there is – for now\n– very little support for update-time decision-making (no 'if', no macros).\nHowever, you can use a dedicaced macro or procedural language to generate\nthe mekanofile, like [m4](http://www.gnu.org/software/m4/manual/m4.html),\nPython, Javascript…\n\nThis specific implementation is made with JavaScript on top of Node.js, but keep\nin mind it may be usable for any purpose, from C/C++ compilation to web assets\nbuild. Node.js just makes it easier to be multiplatform.\n\nInstall\n-------\n\n**Important:** you need node v0.10 or higher to run this program.\n\n    $ npm install mekano\n\nThe tool will be available as `node_modules/.bin/mekano`. It is not recommended\nto install it globally, because different projects may need different,\nincompatible versions (of course, [semver](http://semver.org/) is used). Is\n**is** recommended, however, to add it to your project's `package.json` (just\nuse npm's [`--save` option](https://www.npmjs.org/doc/cli/npm-install.html)).\n\nTo avoid typing the path every time when installed locally, one decent solution\nis to create an alias, if your shell supports it. For example:\n\n    $ alias mk=node_modules/.bin/mekano\n\nIf you later forget to `npm install` a project, your shell will just tell you:\n\n    $ mk update\n    bash: no such file or directory: node_modules/.bin/mekano\n\nUsage\n-----\n\n    mekano <command> [options] [bind=value...] [target_name...]\n\nCommands:\n\n  * `update` Update the specified targets. The whole project is updated if no\n    target is specified.\n  * `watch` Keep updating files until a signal is caught. It watches files and\n    updates targets when prerequisites change. If the Mekanofile itself changes,\n    you need to relaunch mekano manually.\n  * `status` Display the modified files and dirty targets. No target is\n    updated. If `--silent` is specified, return a zero exit value if the\n    targets are up to date; otherwise, return 1.\n  * `clean` Remove the specified and dependent targets. For example, with the\n    above Mekanofile, `clean dist/concat.js` will remove this file and the\n    minified one. All generated files are removed if no target is specified.\n  * `aliases` Display a list of the defined aliases.\n  * `print <type>` Display the mekanofile interpretation. Types:\n      * `manifest` Output the mekanofile as it had been parsed.\n      * `dot` Output the file graph in the graphviz dot format.\n  * `help` Display mekano own help.\n\nGeneral options:\n\n  * `-y, --shy` Stop an update as soon as an error occurs. By default,\n    the update continues to get a maximum of errors at once.\n  * `-n, --dry-run` Output commands that would be run. No target is updated\n    nor deleted.\n  * `-f, --file <mekanofile>` Specify a different mekanofile. If `-` is\n    specified, the standard input is used.\n  * `-r, --robot` Output machine-parseable text.\n  * `-v, --version` Output version and exit.\n\nBinds and target names can be mixed on the command-line, but targets are always\nevaluated last. Values cannot refer to values declared inside the mekanofile,\nbut the contrary is possible.\n\nWithout the option `-f`, *mekano* looks in sequence for the files\n`./Mekanofile` and `./mekanofile`. The first found is read.\n\nThe standard output reports the recipes being executed as well as the completion\npercentage. The `-r` option makes the output more easily parseable.\n\nIf any of the SIGHUP, SIGTERM, and SIGQUIT signals is received, the tool stops\nupdating but keeps track of updated files so far. However, it does not kill the\nrunning sub-processes. If SIGINT (generally Ctrl+C) is received, it follows a\n[*\"wait and cooperative exit\"* (WCE)](http://www.cons.org/cracauer/sigint.html)\nstategy; it waits for processes to complete, and stops only if they ended on\nSIGINT themselves. In **watch** mode, SIGINT only stops the update, if any; a\nsecond SIGINT may be needed to quit. For compatibility with sloppy signal\nhandlers, return code 130 is also considered a SIGINT.\n\nAt the moment, Mekano cannot update the Mekanofile itself **and** take account\nof it in a single run (with a relation such as\n`Mekanofile.in M4 -> Mekanofile`). This is because it won't reload the\nMekanofile after its update. You need to run it twice in this case. This will be\nimproved in the future.\n\nSyntax\n------\n\nA mekanofile can contain recipes, relations, and binds. Comments start with\n`#`, and end with the next new line. Whitespace is never significant is all\nother cases. Statements shall be terminated with `;`, otherwise *mekano* will\nnot know the boundary between two successive relations.\n\n    unit = { recipe | relation | bind } ;\n\nThe golden rule when writing a mekanofile is that **order does not matter**.\nWhatever the ordering of recipes, relations and binds is, the interpretation\nwill always be the same; even if glob patterns are involved. This makes the\nsyntax purely declarative.\n\n### Recipes\n\nRecipe grammar (in [EBNF](http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form))\nis as below:\n\n    recipe = recipe-name, \":\", command, \";\" ;\n    recipe-name = identifier ;\n    command = interpolation ;\n    identifier = { ? A-Z, a-z, 0-9, '-' or '_' ? } ;\n    interpolation = \"`\", ? any character ?, \"`\" ;\n\nThere can only be a single command in a recipe. However, multiple processes can\nbe launched using the shell operators like `;`, `&&`, `&`, `|` or `||`. The\n[pipelines](http://www.gnu.org/software/bash/manual/html_node/Pipelines.html)\nare especially useful to avoid creating temporary files (if your shell supports\nit). The command can span several lines. Here a simple recipe example:\n\n    Compile: `gcc -c $in -o $out` ;\n\nBackticks define an *interpolation*. An interpolation can contain the backtick\ncharacter when escaped as `` $` ``. `$$` yields a single dollar sign. Command\nlines can refer to bound values with `$name` or `$(name)`. The following values\nare automatically available during recipe evaluation:\n\n  * `in` Space-separated shell-quoted list of the input file(s).\n  * `out` Space-separated shell-quoted list of the output file(s).\n\nCommand lines are evaluated by the local shell, typically with `sh -c`.\n'UpperCamel' case is suggested for naming recipes. Recipes can appear anywhere\nin the mekanofile, either after or before the relations referring to it.\n\n### Relations\n\nRelation grammar is as below:\n\n    relation = ref-list, { transformation }, [ alias ], \";\" ;\n    transformation = recipe-name, ( \"=>\" | \"->\" ), ref-list ;\n    alias = \"::\", alias-name, [ alias-description ] ;\n    ref-list = { path | path-glob | alias-name } ;\n    alias-name = identifier ;\n    alias-description = interpolation ;\n    path = { ? alphanumeric character with at least a '.' or a '/' ? } ;\n    path-glob = { ? same as path, but with at least a '*', '**' or '{,}' operator ? } ;\n\nA prerequisite or a target may be either a single file path, a globling pattern,\nor an alias. A path always contains one of `/` or `.`, for example `./foo` or\n`foo.js` instead of just `foo`; otherwise it is recognized as an alias. Here a\nsimple relation example:\n\n    source/*.c Compile => obj/*.o Link -> ./hello_world\n        :: all `Build the hello world program` ;\n\nIt means: *\"takes all the C files in the `source` folder, compile them to object\nfiles in `obj`; then link all those into a single binary `./hello_world`. This\nbinary can be referred to as the alias `all`.\"*\n\n#### Expansions\n\nDuring evaluation, multi-transformation relations are internally expanded to\nmultiple single-transformation relations. As such, this statement:\n\n    foo.c Compile -> foo.o Link -> a.out :: all ;\n\nis equivalent to:\n\n    foo.c Compile -> foo.o ;\n    foo.o Link -> a.out ;\n    a.out :: all ;\n\n#### Transformations\n\nThere are two kind of transformations with *mekano*:\n\n  * **plain** transformations noted with a simple arrow `->`.\n    The recipe is invoked with all the input files, and is assumed to produce\n    all the output files.\n\n  * **generative** transformations noted with a fat arrow `=>`. A plain\n    transformation is instantiated for each file matched in the prerequisite\n    globbing pattern. For example, if we have two files `foo.c` and `bar.c`,\n    the relation:\n\n        *.c Compile => *.o *.d ;\n\n    is interpreted as:\n\n        foo.c Compile -> foo.o foo.d ;\n        bar.c Compile -> bar.o bar.d ;\n\n#### Patterns\n\nGlobbing patterns can appear both as prerequisites and targets, but yield\ndifferent results. Prerequisite patterns expand from two sources:\n\n  * existing source files matching the pattern;\n  * other relations' targets matching the pattern.\n\n[Minimatch](https://github.com/isaacs/minimatch) is used to match the files.\nA prerequisite pattern never matches the targets of the same transformation;\nfor example, `dist/*.js Minify => dist/*.min.js` does not create a cycle.\n\nPatterns as targets can only appear right of generative transformations. For\neach prerequisite found, *mekano* performs a pattern transposition. Currently\nthe system is pretty limited and only the symbols `**` and `*` are accounted\nfor: it copies everything from the left of the first start, and right of the\nlast star.\n\nFor example, for a relation `src/**/*.c Compile => obj/**/*.o`, if a file\n`src/a/foo.c` was found, the target pattern is expanded to `obj/a/foo.o`.\nOn the other hand, a pattern like `src/**/foo/*.c` won't work properly\nbecause `/foo/` will be lost in the process.\n\nGenerative pattern transposition is planned to be hugely improved in the future.\n\n### Binds\n\nValue bind grammar is as below:\n\n    bind = value-name, \"=\", interpolation, \";\" ;\n    value-name = identifier ;\n\nA value cannot be unbound or overridden, but can be rebound in inner scopes.\nInterpolations can refer to existing values with `$name` or `$(name)`. Example:\n\n    bin = `node_module/.bin` ;\n    coffee = `$bin/coffee` ;\n\nA bound value is available anywhere in the mekanofile, even before the\ndeclaration. The order of declaration does not matter; but you cannot have\ncircular references.\n\nFile update\n-----------\n\nOnce the mekanofile has been read, *mekano* executes the steps below.\n\n  * Build a graph of all the files according with the relations.\n  * Topologically sort the files considering their dependencies.\n  * Determine the *imprint* of each file involved. The imprint is a\n    [MurmurHash](http://en.wikipedia.org/wiki/MurmurHash) accounting for a\n    file prerequisites and timestamp.\n  * Determine which transformations are needed to be run by comparing imprints\n    to the update log generated by the previous run of *mekano*, if any.\n  * Remove *orphans*: old generated files that are not in the graph anymore.\n  * Invoke recipes in order to update files. When possible, recipes are\n    called asynchronously to make the update faster.\n\nAny output directory containing targets is automatically created by *mekano*\nduring the update.\n\nThe update log is located in `.mekano/log.json` and contains the imprint of\neach generated file. **Never delete the log file!** To do a whole rebuild, use\nthe **clean** command instead. If you delete the log, bad things will\nhappen, because *mekano* will consider all the generated files so far as\nsources. This means, for example, that minified files (`foo.min.js`) will be\nminified again (`foo.min.min.js`).\n\nWhen you are using a version control tool, like **git(1)**: if you are\nadding built files to the repository (and not just the sources), then you\nshall add the log file as well. Otherwise, people checking out the repo.\nwill get trouble because *mekano* won't know which file is generated and which\nis not.\n\nKnown limitations\n----------------\n\nIt is generally planned to improve upon those limitations.\n\n  * no logic, no 'if', limited semantics;\n  * pattern transposition for generative transformations is very basic;\n  * no dependency-only prerequisites, no parsing of preprocessors dependency\n    files (eg. [`gcc -MM`](http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Preprocessor-Options.html));\n  * no recipe-specific or transformation-specific binds;\n  * a bug appears, for the command `watch' only, when a\n    [file is renamed](https://github.com/shama/gaze/issues/107);\n  * generative transformations accept only one pattern prerequisite;\n  * may be too slow for medium or large projects.\n\nSee also the [ROADMAP](./ROADMAP.md).\n\nTrivia\n------\n\n#### Why not reusing the make syntax?\n\nThe classic *make* syntax \"targets: prerequisites\" is not employed because:\n\n  * it may not be very clear how to express transformation chains (something\n    like `foo: bar: glo`?);\n  * inference is done the other way around than *make* (it infers targets based\n    on prerequisites; make does the opposite with rules like `%.o: %c`).\n\n#### Shout out\n\nTo the masters from which *mekano* is inspired:\n\n  * the historic [GNU make](http://www.gnu.org/software/make/manual/make.html);\n  * the fast [Ninja](http://martine.github.io/ninja/);\n  * the cutting-edge [tup](http://gittup.org/tup/);\n  * the down-to-earth [grunt](http://gruntjs.com/).\n","maintainers":[{"name":"undashes","email":"jean@lauliac.com"}],"time":{"modified":"2022-06-19T17:39:49.856Z","created":"2014-05-20T17:34:41.822Z","0.0.0":"2014-05-20T17:34:41.822Z","0.0.1":"2014-05-22T09:38:43.829Z","0.0.2":"2014-05-25T17:48:08.224Z","0.0.3":"2014-05-25T19:56:39.698Z","0.0.4":"2014-05-28T09:16:59.275Z","0.0.5":"2014-05-31T21:03:30.780Z","0.0.6":"2014-06-04T15:06:40.734Z","0.0.7":"2014-06-07T15:58:09.191Z","0.1.0":"2014-06-08T19:04:08.884Z","0.1.1":"2014-06-08T19:12:50.160Z","0.1.2":"2014-06-09T18:01:09.753Z","0.1.3":"2014-06-10T08:26:59.755Z","0.1.4":"2014-06-10T18:23:57.504Z","0.1.5":"2014-06-13T19:38:10.991Z","0.1.6":"2014-07-02T08:57:59.850Z","0.1.7":"2014-07-20T16:43:15.135Z"},"homepage":"https://github.com/jeanlauliac/mekano","keywords":["make","makefile","mekafile","build","system","ninja","update","generate","maintain","task","command","minify","compile","transpile","link","tool","jake","rake","cake","cli","asset","pipeline"],"repository":{"type":"git","url":"git://github.com/jeanlauliac/mekano.git"},"author":{"name":"Jean Lauliac","email":"jean@lauliac.com"},"bugs":{"url":"https://github.com/jeanlauliac/mekano/issues"},"license":"ISC","readmeFilename":"README.md"}